Компиляция ядра - bzImage/vmlinuz не создается

Я пытаюсь скомпилировать ядро ​​(измененная версия 2.6.32.9, найдена здесь https://github.com/rabeeh/linux-2.6.32.9). Я выполняю компиляцию на эмулируемой системе ARM (qemu) (да, наверное, мне следует кросс-компилировать, но это другая тема) под управлением Ubuntu Core (https://wiki.ubuntu.com/Core) и ядра (vmlinuz ) из Ubuntu 11.04 (загружено с http://ports.ubuntu.com/ubuntu-ports/dists/natty/main/installer-armel/current/images/versatile/netboot/vmlinuz).

После запуска make bzImage я смотрю в папку arch/arm/boot и нахожу только файл с именем zImage. Я попытался использовать этот zImage вместо vmlinuz, который я скачал с ubuntu.com в qemu, но это не работает, просто показывает черный экран. Я предполагаю, что zImage - это не то же самое, что bzImage, что я думаю о vmlinuz (судя по разным статьям в Интернете).

Итак, несколько вопросов:

  1. Почему make bzImage не создает bzImage/vmlinuz?
  2. Могу ли я преобразовать vmlinux в vmlinuz, используя, например, mkimage (есть много руководств по противоположному...)?

Спасибо


person joscarsson    schedule 01.03.2012    source источник
comment
Я сделал полностью автоматизированную установку QEMU + Buildroot, которая просто работает BTW: github.com/ cirosantilli/linux-kernel-module-cheat   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 20.11.2018


Ответы (2)


Я получаю описанный вами результат, попросив qemu эмулировать процессор, отличный от arm926ej-s. Но загрузка universalpb с процессором по умолчанию работает. Я кросс-компилировал свое ядро ​​и скомпилировал в него все драйверы (поэтому я не использую initrd).

Просто загрузите набор инструментов arm-eabi объемом 100 МБ с http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ (это бесплатно, но им нужна ваша электронная почта, например, компилятор x86 Intel). У него есть установщик, просто скажите «Далее», пока он не будет готов, как в Windows. Затем добавьте каталог bin к вашему пути:

export PATH=~/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI/bin/:$PATH

Затем вернитесь в исходный каталог ядра и выполните

make ARCH=arm CROSS_COMPILE=arm-none-eabi- menuconfig
make ARCH=arm CROSS_COMPILE=arm-none-eabi- zImage modules

Ты можешь сделать

sudo make ARCH=arm CROSS_COMPILE=arm-none-eabi- INSTALL_MOD_PATH=path_to_arm_root modules_install

если вы можете получить доступ к файловой системе ARM с хоста. Если вы используете корень NFS, это тривиально, но если вы используете образ диска, вам необходимо:

  • используйте необработанный образ диска и kpartx (зависит от ядра вашего хоста, имеющего dm-multipath) или
  • qemu-nbd, который поддерживает qcow (и зависит от ядра хоста, поддерживающего сетевые блочные устройства)

Для загрузки в qemu с диска вам потребуются правильные драйверы (SYM53C8XX SCSI). Универсальный defconfig не выбирает их.

person Z.T.    schedule 03.03.2012
comment
Спасибо за все советы, особенно про процессор и драйвер SCSI! Это, наконец, дало мне загрузочное ядро, и после добавления драйверов SCSI Qemu также нашел мой жесткий диск! Он по-прежнему не монтирует его, хотя я скомпилировал поддержку ext2, ext3 и ext4, но это другая проблема. - person joscarsson; 04.03.2012
comment
Есть ли в образе диска таблица разделов msdos? Есть ли в ядре MSDOS_PARTITION? универсальный дефконфиг не имеет его. - person Z.T.; 06.03.2012
comment
Я встроил все таблицы разделов в ядро, когда получил эту ошибку. Все до одного :) Я не думаю, что образ диска является разделом MSDOS, я создал его с помощью dd и mkfs.ext3. - person joscarsson; 09.03.2012
comment
Установщик Debian создает таблицу разделов msdos AFAIK. С отдельным разделом подкачки и все такое. - person Z.T.; 09.03.2012
comment
Я не использовал установщик Debian, я сделал это: dd if=/dev/zero of=rootfs bs=1M count=8096, mkfs.ext3 rootfs, mkdir mnt, sudo mount -o loop rootfs mnt, cd mnt, sudo tar -xzvf ../ubuntu-core-11.10-core-armel.tar.gz, sudo umount mnt. Я предполагаю, что это не создает таблицу разделов MSDOS, верно? - person joscarsson; 10.03.2012
comment
Это не так. Ядро, увидев диск, выставленный qemu -hda foo.img, действительно ожидает увидеть весь жесткий диск, а не отдельный раздел. Сделайте qemu-img create, выполните fdisk, mkfs один раздел из образа диска. Используйте это: en.wikibooks.org/wiki/QEMU/Images#Mounting_an_image_on_the_host - person Z.T.; 10.03.2012

Имя файла bzImage и цель make изначально были специфичны для x86 (большой zImage). Многие загрузчики на архитектурах, не равных baremetal-x86 (SPARC, PPC, IA64 и т.д., а также Xen на *) напрямую берут vmlinux (или одну из его сжатых форм, например vmlinux.gz, он же zImage). Я предполагаю, что некоторые сопровождающие просто добавили bzImage в качестве целевого имени, потому что они хотели, чтобы безумие x86 было и в их архитектуре.

person jørgensen    schedule 01.03.2012
comment
Спасибо, это объясняет эту часть. Вы хоть представляете, что мне нужно сделать, чтобы запустить ядро ​​в qemu (виртуальная машина)? Я не уверен, всегда ли vmlinuz является bzImage или может быть и zImage. Возможно, с моим zImage что-то еще не так, еще один шаг, который мне нужно сделать, чтобы запустить его в qemu... - person joscarsson; 01.03.2012