Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Флаг активного загрузочного раздела
Начальный цилиндр/головка/сектор загрузочного раздела Тип раздела (Linux использует 0x83, РРС PReP использует 0x41) Конечный цилиндр/головка/сектор загрузочного раздела Номер начального сектора раздела Длина раздела (в секторах) В конце самотестирования и идентификации аппаратуры код инициализации системы (Firmware или BIOS) получает доступ к контроллеру жесткого диска для чтения MBR. После того как тип загрузочного устройства определен, код инициализации системы получает через задокументированный интерфейс (например, для диска ШЕ) доступ к головке 0, цилиндру 0 и сектору 0. После обнаружения устройства загрузки MBR копируется в память по адресу 0х7с00 и выполняется. Маленькая программа в голове MBR распаковывается и ищет в таблице разделов активный загрузочный раздел. Далее MBR копирует код с активного загрузочного раздела в адрес 0х7с00 и начинает его выполнение. Начиная с этой точки DOS обычно загружает систему х86. Тем не менее активный загрузочный раздел может иметь загрузчик, который, в свою очередь, загружает операционную систему. Теперь мы обсудим несколько наиболее распространенных загрузчиков, используемых Linux. Рис. 8.2 демонстрирует то, как выглядит память во время загрузки. Загрузчики
Рис. 8.2. Вид памяти во время загрузки GRUB Grand Unified Bootloader (GRUB)1 - это х86-загрузчик, используемый для загрузки Linux. GRUB 2 на момент написания книги находился в процессе портирования на РРС. Соответствующая документация, включающая его историю и особенности дизайна, находится на www.gnu.org/software/grub. GRUB распознает файловые системы на загрузочных дисках, а ядро может быть загружено из указанного файла, диска и раздела, где оно расположено. GRUB является двухэтапным загрузчиком (two-stage bootloader2). Этап 1 инсталлируется в MBR и вызывается из BIOS. Этап 2 вначале загружает этап 1, а по его завершении загружается из файловой системы. Остановки и события, возникающие на каждом из этих этапов, перечислены далее. Этап 1 Инициализация. Определение загрузочного диска. Загрузка первого сектора этапа 2. Переход на этап 2. *• Великий унифицированный загрузчик. Примеч. пер. 2 Иногда GRUB использует этап 1.5, но мы рассмотрим только два обыкновенных этапа. Глава 8 • Загрузка ядра Этап 2 1. Загрузка остатка этапа 2. 2. Переход в загруженный код. Доступ к GRUB можно получить через интерактивную командную строку или интерфейс с набором меню. При использовании интерфейса с меню должен быть создан файл конфигурации. Далее приведена строка из конфигурационного файла GRUB, загружающего ядро Linux. /boot/menu.1st title Kernel 2.6.7, test kernel root (hd0, 0) kernel /boot/bzImage-2.6.7-mytestkernel root=/dev/hdal ro Пункт title хранит метку для настройки; root устанавливает текущее корневое устройство в hdO, раздел 0; kernel загружает первичный загрузочный образ ядра из указанного файла. Оставшаяся информация о записях ядра передается в качестве параметров во время загрузки ядра. Некоторые аспекты загрузки, такие, как месторасположение загружаемого и распаковываемого образа ядра, конфигурируется в аппаратно-зависимом разделе кода ядра Linux. Давайте рассмотрим arch/ i3 8 б /boot /setup. S, где хранятся такие настройки для х86. arch/i836/boot/setup.S 61 INITSEG = DEF_INITSEG # 0x9000, перемещаем загрузчик сюда с дороги 62 SYSSEG = DEF_SYSSEG # 0x1000, система загружается из 0x10000 (65536). 63 SETUPSEG = DEF_SETUPSEG # 0x9020, это текущий сегмент1 Эта конфигурация указывает, какой образ Linux загружать в линейный адрес 0x9000, и переходит по адресу 0x9020. В этой точке распакованная часть ядра Linux распаковывает запакованную часть по адресу 0x10000 и начинает инициализацию ядра. GRUB основан на Многозагрузочной спецификации(МиШЪоо1 Specification). На момент написания книги Linux еще не обладал всеми структурами, необходимыми для многозагрузочной компиляции, но обсудить многозагрузочные требования все-таки стоит. к Ядро воспринимает спецификацию во время загрузки через командную строку ядра. Это строка, описывающая список параметров, хранящих информацию об аппаратной специфике, значениях по умолчанию и т. д. Более подробную информацию о загрузочной строке Linux можно найти по адресу www.tldp.org/HOWTO/ BootPrompt-HOWTO.html. Загрузчики Многозагрузочная спецификация Многозагрузочная спецификация описывает интерфейс между любым потенциальным загрузчиком и любой потенциальной операционной системой. Многозагрузочная спецификация не указывает, как должен работать загрузчик, а только указывает интерфейс для работы с загружаемой операционной системой. Текущая цель - это архитектура х86 и свободные 32-битовые операционные системы, для которых предусматривается стандарт передачи конфигурационной информации из загрузчика в операционную систему. Образ ОС может быть любого типа (ELF или специального), но должен содержать многозагрузочный заголовок (multiboot header) в первых 8 Кб образа вместе с магическим числом 0xlBADB002. Многозагрузочный загрузчик должен предоставлять и метод для вспомогательных загрузочных модулей или драйверов, используемых некоторыми ОС во время загрузки, так как эти ОС не загружают все необходимое для работы в загрузочный образ ядра. Обычно так поступают модульные загрузочные ядра, для того чтобы размер загрузочного ядра не выходил за разумные пределы. Многозагрузочная спецификация диктует, что, когда загрузчик вызывает ОС, система должна находиться в специальном 32-битовом реальном режиме, для того чтобы ОС могла выполнять обратные вызовы из BIOS. И наконец, загрузчик должен предоставить ОС структуры данных, заполненные основными машинными данными. Далее мы рассмотрим структуры данных с многозагрузочной информацией. typedef struct multiboot__info { ulong flags; // описывает следующие поля ulong mem_lower; // если flags[0], количество памяти < 1М ulong mem_upper; // если flags[0], количество памяти > 1M ulong boot_device; // если flags[l], диск, parti, 2, 3 ulong cmdline; // если flags[2], адрес командной строки ulong mods_count; // если flags[3], # загрузочного модуля ulong mods_addr; // если flags[3], адрес первого загрузочного модуля union { aout_symbol__table_t aout_sym; // если flags[4], таблица символов //из a.out образа ядра elf_section_header_table_telf_sec; //еслиflags [5], заголовок //из ELF ядра } и; ulong mmap_length; // если flags[б], BIOS длина отображения в память ulong mmap_addr; // если flags[б], адрес отображения BIOS ulong drives_length; // если flags[7], информационная структура // диска BIOS ulong drives_length; // если flags[7], первая информационная // структура BIOS. Глава 8 • Загрузка ядра ulong config_table // если flags[8], настроечная таблица ROM ulong boot_loader_name // если flags[9], адрес строки ulong apm_table // если flags[10], адрес информационной таблицы АРМ ulong vbe_control_infо // если flags[11], настройка видеорежима ulong vbe_mode_infо ulong vbe_mode ulong vbe_interface_seg ulong vbe_interface_off ulong vbe_interface__len }; Указатель на эту структуру передается в ЕВХ, когда управление передается ОС. Первое поле, flags указывает, какие из следующих полей верны. Неиспользуемые поля должны иметь значение 0. Вы можете подробнее изучить Многозагрузочную спецификацию по адресу www.gnu.org/software/grub/manual/multiboot/multi-boot.html. LILO Linux Loader (LILO)1 используется в качестве х86-загрузчика Linux уже много лет. Это одна из простейших программ загрузки, доступная для настройки и загрузки ядра Linux. LILO похож на GRUB в плане того, что он тоже работает в два этапа. LILO использует файл конфигурации и не имеет интерфейса командной строки. Мы снова начнем с инициализации BIOS системы и загрузки MBR (этап 1) в память и передачу в него управления. Остановки и события, возникающие на каждом из этапов LILO, описаны ниже. Этап1 1. Начало выполнения и отображение «L». 2. Распознание геометрии диска и отображения «I». 3. Загрузка кода этапа 2. Этап 2
1. Начало выполнения и отображение «L». 2. Нахождение данных загрузчика и ОС, отображение «О». 3. Определение, какую ОС загружать, и переход в нее. Фрагмент из конфигурационного файла LILO выглядит следующим образом: 1 Загрузчик Linux. Примеч. пер. Загрузчики /etc/lilo.conf image=/boot/bzImage-2.б.7-mytestkernel label=Kernel 2.6.7, my test kernel root=/dev/hda6 read-only Параметрами являются image, указывающий путь к ядру; label 1, описывающий строку конфигурации; root, описывающий раздел, где находится корень файловой системы, и read-only, описывающий варианты корневых разделов при загрузке. Далее приведен список различий между GRUB и LILO. • LILO хранит конфигурационную информацию в MBR. Если производятся какие-то изменения, для обновления MBR необходимо вызвать /sbin/lilo. • LILO не может читать различные файловые системы. • LILO не имеет интерфейса командной строки. Давайте рассмотрим, что происходит, когда LILO устанавливается в качестве загрузчика. Сначала MBR (содержащий LILO) копируется в 0х7с00 и начинает свое выполнение. LILO начинает с копирования образа ядра, указанного в /etc/lilo.conf, с жесткого диска. Этот образ, созданный с помощью build, с, подготавливается из сектора init (загружаемого в 0x90000), настроечного сектора (загружаемого в 0x90200) и сжатого образа (загружаемого в 0x10000). Далее LILO переходит по метке start_of_setup по адресу 0x90200. PowerPC и Yaboot Yaboot - это основанный на OpenFirmware (OF) загрузчик машин PowerPC New World. Аналогично LILO и GRUB, Yaboot использует конфигурационный файл и утилиты наподобие ybin и ybootconf ig для установки загрузочного раздела, содержащего Yaboot. Аналогично BIOS x86, OF позволяет настройку загрузочного диска. Однако в случае OF он различается от системы к системе. Настройки OF обычно можно узнать, введя «Сот-mand+Option/Alt+o+f.? ». Yaboot использует следующие шаги загрузки: 1. Yaboot вызывается OF. 2. Ищет загрузочные устройства, загрузочные пути и открытые загрузочные разделы. 3. Открывает /etc/yaboot. conf или командную оболочку. 4. Загружает образ ядра и initrd. 5. Выполняет образ. Глава 8 • Загрузка ядра Как вы можете видеть, фрагмент загрузочной информации для Yaboot аналогичен LELO и GRUB: yaboot.conf label=Linux root=/dev/hdall sysmap=/boot/System.map read-only Как и в случае LILO, ybin устанавливает Yaboot в загрузочный раздел. Любые обновления-изменения в конфигурацию Yaboot требуют запуска ybin. Документацию на Yaboot можно найти на www. penguinppc. org. Популярное:
|
Последнее изменение этой страницы: 2016-03-25; Просмотров: 1097; Нарушение авторского права страницы