目录
1. 下载qemu for mini2440
git clone git://repo.or.cz/qemu/mini2440.git qemu
$ ./configure --target-list=arm-softmmu
$ make -j4
$ make install
其中qemu/mini2440中有运行仿真环境的脚本mini2440_start.sh后面需要相应修改
注意这里有时会出现浮点操作异常退出,原因是qemu/sdl.c里的sdl_send_mouse_event()
函数没有判断当前width和height所致,这边有个补丁:
添加if (width == 1 && height == 1) return;在函数开始位置
2. 交叉工具链
可以使用buildroot, crosstools自己构建,也可以从codesourcy下载,
或者直接使用天嵌mini2440的4.3.3版本的工具链:
http://soft.embedsky.net/files/linux_src/EABI-4.3.3_EmbedSky_20091210.rar
解压缩并将4.3.3/bin加入到PATH中
3. 下载u-boot for mini2440
git clone git://repo.or.cz/w/u-boot-openmoko/mini2440.git uboot
如果想在之后使用u-boot 的nfs下载文件功能,需要修改代码中的一部分,将net/nfs.c文件中的
NFS_TIMEOUT = 2UL 修改为 NFS_TIMEOUT = 20000UL 否则会造成nfs文件下载失败,如果不使用nfs下载功能,不改也可。
$ ARCH=arm CROSS_COMPILE=arm-linux- make mini2440_config
$ ARCH=arm CROSS_COMPILE=arm-linux- make -j4
最终生成u-boot.bin复制到qemu/mini2440目录下和mini2440_start.sh同一目录下
4. 下载 linux kernel for mini2440
git clone git://repo.or.cz/linux-2.6/mini2440.git linux-2.6
进入源码目录
$ ARCH=arm CROSS_COMPILE=arm-linux- make mini2440_defconfig
$ ARCH=arm CROSS_COMPILE=arm-linux- make -j4 uImage
$ ARCH=arm CROSS_COMPILE=arm-linux- make -j4 modules
因为制作uImage需要使用uboot/tools下的工具,需要将uboot/tools放入PATH环境
变量里
复制生成的*.ko文件到root_qtopia/lib里面
之后会在arch/arm/boot/目录下生成uImage 文件,将此文件复制到qemu/mini2440文件夹下,并将mini2440文件夹中的mini2440_start.sh作如下修改
将 kernel 一行改为-kernel "$base/uImage"
5. 制作rootfs
可以使用buildroot自己构建,也可使用天嵌的qtopia的rootfs:
http://soft.embedsky.net/files/qt_src/root_qtopia_2.2.0_2.6.30.4_20100601.rar
解压缩后面作为rootfs根目录通过NFS使用
注意root_qtopia/etc/init.d/rcS里对网卡进行了重新配置造成断网,
因此需要注释掉rcS里的自加载模块,和对网卡的配置。
6. 安装 nfs服务器
参看:https://wiki.archlinux.org/index.php/NFSv4
$ yaourt -S nfs-utils
之后修改/etc/exports文件,添加如下一行
/home/user/nfs *(rw,fsid=0,no_subtree_check,async,no_root_squash,nohide)
....................注意 /home/user/nfs 为你所要共享的目录
启动nfs server服务
$ sudo rc.d start rpcbind nfs-common nfs-server
可将其加入/etc/rc.conf自动启动
7. 安装bridge-utils和uml_utilities
想要使用qemu的网路必须安装这两个
$ yaourt -S bridge-utils uml_utilities
$ sudo modprobe bridge
$ sudo modprobe tun
可将其加入/etc/rc.conf自动加载
8. 将qemu/mini2440目录下的mini2440_start.sh修改为
#!/bin/sh
cmd="qemu-system-arm \
-kernel ./uImage
-M mini2440 $* \
-serial stdio \
-show-cursor \
-usb -usbdevice keyboard -usbdevice mouse \
-net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=./qemu-ifup,downscript=./qemu-ifdown \
-monitor telnet::5555,server,nowait"
echo $cmd
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sudo $cmd
在建立两个脚本,分别为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
9. 当这些都配置好后,我们即可使用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/user/nfs/root_qtopia ip=10.0.0.10:10.0.0.1::255.255.255.0 console=ttySAC0,115200
再输入命令
bootm
OK ! kernel就开始加载了,文件系统挂在成功后,就可以进行各种仿真工作了