mount -o loop busybox.img /mnt/disk/cp -a ./_install/* /mnt/disk/
sudo cp -a ./examples/bootfloppy/etc /mnt/disk
sudo mkdir /mnt/disk/dev
sudo mkdir /mnt/disk/proc
sudo mkdir /mnt/disk/etc
sudo cp -ar ./examples/bootfloppy/etc /mnt/disk/etc
sudo cp -a /dev/zero /mnt/disk/dev/
sudo cp -a /dev/console /mnt/disk/dev/
sudo cp -a /dev/null /mnt/disk/dev/
sudo cp -a /dev/tty* /mnt/disk/dev/
sudo cp -a /dev/ttyS0 /mnt/disk/dev/
2.编译内核(qemu模拟x86_64)
1)下载linux内核源码(https://www.kernel.org)在linux内核源码目录(以3.5.0为例)
make mrproper
make localmodconfig(使用本机x64编译模块config)
make menuconfig(选择qemu需要编译网卡驱动,RealTek,8139cp,否则系统跑起来无网卡,这个问题调试一周,是根据本机的/boot下vmlinuz,和initrid对比才知道需要加载这个模块)
make -j4(双核cpu,可以4线程编译)
make modules
make install
mkinitramfs -o /boot/initrd.img-3.5.0(核心版本号)
2)
得到/boot/vmlinuz-3.5.0,/boot/initrd.img-3.5.0
3.安装qemu,启动linux
#!/bin/sh
mount -o loop busybox.img /mnt/disk
LINUX=$(find linux* -maxdepth 0)
#启动qemu
if [ $# = 0 ] ; then
qemu-system-x86_64 -kernel bzImage -hda ./busybox.img -initrd initrd.img -append "root=/dev/sda console=ttyS0" -nographic -net nic,vlan=0 -net tap,ifname=tap0,script=/etc/qemu-ifup,vlan=0 -net user
fi
if [ "$1" = "s" ] ; then
qemu-system-x86_64 -s -S -kernel bzImage -hda ./busybox.img -initrd initrd.img -append "root=/dev/sda console=ttyS0" -nographic -net nic,vlan=0 -net tap,ifname=tap0,script=/etc/qemu-ifup,vlan=0
fi
其中busybox.img为busybox生成的文件系统;bzImage 为/boot/vmlinuz-3.5.0;initrd.img 为/boot/initrd.img-3.5.0;console=ttyS0" -nographic这个是为命令行启动,而非新
界面启动,对于调试获取信息很方便;
/etc/qemu-ifup:
#!/bin/bash
#!/bin/bash
ifconfig $1 192.168.0.10 netmask 255.255.255.0 up
iptables -t nat -A POSTROUTING -s 192.168.0.10/255.255.255.0 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.11/255.255.255.0 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward//支持转发,让虚拟机可以上外网
2)网络配置
配置了eth0的ip,但是无法ping通设置ip;是由于lo接口ip未设置导致,设置ifconfig lo 127.0.0.1即可
虚拟机启动img,网络配置,/etc/init.d/rcS
mount -n -t proc none /proc
mount -n -t sysfs none /sys
mdev -s
/bin/mount -a
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.0.11 netmask 255.255.255.0
route add default gw 192.168.0.10
qemu-system-arm -M realview-pbx-a9 -m 1024M -nographic \
-kernel openwrt-realview-vmlinux.elf \
-sd openwrt-realview-sdcard.img \
-append "console=ttyAMA0 verbose debug root=/dev/mmcblk0p1"