МЕНЮ

 

Гостевая книга

Форум

 

 

КАК ЗАГРУЖАЕТСЯ FREEBSD

            Ну, для начала, опишем пациента. Я разбирал FREEBSD 8.0 Stable, а именно самый минимальный образ для загрузки с CD-ROM (44 мб). Я выбрал именно его, так как он самый маленький и удобный.
            Итак, начало для загрузки стандартное - по адресу 0000:7C00 грузится загрузочный сектор (только не забываем что у CD-ROM сектора по 2 Кб), и запускается на выполнение. Как оказалось, у данного CD-ROM, этот сектор является одновременно файлом /boot/cdboot, размером 1201 байт. Состоит этот файл из двух частей - основной и небольшой заглушки, которая понадобится позже. То есть карта памяти у нас такая:

            Что делает этот файл CDBOOT? Довольно много всего. Во-первых, грузит файл /boot/loader по адресу 0000:9000, но сразу же переносит его в область под два мегабайта (00200000). Файл этот состоит из трех частей. Назовем их BTXLDR, BTX и LOADER.

            Потом он переносит BTX обратно (на адрес 0000:9000).

            Потом он переносит заглушку на адрес 0000:A000 и запускает программу BTX (с адреса 0000:9000). Все, CDBOOT больше не работает, поэтому рисовать его не будем:

            Дальше работает BTX. Единственная задача данной программы - настроить среду защищенного режима и запустить другую программу (с адреса A000). Поэтому BTX настраивает прерывания, таблицу дескрипторов, сегмент задачи и другие премудрости защищенного режима и запускает программу с адреса A000. А там, как вы видите, у нас заглушка. Вот она и запускается.
            Заглушка она на то и заглушка, что практически ничего не делает. Она вызывает прерывание 30H с EAX=1, передавая параметром адрес 00200000. Это прерывание перехватывается BTX и она начинает его обрабатывать. Это прерывание в BTX означает функцию EXEC, то есть "запустить программу с данного адреса". Так как адрес - 00200000, то запускается BTXLDR.
            BTXLDR нужен для того, чтобы решить одну проблему: файл LOADER - это стандартный ELF-файл, типичный для FREEBSD. Но только ядра еще нет, и обрабатывать такие файлы некому. Поэтому BTXLDR просто преобразует ELF файл в обычный набор кодов, без всяких заголовков. После этого LOADER переносится на адрес 0000:A000.

            А дальше... Происходит переход на адрес 0000:9000. Там у нас BTX. Да! BTX работает во второй раз. Как вы помните - он настраивает защищенный режим и запускает программу с адреса 0000:A000. Вот только там уже не заглушка, а полноценная программа - LOADER, без всяких заголовков, только код.
            Чтобы рассказать что такое LOADER надо не одну статью, а эту мы на этом закончим. Статьи про LOADER скоро появятся.

Назад  
 

Хостинг от uCoz