[U-Boot] Booting linux zImage on vexpress-a15
andre.wagner at richard-wolf.com
Tue Feb 5 18:05:55 UTC 2019
I'm trying to build a linux kernel as zImage and boot it with u-boot on
a qemu vexpress-a15 machine. The host machine is a Ubuntu 18.04.
What I tried until now:
1. Get Linux from git, export ARCH=arm and
2. Make Defconfig: make vexpress_defconfig
3. Enable 'Early Printk' with make menuconfig
4. Make Kernel: make
5. Get U-Boot from git, export ARCH=arm and
6. Make Defconfig: make vexpress_ca15_tc2_defconfig
7. Make U-Boot: make
8. Generate empty image file and mount it: truncate -s 100M image;
mkfs.ext4 image; mount -o loop image /mnt
9. Copy zImage and DTB to image: cp arch/arm/boot/zImage /mnt ; cp
10. Unmount Image: umount /mnt
11. Start u-boot in qemu: qemu-system-arm -m 1024M -M vexpress-a15 -cpu
cortex-a15 -kernel u-boot -serial stdio -sd image => U-Boot comes up and
I can hit a key to stop automount, ok so far
12. In u-boot, checking filesystem on image: ext4ls mmc 0:0 => I can see
my zImage and my DTB file, ok so far
13. In u-boot, loading kernel: ext4load mmc 0:0 82008000 zImage => XXXX
bytes read is shown, ok so far
14. In u-boot, loading DTB: ext4load mmc 0:0 85000000
vexpress-v2p-ca15_a7.dtb => YYYY bytes read, ok so far
15. In u-boot, boot: bootz 82008000 - 85000000 => 'Starting kernel ....'
and 'Uncompressing kernel done' is shown and then nothing at all...
Cross-checks I have done right now:
- Booting kernel and DTB directly from qemu with 'qemu-system-arm -m
1024M -M vexpress-a15 -cpu cortex-a15 -kernel arch/arm/boot/zImage -dtb
arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dtb -serial stdio' works, normal
boot output is shown. Also the standard console device ttyAMA0 is
available after mounting devtmpfs.
- Same setup with vexpress-a9 (uboot with vexpress_ca9x4_defconfig,
linux with vexpress_defconfig and DTB vexpress-v2p-ca9.dtb. The kernel
was loaded to 62008000 and the DTB to 65000000) worked, Normal boot
output was shown.
What I don't understand right now is:
- Am I using the corrected DTB? vexpress-v2p-ca15-tc1.dtb or
vexpress-v2p-ca15_a7.dtb ? Which is the right one?
- What are the addresses I need to load kernel and the DTB? In the
working vexpress-a9 sample the kernel was loaded with a offset of
2008000h and the DTB with a offset of 5000000h to start of RAM at
60000000h. So I decided use the same offsets with the alternate start of
RAM address of 8000000h of vexpress-a15, i.e. kernel at 82008000 and DTB
at 85000000. Is this assumption correct?
- 'Starting kernel...' is a last message from u-boot and 'Uncompressing
kernel done' the first from the kernels self extractor?
- Where in RAM is the zImage decompressed by u-boot bootz? Between start
of RAM at 80000000h and kernels loadaddr at 82008000h?
- What are the differences between loading kernel and DTB by qemu
directly and loading kernel and DTB indirectly via u-boot?
Thank you very very much for your replies in advance.
Richard Wolf GmbH, Pforzheimer Strasse 32, 75438 Knittlingen
Managing Directors: Juergen Pfab, Juergen Steinbeck. Trade Register: Mannheim HRB 510031
Richard Wolf GmbH routinely monitors the content of e-mail sent and received via its network for the purposes of ensuring compliance with its policies and procedures. Richard Wolf GmbH is not responsible for any changes made to the message after it has been sent. Where opinions are expressed, they are not necessarily those of Richard Wolf GmbH. This e-mail and any files transmitted with it are confidential and intended solely for the use of the individual or entity to which they are addressed. If you are not the intended addressee, or the person responsible for delivering it to them, you may not copy, forward, disclose, or otherwise use it or any part of it in any way. To do so may be unlawful. If you receive this e-mail by mistake, please advise the sender immediately.
More information about the U-Boot