Компиляция ядра - не производится bzImage / vmlinuz - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь скомпилировать ядро ​​(измененная версия 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 (на противоположной стороне есть множество направляющих ...)?

Спасибо

Ответы [ 2 ]

4 голосов
/ 01 марта 2012

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

0 голосов
/ 03 марта 2012

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

Просто скачайте 100-мегабайтный набор инструментов arm-eabi из http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ (это бесплатноно они хотят вашу электронную почту, как компилятор Intel x86).У него есть установщик, просто скажите «следующий», пока не закончите, как в 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 с хоста.Если вы используете root NFS, это тривиально, но если вы используете образ диска, вам нужно либо:

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

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

...