好幾天沒有繼續linux的學習了,週末忙着買衣服去了,呵呵。linux
這個實驗實際上是繼續前面的uboot實驗,可是此次是指定從一個HelloWorld的鏡像啓動。ide
參考網址:http://balau82.wordpress.com/2010/03/10/u-boot-for-arm-on-qemu/wordpress
繼續上次的「Qemu下的Hello World程序」。學習
1. 在test.ld文件中,啓動地址從「. = 0x10000」改成「. = 0x100000「ui
2. 編譯命令get
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.binflash
3. 產生鏡像命令it
mkimage -A arm -C none -O u-boot -T standalone -d test.bin -a 0x00100000 -e 0x00100000 test.uimg編譯
若是沒有mkimage這個包,那須要先安裝這個包。class
運行結果以下
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