Замена загрузочного ядра в инсталляционном образе CD NetBSD

qnub аватар

Version 0.0.0
qnub[lost][Russian NetBSD team][ruNetBSD]

Содержание

  1. Предыстория.
  2. Инструментарий.
  3. Ход работы.
  4. Заключение.
  5. Ссылки.

Предыстория.

Случаются ситуации когда дистрибутив NetBSD на CD (в моем случае
amd64cd-3.0.iso) немного не подходит к системе. В моем случае система
отказалась загружаться с 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.

  1. Естественно нам понадобится образ диска с системой, которую мы будем препарировать (можно конечно ее собрать самому из исходников, но думаю лучше знать, что ты накосячил только в ядре, а не сомневаться во всей системе :)).
  2. Для сборки нам понадобится рабочая система с NetBSD, желательно препарируемой версии, но можно использовать другу платформу (пытался собрать на 2.0 для 3.0 - было много гимору, ядра для amd64 на i386 собираются без вопросов) подойдет виртуальная система, например VMWare.
  3. Исходники системы. syssrc.tgz.
  4. Для крoсплатформенной сборки ядра нам также понадобятся все остальные исходники кроме X:
  5. для полной сборки системы с нуля вместе с X необходимxsrc.tgz.
  6. Утилита создания iso образа установочного CD с нашим загрузочным ядром mkisofs.
  7. Ваша любимая утилита для прожига CD.
Примечание: система должна быть установлена и работоспособна. Ничего дополнительно на нее устанавливать не нужно, кроме mkisofs и утилиты прожига дисков.

в начало

Ход работы.

  1. Для начала нам нужно распаковать все исходники:
    # cd <папка с архивами исходников>
    # cp *src.tgz /
    # tar -zxvf syssrc.tgz
    при кросплатформенной сборке к предыдущей троке через пробел добавьте:
    && tar -zxvf src.tgz && tar -zxvf gnusrc.tgz && tar -zxvf sharesrc.tgz
  2. Теперь нужно перейти в папку с исходниками:
    # cd /usr/src/
  3. Сделаем файл build.sh запускаемым:
    # chmod a+x ./build.sh
  4. При кроссплатформенной сборке ядра соберем родной инструментарий:
    # ./build.sh tools
  5. Перейдем к каталогу с конфигурационными файлами ядер необходимой архитектуры:
    # cd /usr/src/sys/arch/<архитектура>/conf/
  6. Скопируем оригинальный инсталляционный файл и внесем в него поправки:
    # cp INSTALL MY_BOOT
    # vi MY_BOOT
  7. При кроссплатформенной сборке ядра вернемся к каталогу с исходниками:
    # cd /usr/src/
  8. При кроссплатформенной сборке ядра соберем ядро с инструментарием для целевой платформы (ключ -m):
    # ./build.sh -m <архитектура> tools kernel=MY_BOOT
    После сборки будет выведен отчет где в строке
    "Kernels built from MY_BOOT:"
    будет указано месторасположение скомпилированного ядра.
  9. При сборке ядра для данной системы:
    # 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
  10. Ядро готово.

  11. Копируем его в какую-нибудь папку поудобнее:
    # cp <ядро> ~
  12. Теперь нужно сообразить загрузочный образ для CD. Таковым образом, в случе с NetBSD CD ISO образами, служит (прошу прощения за тавтологию) образ дискеты 2.88MB. Это файлы (от корня CD): /boot.amd64 (с которого собственно и происходит загрузка) /amd64/installation/floppy/boot-big.fs
  13. Создадим болванку дискеты:
    # cd ~
    # dd if=/dev/zero of=boot-my count=5760
  14. Назначим нашу болванку как виртуальное устройство:
    # vnconfig -t floppy288 -v /dev/vnd0 boot-my
    Примечание: если на этом этапе возникли ошибки, то скорее всего у Вас неполный файл /etc/disktab. Дополнить его можно содержимым из /usr/share/examples/disktab например командой:
    # cat /usr/share/examples/disktab >> /etc/disktab
  15. Разметим болванку как дискету 2.88MB (далее этот образ буду называть дискетой):
    # disklabel -rw /dev/vnd0d floppy288
  16. Создадим на нашей дискете файловую систему (отформатируем):
    # newfs -B le -m 0 -o space -i 204800 /dev/rvnd0a floppy288
  17. Образ дискеты готов. Осталось сделать ее загрузочной и разместить на ней необходимое нам ядро.

  18. Примонтируем дискету:
    #mount /dev/rvnd0a /mnt
  19. Если ядро объемом больше объема полученной дискеты (2949120) его можно (да и вообще его всегда желательно) сжать:
    # gzip -9 netbsd
  20. Копируем на дискету загрузчик и ядро:
    # cp /usr/mdec/boot /mnt
    # cp netbsd.gz /mnt
  21. Отмонтируем дискету и сделаем ее загрузочной:
    # umount /mnt
    # installboot -v /dev/rvdoa /usr/mdec/bootxx_usatfs
  22. Расконфигурируем виртуальное устройство:
    # vnconfig -u /dev/vnd0
  23. Дискета полностью готова к употреблению. Осталось либо записать полученный образ на дискету, либо, как в нашем случае, поместить ее в образ диска.

  24. Примонтируем образ установочного CD:
    # vnconfig -v /dev/vnd0 <образ_CD>
    # mount -r -t cd9660 /dev/vnd0c /mnt
  25. Скопируем с него все содержимое в отдельную папку:
    # mkdir iso
    # cp -R /mnt ./iso
  26. Скопируем туда же нашу дискету:
    # cp boot-my ./iso/
  27. Ну и наконец - создаем загрузочный инсталляционный диск NetBSD с собственным ядром:
    # mkisofs -flrTv -b ./iso/boot-my -o my_NetBSD.iso ./iso/
  28. Вам теперь остается только залить образ на болванку насладиться
    работоспособностью вашего ядра :)

в начало

Заключение.

Поставленной цели - замены загрузочного ядра на установочном CD мы добились.
Но я лично результата не достиг - NetBSD так и не захотела устанавливаться
на ноутбук (Acer Aspire 5024WLMi) :) видимо нужно патчить исходники. Надеюсь Вам повезет больше.

Дополнительную информацию по сборке полных билдов и релизов системы можно
почитать здесь Глава 27. Использование утилиты build.sh
посборке и компиляции ядер здесь:
Глава 28. Компиляция ядра

Также не стесняйтесь обращаться к соответствующим man страницам.

в начало

Ссылки.

  1. ISO образы установочных CD NETBSD.
  2. http://www.vmware.com.
  3. Исходники NetBSD 3.0.
  4. mkisofs.

в начало
2006.01.10 16:15 (GMT +5)