XPost. CPIO под микроскопом.

Это кросспост моей статьи CPIO под микроскопом. Описание этого формата будет нам необходимо при рассмотрении вопроса создания RamFS. В статье приводятся примеры из HEX-редактора, так что удобнее, на мой взгляд, читать ее через браузер.

CPIO - это достаточно старый (1992 год), но в то же время очень удобный вариант архива. Он достаточно прост, и, возможно поэтому, получил широкое распространение. Например данный формат используют RPM, initramfs ядра Linux, а также установщик архивов "pax" от Apple.

Данный архив позволяет собирать любое число файлов, директори и других объектов файловой системы (символических ссылок и т.д.) в единый поток байт.

Урок 6. Страничная адресация

В данном уроке мы собираемся настроить страничную адресацию. Она служит для двух целей: для защиты памяти и организации виртуальной памяти.

Урок 5. Аппаратные прерывания

В этот раз мы с вами создадим обработчики аппаратных прерываний, один из которых будет вызывать прерыванием от аппаратного таймера.

Урок 4. GDT и IDT

GDT и IDT - это таблицы дескрипторов. Они представляют собой массивы флагов и битов, описывающих работу системы сегментации и таблицы векторов прерываний соответственно.

Перевод Multiboot Specification

Для своих нужд потребовалось копаться в этом документе, результатом чего стал этот перевод. Я не переводчик, да и с языком у меня проблемы, так что если будут замечания и улучшения по тексту - прошу в комментарии.

Урок 3. Вывод на экран

Итак, теперь у нас есть ядро, которое загружается и запускает бесконечный цикл. Самое время вывести что-нибудь интересное на экран. Вместе с портами ввода-вывода, монитор будет нашим главным союзником в процессе отладки ядра.

Урок 2. Приступаем к работе.

UPD. В данный урок были внесены изменения связанные с созданием образа диска для ВМ с ядром и загрузчиком. Теперь содержание статьи соответствует действительности.

2.1. Код для загрузки

Итак, настало время писать код. Хотя основной язык разработки ядра - С, есть некоторые модули, которые просто необходимо написать на языке ассемблера. Один из таких модулей - код инициализации и загрузки ядра.