Замена загрузочного ядра в инсталляционном образе CD NetBSD
Version 0.0.0
qnub[lost][Russian NetBSD team][]
Содержание
Предыстория.
Случаются ситуации когда дистрибутив NetBSD на CD (в моем случае
) немного не подходит к системе. В моем случае система
отказалась загружаться с CD выдавая следующее:
ioapic0:conflicting map entries for pin 5
ioapic0:conflicting map entries for pin 0
ioapic0:conflicting map entries for pin 0
panic:unknown MPS interrupt polarity 2
после чего просила перезагрузки.
Ну я и подумал: "Кривовато ядрышко." и озадачился проблемой замены ядра в
загрузочном образе для CD.
Инструментарий.
Примечание: ссылки приведены на момент написания статьи, для версииNetBSD 3.0.
- Естественно нам понадобится диска с системой, которую мы будем препарировать (можно конечно ее собрать самому из исходников, но думаю лучше знать, что ты накосячил только в ядре, а не сомневаться во всей системе :)).
- Для сборки нам понадобится рабочая система с NetBSD, желательно препарируемой версии, но можно использовать другу платформу (пытался собрать на 2.0 для 3.0 - было много гимору, ядра для amd64 на i386 собираются без вопросов) подойдет виртуальная система, например .
- Исходники системы. .
- Для крoсплатформенной сборки ядра нам также понадобятся все остальные исходники кроме X:
- ;
- ;
- .
- для полной сборки системы с нуля вместе с X необходим.
- Утилита создания iso образа установочного CD с нашим загрузочным ядром .
- Ваша любимая утилита для прожига CD.
mkisofs и утилиты прожига дисков.
Ход работы.
- Для начала нам нужно распаковать все исходники:
# cd <папка с архивами исходников> # cp *src.tgz / # tar -zxvf syssrc.tgz
при кросплатформенной сборке к предыдущей троке через пробел добавьте:&& tar -zxvf src.tgz && tar -zxvf gnusrc.tgz && tar -zxvf sharesrc.tgz
- Теперь нужно перейти в папку с исходниками:
# cd /usr/src/
- Сделаем файл build.sh запускаемым:
# chmod a+x ./build.sh
- При кроссплатформенной сборке ядра соберем родной инструментарий:
# ./build.sh tools
- Перейдем к каталогу с конфигурационными файлами ядер необходимой
архитектуры:
# cd /usr/src/sys/arch/<архитектура>/conf/
- Скопируем оригинальный инсталляционный файл и внесем в него поправки:
# cp INSTALL MY_BOOT # vi MY_BOOT
- При кроссплатформенной сборке ядра вернемся к каталогу с исходниками:
# cd /usr/src/
- При кроссплатформенной сборке ядра соберем ядро с инструментарием для
целевой платформы (ключ -m):
# ./build.sh -m <архитектура> tools kernel=MY_BOOT
После сборки будет выведен отчет где в строке"Kernels built from MY_BOOT:"
будет указано месторасположение скомпилированного ядра. - При сборке ядра для данной системы:
# config MY_BOOT && cd ../compile/MY_BOOT/ && make depend && make
Скомпилированное ядро будет лежать в директории в которой Вы находитесь и будет называться "netbsd", а точнее:/usr/src/syc/arc/<>/compile/MY_BOOT/netbsd
Примечание: ядро можно также собирать утилитойbuild.shкак и при кросплатформенной сборке :)# cd /usr/src/ # ./build.sh kernel=MY_BOOT
- Копируем его в какую-нибудь папку поудобнее:
# cp <ядро> ~
Теперь нужно сообразить загрузочный образ для CD. Таковым образом, в случе
с NetBSD CD ISO образами, служит (прошу прощения за тавтологию) образ дискеты 2.88MB. Это файлы (от корня CD): - Создадим болванку дискеты:
# cd ~ # dd if=/dev/zero of=boot-my count=5760
- Назначим нашу болванку как виртуальное устройство:
# vnconfig -t floppy288 -v /dev/vnd0 boot-my
Примечание: если на этом этапе возникли ошибки, то скорее всего у Вас неполный файл/etc/disktab. Дополнить его можно содержимым из/usr/share/examples/disktabнапример командой:# cat /usr/share/examples/disktab >> /etc/disktab
- Разметим болванку как дискету 2.88MB (далее этот образ буду называть
дискетой):
# disklabel -rw /dev/vnd0d floppy288
- Создадим на нашей дискете файловую систему (отформатируем):
# newfs -B le -m 0 -o space -i 204800 /dev/rvnd0a floppy288
- Примонтируем дискету:
#mount /dev/rvnd0a /mnt
- Если ядро объемом больше объема полученной дискеты (2949120) его можно
(да и вообще его всегда желательно) сжать:
# gzip -9 netbsd
- Копируем на дискету загрузчик и ядро:
# cp /usr/mdec/boot /mnt # cp netbsd.gz /mnt
- Отмонтируем дискету и сделаем ее загрузочной:
# umount /mnt # installboot -v /dev/rvdoa /usr/mdec/bootxx_usatfs
- Расконфигурируем виртуальное устройство:
# vnconfig -u /dev/vnd0
- Примонтируем образ установочного CD:
# vnconfig -v /dev/vnd0 <образ_CD> # mount -r -t cd9660 /dev/vnd0c /mnt
- Скопируем с него все содержимое в отдельную папку:
# mkdir iso # cp -R /mnt ./iso
- Скопируем туда же нашу дискету:
# cp boot-my ./iso/
- Ну и наконец - создаем загрузочный инсталляционный диск NetBSD с
собственным ядром:
# mkisofs -flrTv -b ./iso/boot-my -o my_NetBSD.iso ./iso/
Ядро готово.
/boot.amd64 (с которого собственно и происходит загрузка) /amd64/installation/floppy/boot-big.fs
Образ дискеты готов. Осталось сделать ее загрузочной и разместить на ней необходимое нам ядро.
Дискета полностью готова к употреблению. Осталось либо записать полученный образ на дискету, либо, как в нашем случае, поместить ее в образ диска.
Вам теперь остается только залить образ на болванку насладиться
работоспособностью вашего ядра :)
Заключение.
Поставленной цели - замены загрузочного ядра на установочном CD мы добились.
Но я лично результата не достиг - NetBSD так и не захотела устанавливаться
на ноутбук (Acer Aspire 5024WLMi) :) видимо нужно патчить исходники. Надеюсь Вам повезет больше.
Дополнительную информацию по сборке полных билдов и релизов системы можно
почитать здесь
посборке и компиляции ядер здесь:
Также не стесняйтесь обращаться к соответствующим man страницам.
Ссылки.
- .
- .
- .
- .
- Страница для печати
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- 4313 просмотра