План на курса
Въведение
- бърза история на 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 (силно препоръчително!) и/или да имате добра запознаност с темите, описаните там
Отзиви от потребители (5)
Много полезна допълнителна информация
Grzegorz - Comp S.A.
Курс - BLoC Pattern
Машинен превод
Едвард е отличен фасилитатор
Zibusiso Ncube - Agricatural Research Council
Курс - Ionic 4 and Angular for Developers
Машинен превод
Знанията на Мигел за темата бяха обширни. Той направи обучението лесно разбираемо, а потока беше сбалансиран, допълватейки всеки раздел с нови функции по мере коito те бяха необходими. Той покри всичко, за които бяха зададени въпроси, и отговори на всеки един от тях подробно. Това беше много приятен опит.
Paul Coaton - SEMPCheck Services
Курс - Flutter Development Bootcamp with Dart
Машинен превод
Че тренерът се адаптира към нашите нужди
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Курс - The Yocto Project - An Overview - hands-on
Машинен превод
Тренерът беше ентусиастичен, добър и обичаше темата.
Isaac Murphy - Royal New Zealand Airforce
Курс - Build Native iOS and Android Apps with Flutter
Машинен превод