好几天没有继续linux的学习了,周末忙着买衣服去了,呵呵。
这个实验其实是继续前面的uboot实验,但是这次是指定从一个HelloWorld的镜像启动。
参考网址:http://balau82.wordpress.com/2010/03/10/u-boot-for-arm-on-qemu/
继续上次的“Qemu下的Hello World程序”。
1. 在test.ld文件中,启动地址从“. = 0x10000”改为“. = 0x100000“
2. 编译命令
arm-linux-uclibcgnueabi-gcc -c -mcpu=arm926ej-s test.c -o test.o
arm-linux-uclibcgnueabi-ld -T test.ld -Map=test.map test.o startup.o -o test.elf
arm-linux-uclibcgnueabi-objcopy -O binary test.elf test.bin
3. 产生镜像命令
mkimage -A arm -C none -O u-boot -T standalone -d test.bin -a 0x00100000 -e 0x00100000 test.uimg
如果没有mkimage这个包,那需要先安装这个包。
运行结果如下
mkimage -A arm -C none -O u-boot -T standalone -d test.bin -a 0x00100000 -e 0x00100000 test.uimg
Image Name:
Created: Tue May 25 17:01:42 2010
Image Type: ARM U-Boot Standalone Program (uncompressed)
Data Size: 356 Bytes = 0.35 kB = 0.00 MB
Load Address: 0x00100000
Entry Point: 0x00100000
4. 产生一个镜像
cat u-boot.bin test.uimg > flash.bin
5. 检查镜像的起始地址
printf "bootm 0x%X\n" $(expr $(stat -c%s u-boot.bin) + 65536)
我得到的结果是,bootm 0x2691C,表明程序的起始地址是0x2691C
6. 使用Qemu启动镜像
qemu-system-arm -M versatilepb -m 128M -nographic -kernel flash.bin
7. 检查镜像的完整性
iminfo 0x2691C
得到的结果是
VersatilePB # iminfo 0x2691C
## Checking Image at 0002691c ...
Legacy image found
Image Name:
Image Type: ARM U-Boot Standalone Program (uncompressed)
Data Size: 356 Bytes = 0.3 kB
Load Address: 00100000
Entry Point: 00100000
Verifying Checksum ... OK
8. 最后,运行镜像
bootm 0x2691C
转载于:https://blog.51cto.com/zhaopk/321182