qemu integrator linux 2.6.36 nfs

来源:互联网 发布:最小生成树的prim算法 编辑:程序博客网 时间:2024/05/17 01:05

     这一段时间在研究在PC上跑arm模拟器,为了调试linux内核。也看了linux的UML模式,很不好用。认识qemu实在android的模拟器上,很方便。找到qemu的主页。本文关于交叉编译的部分都是ARCH=arm CROSS-COMPILE=arm-none-linux-gnueabi- 关于eabi就是2进制的嵌入式优化(EABI embedded application binary interface)。

 

ubuntu有qemu,先安装apt-get install qemu qemu-kvm qemu-common

但是版本太低了,自己编译支持arm的版本覆盖安装。

1,下载最新版的qemu-0.13.0.tar.gz  和arm的测试例子arm-test-0.2.tar.gz

编译qemu

 

#./configure --prefix=/usr --target-list=arm-softmmu,arm-linux-user

#make

#make install

 

测试官方提同的例子

#qemu-system-arm -kernel zImage.integrator -initrd arm_root.img

在终端的文本模式

#qemu-system-arm -kernel zImage.integrator -initrd arm_root.img -nographic -append "console=ttyAMA0"

 

因为支持qemu-kvm 速度很快。不过是linux是2.6.17。

 

用qemu测试最新的linux

2,下载支持arm的linux git://linux-arm.org/linux-2.6-stable.git

编译内核

把zImage.integrator里config解压出来 (arm-test-0.2.tar.gz里面有说明)

#make integrator_defconfig

#make menuconfig

去掉 CONFIG_BLK_DEV_INITRD   支持为了调试方便用nfs根文件系统

CONFIG_TUN=y                           为了支持qemu的nfs文件启动

#make

 

下载最新的busybox-1.18.2.tar.bz2

#make

#make menuconfig                      #把静态编译选上。

#make install

在把_install文件夹拷出改名 busybox_install

添加 etc proc 等等文件夹 做成根文件系统 (查找网上的如何从busybox生成根文件系统)

 

3,使qemu和主机ubuntu可以网络通信,可以用nfs根文件系统

测试主机ubuntu支不支持 TUN 网络

#grep CONFIG_TUN= /boot/config-`uname -r`

如果 CONFIG_TUN=m

#modprobe tun

或者 CONFIG_TUN=y

#mkdir /dev/net/

#mknod /dev/net/tun c 10 200

在当前目录生成可执行文件 integrator-ifup

ifconfig tap0 10.0.2.2 broadcast 10.0.2.255 netmask 255.255.255.0 promisc up

现在可以用qemu官方测试版来测试下网络了。

#qemu-system-arm -kernel zImage.integrator -initrd arm_root.img  -net nic -net tap,script=integrator-ifup 来测试网络

多加的命令就是在ubuntu主机上生成一个名字是tap0的虚拟网卡,可以让qemu通过这个网卡来访问主机。

 

当qemu执行的时候在主机ubuntu上

#ifconfig 

可以看到除了eth0 还有一个网卡tap0

 

进入qemu的界面 配置qemu上linux内核 zImage.integrator 的网络地址

#ifconfig eth0 10.0.2.15 broadcast 10.0.2.255 netmask 255.255.255.0

 

测试和主机的网络连接

#ping 10.0.2.2

 

5, 在ubuntu上打开nfs服务,

在/etc/hosts.allow加上

nfsd:10.0.2.
portmap:10.0.2.
mountd:10.0.2.
lockd:10.0.2.
statd:10.0.2.
rquotad:10.0.2.

在/etc/exports加上

/srv/qemu/integrator/busybox_install 10.0.2.*(rw,no_root_squash,subtree_check,async)

 

4,在qemu上跑2.6.36内核和nfs根文件系统

#qemu-system-arm -kernel /srv/qemu/integrator/linux-2.6.36-nfs/arch/arm/boot/zImage  -net nic -net tap,script=integrator-ifup -append root="/dev/nfs nfsroot=10.0.2.2:/srv/qemu/integrator/busybox_install rw ip=10.0.2.15:10.0.2.2:10.0.2.1:255.255.255.0"

 

/srv/qemu/integrator/linux-2.6.36-nfs/arch/arm/boot/zImage 是内核

/srv/qemu/integrator/busybox_install  是根文件系统

10.0.2.2 是主机ip地址

10.0.2.15 是从机ip地址