早之前就知道有QEMU,但是那会没能搭建起来。现在手头正好有个阿里云服务器,正好拿来试试手。
用的是Ubuntu的操作系统。先把qemu装了
apt-get install qemu
交叉编译工具
apt-get gcc-arm-linux-gnueabi
然后tftp需要配置一下。参考网络教程。目录设置为/home/tftpboot
下载linux内核,www.kernel.org。
在makefile中修改ARCH和CROSS_COMPILE
选择配置文件 make vexpress_defconfig
make zImage
make modules
make dtbs
这时候照例是可以跑的了
qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
当然,这还没完。
下载busybox制作根文件系统
http://www.busybox.net/download
配置makefile
修改ARCH和CROSS_COMPILE
make defconfig
在图形界面中,把busybox选择为静态编译
make menuconfig
make
make install
这时候_install里就有需要的东西了
复制到/home/rootfs里面
然后复制一些必须的动态库到rootfs里
库在/usr/arm-linux-gnueabi/lib
创建设备节点
在/home/rootfs/dev中
mknode -m 666 tty1 c 4 1
mknode -m 666 tty2 c 4 2
mknode -m 666 tty3 c 4 3
mknode -m 666 tty4 c 4 4
mknode -m 666 console c 5 1
mknode -m 666 null c 1 3
制作sd卡镜像
dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
格式化
mkfs.ext3 rootfs.ext3
可以挂载了看下
mount -t ext3 rootfs.ext3 /mnt/ -o loop
运行一下
qemu-system-arm -M vexpress-a9
-m 512M
-kernel /root/linux-4.4.80/arch/arm/boot/zImage
-dtb /root/linux-4.4.80/arch/arm/boot/dts/vexpress-v2p-ca9.dtb
-nographic
-append "root=/dev/mmcblk0 rw console=ttyAMA0"
-sd /home/rootfs.ext3
没问题的话下面进行u-boot
ftp://ftp.denx.de/pub/u-boot
ftp>open ftp.denx.de
输入
passive
binary
get ********
修改ARCH和CROSS_COMPILE
vi Makefile
vi config.mk
make vexpress_ca9x4_defconfig
make
得到u-boot,拷贝到tftproot中(tftproot注意权限,设置为777)
qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel ./u-boot
测试一下是否成功
把 vexpress-v2p-ca9.dtb文件和uImage文件拷贝到tftproot中
如果没有uImage
make LOADADDR=0x60003000 uImage
配置网桥
编辑interfaces文件
把eth1设置为manual
开启混杂模式
其他注释或者去掉
增加br0的部分
使用原先eth1的ip和静态路由设置
auto eth1
iface eth1 inet manual#up route add -net 0.0.0.0 netmask 0.0.0.0 gw 120.24.227.247 dev eth1up ip link set $IFACE promisc on auto br0iface br0 inet staticaddress 120.24.224.224netmask 255.255.252.0up route add -net 0.0.0.0 netmask 0.0.0.0 gw 120.24.227.247bridge_ports eth1bridge_stp offbridge_fd 0bridge_maxwait 0 重启一下
开启tap
tunctl -t tap0 -u root
ip link set tap0promisc on
ifconfig tap0 0.0.0.0 up
brctl addif br0 tap0
brctl show
这样网桥就搭建好了
在vexpress_common.h中
配置
同时设置
#define CONFIG_IPADDR 同一网段的ip #define CONFIG_NETMAKE
#define CONFIG_SERVERIP 网桥ip
然后重新编译一下。
运行测试,应该就可以了。
qemu-system-arm \
-M vexpress-a9 \ -kernel u-boot \ -nographic \ -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \ -sd /home/rootfs.ext3