1. 首先下載qemu for mini2440
git clone git://repo.or.cz/qemu/mini2440.git qemu
如果感覺速度慢,直接打包下載
http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz
解壓後,今日源代碼的主目錄中,
# ./configure --target-list=arm-softmmu # make -j4
2. 下載u-boot for mini2440
git clone git://repo.or.cz/w/u-boot-openmoko/mini2440.git uboot
或者打包下載
http://repo.or.cz/w/u-boot-openmoko/mini2440.git/snapshot/HEAD.tar.gz
(注意 采用打包下載的時候這幾個包的文件名可能相同,注意區分)解壓後,配置Makefile文件,打開Makefile文件,CROSS_COMPILE變量賦值,即自己所使用的交叉編譯工具鏈,比如我的是arm-none-linux-gnueabi-,保存退出,輸入
# make mini2440_config # make -j4
稍等兩分鐘,即在當前目錄下生成名為 u-boot.bin 的文件,注意如果想在之後使用u-boot 的nfs下載文件功能,需要修改代碼中的一部分,將net/nfs.c文件中的
NFS_TIMEOUT = 2UL 修改為 NFS_TIMEOUT = 20000UL 否則會造成nfs文件下載失敗,如果不使用nfs下載功能,不改也可。
3. 下載 linux kernel for mini2440
(下載步驟略去)
進入源碼目錄
# make mini2440_defconfig ARCH=arm #make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
之後會在arch/arm/boot/目錄下生成uImage 文件,將此文件復制到qemu目錄下的mini2440文件夾下,並將mini2440文件夾中的mini2440_start.sh作如下修改
將 kernel 一行改為-kernel "$base/uImage" \,回到上層目錄後運行
# sh mini2440/mini2440_start.sh
這時應該看到qemu啟動後進入了u-boot界面下,輸入命令
# bootm
就會看到linux內核啟動的畫面,但此時還沒有根文件系統,我們稍候介紹采用nfs掛在根文件系統
4. 假設你用的操作系統為Ubuntu,首先安裝 nfs服務器
# sudo apt-get install nfs-kernel-server
之後修改/etc/exports文件,添加如下一行
/home/username/nfs *(rw,sync,no_root_squash)
....................注意 /home/username/nfs 為你所要共享的目錄
輸入命令
# sudo /etc/init.d/nfs-kernel-server restart
啟動 nfs服務
測試 nfs服務是否成功啟動
# sudo mkdir /mnt/nfs # sudo mount -t nfs localhost:/home/username/nfs /mnt/nfs
查看/mnt/nfs文件是否於/home/username/nfs 中相同,若一樣 ,OK
5. 將mini2440目錄下的mini2440_start.sh修改為
#!/bin/sh sudo ../arm-softmmu/qemu-system-arm \ -M mini2440 \ -kernel mini2440/uImage -serial stdio \ -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=./qemu-ifup,downscript=./qemu-ifdown \ -show-cursor \ -usb -usbdevice keyboard -usbdevice mouse\
在建立兩個腳本,分別為qemu-ifup, qemu-ifdown
qemu-ifup 腳本
#!/bin/sh echo "Excuting qemu-ifup" ifconfig $1 10.0.0.1
qemu-ifdown腳本
#!/bin/sh echo "Close tap!" sudo ifconfig $1 10.0.0.1 down
6. 當這些都配置好後,我們即可使用nfs根文件系統了
這裡我們的根文件系統為 /home/username/nfs
在qemu的目錄中輸入
# ./mini2440/mini2440_start.sh
u-boot啟動成功後輸入設置linux kernel的引導參數
set bootargs noinitrd root=/dev/nfs rw nfsroot=10.0.0.1:/home/lizhao/ARM-pro/nfs/rootfs ip=10.0.0.10:10.0.0.1::255.255.255.0 console=ttySAC0,115200
再輸入命令
bootm
OK ! kernel就開始加載了,文件系統掛在成功後,就可以進行各種仿真工作了,下面是我掛載的由友善之臂提供的mini2440的qtopia文件系統的截圖:
友善之臂提供的qtopia文件系統在掛載時會初始化網卡,但我們是由nfs掛載的文件系統,這會導致nfs連接中斷,掛載失敗,所以用nfs掛載之前需要把網卡的初始化過程取消,對應的文件是/etc/init.d/if-config,只需把該文件內容清空即可。Enjoy yourself!
目前,我打算讓GPE環境在這仿真環境中跑起來,目前還沒有成功,正在嘗試中。