lu00kill 2014-08-13
下面介绍用QEMU模拟Raspberry Pi的方法,采用了这种方法后就算没有开发板也能进行测试。
开发环境
测试用的Host OS环境是 Debian 7.2 Wheezy amd64.
Guest OS是, 对Raspberry Pi进行优化后的 Debian Raspbian (2013-09-15) .
2014/7/31 追加: Debian 8 jessie amd64, QEMU 2.0.0, Raspbian (2014-06-20) 也用同样的步骤确认过动作.
安装QEMU
先安装QEMU.
sudo aptitude install qemu
执行下面的命令来检查需要的CPU是否被支持了. 如果arm1176 被显示就OK.
arm1176 没有被表示的话, 或者是重新编译QEMU, 或者是查找其他的Binary.
qemu-system-arm -cpu'?' | grep arm1176
映像的下载
创建合适的目录, 从http://www.raspberrypi.org/downloads 下载 Raspbian 映像并展开.
在同一个目录下从 http://xecdesign.com/downloads/linux-qemu/kernel-qemu 下载内核映像文件.
第一次启动
执行下面的命令, 第一次启动qemu.
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append"root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash"-hda 2013-09-25-wheezy-raspbian.img
编集/etc/ld.so.preload.
nano/etc/ld.so.preload
如下所示, 注释掉第一行并保存, 关闭文件.
#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so
下面的步骤可选。 QEMU 模拟器上磁盘是认作 /dev/sda , 但是由于实机上是认作 /dev/mmcblk0 所以要设定对应的符号链接。
创建/etc/udev/rules.d/90-qemu.rules 并追加以下记录.
/etc/udev/rules.d/90-qemu.rules
KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
KERNEL=="sda2", SYMLINK+="root"
结束。
exit
起动
起动下面的命令。
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append"root=/dev/sda2 panic=1 rootfstype=ext4 rw"-hda 2013-09-25-wheezy-raspbian.img
用用户名: pi, 密码: raspberry 登录, 这样就能起动 X.
关于选项
关于QEMU 起动时候的选项的说明整理了一下.
-kernel kernel-qemu
使用下载的内核映像 kernel-qemu.
-cpu arm1176
模拟ARM1176 CPU. Raspberry Pi 板上搭载了 Broadcom BCM2835, 这个处理器用的是ARM1176JZ-F.
-m 256
RAM的大小是256MB. 设定成比256MB大的值板子好像不能启动.
-M versatilepb
设定模拟的开发板类型. versatilepb 是 ARM Versatile Platform Board
-no-reboot
不重启退出.
-serial stdio
重定向Guest 的串口到Host的标准输入输出.
-append “root=/dev/sda2 panic=1 rootfstype=ext4 rw”
内核的命令行.
-hda 2013-09-25-wheezy-raspbian.img
Harddisk 0 使用 2013-09-25-wheezy-raspbian.img.
其他
就用那样的映像的话磁盘的空余容量比较少, 根据需要可以需要扩张磁盘的大小. 详情请参照 Raspberry Pi のイメージファイルを拡張する.
参考
QEMU 的详细介绍:请点这里
QEMU 的下载地址:请点这里