歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用QEMU 建立mini2440的模擬仿真環境

使用QEMU 建立mini2440的模擬仿真環境

日期:2017/2/28 16:06:31   编辑:Linux教程

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

解壓後,今日源代碼的主目錄中,

  1. # ./configure --target-list=arm-softmmu # make -j4
# ./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-,保存退出,輸入

  1. # make mini2440_config # make -j4
# 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

(下載步驟略去)

進入源碼目錄

  1. # make mini2440_defconfig ARCH=arm #make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
# 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" \,回到上層目錄後運行

  1. # sh mini2440/mini2440_start.sh
# sh mini2440/mini2440_start.sh

這時應該看到qemu啟動後進入了u-boot界面下,輸入命令

  1. # bootm
# bootm

就會看到linux內核啟動的畫面,但此時還沒有根文件系統,我們稍候介紹采用nfs掛在根文件系統

4. 假設你用的操作系統為Ubuntu,首先安裝 nfs服務器

  1. # sudo apt-get install nfs-kernel-server
# sudo apt-get install nfs-kernel-server

之後修改/etc/exports文件,添加如下一行

/home/username/nfs *(rw,sync,no_root_squash)

....................注意 /home/username/nfs 為你所要共享的目錄

輸入命令

  1. # sudo /etc/init.d/nfs-kernel-server restart
# sudo /etc/init.d/nfs-kernel-server restart

啟動 nfs服務

測試 nfs服務是否成功啟動

  1. # sudo mkdir /mnt/nfs # sudo mount -t nfs localhost:/home/username/nfs /mnt/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修改為

  1. #!/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\
#!/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 腳本

  1. #!/bin/sh echo "Excuting qemu-ifup" ifconfig $1 10.0.0.1
#!/bin/sh echo "Excuting qemu-ifup" ifconfig $1 10.0.0.1

qemu-ifdown腳本

  1. #!/bin/sh echo "Close tap!" sudo ifconfig $1 10.0.0.1 down
#!/bin/sh echo "Close tap!" sudo ifconfig $1 10.0.0.1 down

6. 當這些都配置好後,我們即可使用nfs根文件系統了

這裡我們的根文件系統為 /home/username/nfs

在qemu的目錄中輸入

  1. # ./mini2440/mini2440_start.sh
# ./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環境在這仿真環境中跑起來,目前還沒有成功,正在嘗試中。

Copyright © Linux教程網 All Rights Reserved