5. Загрузка образа ядра |
Предыдущая Содержание Следующая |
Образами ядра, генерируемыми процессом сборки ядра, являются либо файл без сжатия "Image", либо сжатый файл zImage.
Несжатый образ Image, как правило, не используется, так как он не содержит легко идентифицирумое магическое число. Практически повсеместно предпочтение отдаётся использованию сжатого формата zImage.
zImage имеет ряд преимуществ в дополнение к магическому числу. Как правило, декомпрессия образа быстрее, чем чтение с какого-либо внешнего носителя. Целостность образа может быть гарантирована, так как любые ошибки приведут к ошибке декомпрессии. Ядро знает свою внутреннюю структуру и состояние, которое позволяет получить лучший результат, чем общие внешние методы сжатия.
zImage имеет в своём начале магическое число и некоторую полезную информацию.
Таблица 2. Используемые поля в заголовочном коде zImage
Смещения начала и конца могут быть использованы для определения длины сжатого изображения (размер = конец - начало). Это используется некоторыми загрузчиками, чтобы определить, были ли добавлены в образ ядра какие-либо данные. Эти данные обычно используются для первоначального RAM диска RAM (initrd). Начальный адрес, как правило, 0, так как код zImage позиционируется независимо.
Код zImage является позиционно-независимым кодом (Position Independent Code, PIC), поэтому может быть загружен куда угодно в пределах имеющегося адресного пространства. Максимальный размер ядра после распаковки 4 мегабайта. Это жёсткое ограничение и будет включать initrd, если была использована цель bootpImage.
Примечание Хотя zImage может быть расположен в любом месте, следует позаботиться об этом. Старт сжатого ядра требует дополнительной памяти для распаковки образа. Это пространство имеет определённые ограничения.
Код декомпрессии zImage гарантирует, что скомпрессированные данные не будут перезаписаны. Если ядро обнаруживает такой конфликт, оно будет распаковывать образ сразу после сжатых данных zImage и перенесёт ядро после декомпрессии. Это, очевидно, имеет последствия, что после области памяти загрузки zImage должно быть до 4 мегабайт свободного места после него (максимальный размер несжатого ядра), то есть размещение zImage в том же 4-х мегабайтном банке, как и ZRELADDR, будет, вероятно, не работать, как ожидалось.
Несмотря на возможность разместить zImage в любом месте памяти, традиционно оно загружается по базовому адресу физической памяти плюс смещение 0x8000 (32K). Это оставляет пространство для блока параметров, обычно размещённого со смещением 0x100, нулевой страницы векторов исключений и таблиц страниц. Это соглашение является очень распространённым.
| ||||||||||||
Предыдущая Содержание Следующая |