QemuでARM(3)をシミュレートする

3123 ワード

1.u-bootをダウンロードしてクロスコンパイルします.
新しいバージョンのu-bootは私がロードした後にいつも問題があって、2009.11版は順調にコンパイルとテストに合格することができます.
$ wget ftp://ftp.denx.de/pub/u-boot/u-boot-2009.11.tar.bz2
$ tar xjvf u-boot-2009.11.tar.bz2 
$ cd u-boot-2009.11
$ make versatilepb_config arch=ARM CROSS_COMPILE=arm-none-eabi-
$ make all arch=ARM CROSS_COMPILE=arm-none-eabi- 

コンパイルが完了するとディレクトリの下でu-bootが生成されます.binとu-bootファイル.
2.u-bootを実行する.bin:
$ qemu-system-arm -M versatilepb -kernel u-boot.bin -nographic

-nographicを使用してqemu-system-armを実行すると、端末はCtrl+c/ctrl+d_のようなシステム入力に応答できなくなります.qemu-system-armを終了するには、プロセス番号を調べてからkillするしかありません.だから私は普通-nographicオプションを持っていないで、起動した後にctrl+alt+2はserial 0出力を見に行って、端末ウィンドウで直接ctrl+cでqemu-sytem-armプロセスを殺す権利を保留します.
3.u-bootでミラーファイルを起動する:
前の記事で起動ミラーを構築するためのlinkerを変更します.ldファイル、u-boot.binファイルサイズのため、起動ミラーの開始アドレスを全体的に上に移動する必要があります.
$ ls -l -h u-boot.bin 
-rwxr-xr-x 1 dash root 85K Jul  8 15:57 u-boot.bin

linker.ldファイルでは、0 x 10000000で、このサイズは85 Kに比べて明らかに十分です.
ENTRY(_Start)
SECTIONS
{
. = 0x100000;
startup : { startup.o(.text)}
.data : {*(.data)}
.bss : {*(.bss)}
. = . + 0x500;
sp_top = .;
}

前章のコンパイル方法でoutputを生成する.bin、もう言わないでください.
mkimageツールを使用してu-bootで識別可能なimageファイルを作成します.
$ mkimage -A arm -C none -O linux -T kernel -d output.bin -a 0x00100000 -e 0x00100000 output.uimg
Image Name:   
Created:      Mon Jul  8 16:04:11 2013
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    152 Bytes = 0.15 kB = 0.00 MB
Load Address: 00100000
Entry Point:  00100000

$ file *.uimg
output.uimg: u-boot legacy uImage, , Linux/ARM, OS Kernel Image (Not \
compressed), 152 bytes, Mon Jul  8 16:04:11 2013, Load Address: 0x00100000,\
Entry Point: 0x00100000, Header CRC: 0x3C62F575, Data CRC: 0x69CE9647

u-boot.binとoutput.uimgはファイルにパッケージされます.
$ cat u-boot.bin output.uimg >flash.bin

次のコマンドはoutputを計算するために使用されます.imgはu-bootを使用してflashをロードした.bin後のメモリ内のアドレス、-kernelオプションはqemuに0 x 100000からミラーのロードを開始することを教えます.すなわち65536です.65536+u-boot.bin後のサイズ、すなわちoutput.imgのメモリ内のアドレス.printfは16進数のフォーマットで印刷する、ロードする.
$ printf "0x%X" $(expr $(stat -c%s u-boot.bin) + 65536)
0x2525C

qemu-system-armを起動し、カスタムミラーを実行します.
$ qemu-system-arm -M versatilepb -nographic -kernel flash.bin
# iminfo 0x2525c

## Checking Image at 0002525c ...
   Legacy image found
   Image Name:   
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    152 Bytes =  0.1 kB
   Load Address: 00100000
   Entry Point:  00100000
   Verifying Checksum ... OK

VersatilePB # bootm 0x2525c
## Booting kernel from Legacy Image at 0002525c ...
   Image Name:   
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    152 Bytes =  0.1 kB
   Load Address: 00100000
   Entry Point:  00100000
   Loading Kernel Image ... OK
OK

Starting kernel ...

Hello Open World

u-bootがサポートできるオプションは、NFS/TFT Pを使用して起動するなど、後でゆっくり検討することも含まれています.
変換元:http://feipengy.no-ip.biz/blog/2013/07/08/yong-qemumo-ni-arm-3/