Compiling a kernel - no bzImage/vmlinuz produced

Refresh

February 2019

Views

4.7k time

1

I'm trying to compile a kernel (altered version of 2.6.32.9, found here https://github.com/rabeeh/linux-2.6.32.9). I am doing the compilation on a emulated ARM system (qemu) (yes, I should probably cross-compile, but that's a different topic) running Ubuntu Core (https://wiki.ubuntu.com/Core) and the kernel (vmlinuz) from Ubuntu 11.04 (downloaded from http://ports.ubuntu.com/ubuntu-ports/dists/natty/main/installer-armel/current/images/versatile/netboot/vmlinuz).

After running make bzImage, I look in the arch/arm/boot folder, and find only a file called zImage. I tried using this zImage instead of the vmlinuz I downloaded from ubuntu.com in qemu, but that doesn't work, just shows a black screen. I guess zImage is not the same as bzImage, which is what I think vmlinuz (judging from different articles on the internet) is.

So, a few questions:

  1. Why doesn't make bzImage produce a bzImage/vmlinuz?
  2. Can I convert a vmlinux to a vmlinuz using for example mkimage (there are lots of guides on the opposite...)?

Thanks

2 answers

4

The bzImage filename and make target was originally x86-specific (big zImage). Many of the bootloaders on architectures that are not equal to baremetal-x86 (SPARC, PPC, IA64, etc. and also Xen on *) directly take vmlinux (or one of its compressed forms, for example vmlinux.gz, aka zImage). I guess some maintainers just added bzImage as a make target name because they wanted to have the x86 madness on their arch as well.

0

Я получаю результат вы описываете, задавая QEMU для эмуляции другого процессора, чем ARM926EJ-х годов. Но загрузка versatilepb с CPU по умолчанию работ в. Я кросс-скомпилирован мое ядро, и я свел все драйверы в нем (так что я не использую INITRD).

Просто скачайте 100MB руки-EABI набор инструментов из http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ (это бесплатно , но они хотят свою электронную почту, как x86 Intel компилятор ). Он имеет инсталлятор, просто сказать : «Следующий» , пока это не будет сделано, как на Windows. Затем добавьте каталог бен в пути:

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 (зависит от хоста ядра, имеющего дм-многолучевости) или
  • QEMU-NBD, который поддерживает qcow (и зависит от ядра хоста, имеющей поддержку сетевого блока устройства)

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