Системы реального времени Лекция 3: ядро ОСРВ
ОСРВ: ядро + приложения (вспомним… ) ОСРВ можно условно разделить на ядро системы и приложения более высокого уровня Ядро = BSP + драйвера устройств
Ядро: BSP и драйвера BSP (Board Support Package – набор средств поддержки платы) – самая важная часть ядра Структура исходных BSP обычно является иерархической
Структура кода BSP Первый уровень – архитектуры (Intel x86, Motorola 68xxx, Motorola PowerPC, ARM, MIPS, …) Второй уровень – процессора или группы процессоров (для x86 – 386, 486, Pentium II…) Третий уровень – поддержки конкретных плат
Структура кода BSP: пример Рассмотрим на примере HardHat Linux 2.0: arch/mips – первый уровень arch/mips/au1000 – второй уровень arch/mips/pb1100 – третий уровень
Структура кода BSP: дополнение на каждом уровне может встречаться код, общий для всех его подуровней Уровни могут быть реализованы не так, как в примере (подкаталогами), а любым другим образом (например, «все в кучу» )
«Обязанности» BSP проводить всю первичную инициализацию (память, шины, таблицы прерываний) проводить инициализацию и обеспечивать поддержку интегрированных в процессор устройств (например, real-time clock или Ethernet-контроллер)
Драйверы Драйверы ядра можно условно поделить на драйверы устройств и интерфейсов Драйвер устройства либо напрямую взаимодействует с BSP/процессором, либо регистрируется в драйвере интерфейса
Драйверы устройств и интерфейсов Пример драйвера интерфейса – драйвер IDE/ATA Драйвером устройства, регистрирующимся в драйвере IDE, может быть драйвер жесткого диска или платы CompactFlash
Драйвер устройства инициализирует устройство Обеспечивает интерфейс для работы с этим устройством (напрямую или через драйвер интерфейса)
Драйвер интерфейса Обеспечивает универсальный (чаще всего стандартизированный) интерфейс к группе функционально близких устройств Регистрирует драйвера устройств и в дальнейшем служит «прослойкой» между драйверами устройств и приложениями ОС
Интерфейс с драйверами Наиболее общий метод – системный вызов ioctl() Система решает, какому драйверу адресован данный вызов ioctl(), и переадресует вызов Драйвер производит требуемые действия и возвращает системе ответные данные Система в соответствии с ними устанавливает код возврата, код ошибки и передает данные пользователю