План на курса

Въведение

  • бърза история на GNU/Linux
  • лицензиране
  • версиониране на ядрото
  • цикъл на пускане
  • дървета с ядро
  • основен стволов
  • ядро против потребителско пространство
  • механизъм срещу политика
  • альтернативи за драйверите на ядрото
  • RTOS против Linux

Управление на паметта

  • виртуална памет срещу физическа памет
  • алтернативи за разпределяне на памет в ядрото
  • страници
  • зони
  • API
  • slab

Патч на ядрото

  • жизнен цикъл
  • git
  • изходен код на ядрото
  • създаване на патч
  • проверка на патча
  • корекция на патча
  • изпращане на патч
  • аудитиран код

Модули на ядрото

  • получаване на изходните кодове на ядрото
  • конфигуриране/създаване/инсталиране
  • драйвери за устройства (статично свързани, зареждани по време на изпълнение)
  • инициализация/изход
  • лицензиране
  • EXPORT SYMBOL GPL
  • Makefile извън дървото на ядрото
  • module-init-tools
  • модул в дървото на ядрото
  • Kconfig
  • прехвърляне на параметри
  • sparse

Драйвери за символни устройства

  • архитектура
  • интерфейс между потребителско и ядрено пространство
  • подсистема за в/изход
  • VFS
  • sysfs (устройства, бусове, драйвери, класове)
  • kobject/ktype/kset
  • модел на драйверите в ядрото на Linux
  • файлове за устройства
  • драйвери за символни устройства
    • инициализация
    • регистрация
    • отваряне, освобождаване
    • cdev, cdev add, cdev del,...
    • основни/помощни номера
    • udev, udevmonitor, udevadm

Напредък в разработката на драйвери за символни устройства

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API за потребителско пространство
  • API за ядрено пространство
  • жизнен цикъл на процеса
  • спящо/блокираще състояние
  • спящо/пробудяване
  • очакващ ред
  • гремящ тълпата
  • poll/select

Отстраняване на грешки в ядрото

  • отстраняване на грешки
  • отстраняване на грешки в ядрото
    • двоично търсене с git
    • подкрепа за отстраняване на грешки от ядрото
    • printk syslogd, klogd, ниви на логове, ограничаване на скоростта, ниви на дебъгинг, избирателни подсистеми за дебъгинг
    • отстраняване на грешки чрез опитване debugfs
    • оутсангиране на грешки, утвърждаване на оутсани
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

Трейсинг

  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamic tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Преривания

  • преривания срещу опитване
  • прериване
  • програмни секции
  • повторяемост
  • събития
  • обработчик на прериване
  • споделен обработчик на прериване
  • поток на прериването
  • контрола на прериванията

Отлагане на работа

  • горна/долнна половина
  • softirqs
  • tasklets
  • work queues
  • нити с преривания

Конкуренция

  • критична зона/секция
  • атомарно
  • гонка на условията
  • синхронизация
  • блокиране
  • решения за блокиране
  • deadlock
  • съпротива
  • какво да блокира?
  • какво може да се използва?
    • атомарни операции
    • спин локове
    • ридър-райтер спин локове
    • семафор
    • бинарен семафор
    • мютекси
    • ридър-райтер семафор
    • завършващи променливи
    • последователни локове
    • изключване на прехвърлянето
    • редица и бариери

Време

  • HZ
  • Jiffies
  • големи/малки задълбочвания
  • таймери на ядрото

Хардуерно в/изход

  • В/И портове
  • В/И памет
  • Как да се справите с побочните ефекти при достъп до регистри?

Комункация между потребителско и ядрено пространство

  • put(get)_user()
  • copy to(from)_user()
  • В/И на ядрото
  • мапиране на паметта
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Портабилност

  • размер на думата
  • непрозрачни типове
  • signed/unsigned char
  • подреждане на данните
  • целочислено промоциониране
  • повторно използване на код
  • байтов ендийан
  • системен тик
  • размер на страницата
  • реда на командите
  • SMP/прехвърляне/високи паметни области

Освен когато по друго е указано, съдържанието и този обикновен план на курса са лицензирани под Атрибуция-Некомерсиално-Споделено на същите условия 4.0 Международен (CC BY-NC-SA 4.0).

Изисквания

  • Основна запознаност с използването на система GNU/Linux като крайно потребител
  • Основна запознаност с команден интерфейс
  • Основни знания за разработка на потребителско пространство / приложения
  • Промеждно ниво знания по програмиране на C
  • Трябва да сте присъствали на Архитектура на вградени системи GNU/Linux (силно препоръчително!) и/или да имате добра запознаност с темите, описаните там
 35 часове

Брой участници


Цена за участник

Отзиви от потребители (5)

Предстоящи Курсове

Свързани Kатегории