好几天没有继续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