RASPBERRY PI ON QEMU

在虚拟机 Ubuntu22.04.1中进行QEMU下的ARM环境搭建

  1. Raspbian 镜像:http://downloads.raspberrypi.org/raspbian/images/raspbian-2017-04-10/

  2. 对应优化后的的QEMU内核:https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/kernel-qemu-4.4.34-jessie

创建文件夹,将下载的Raspbian 镜像,以及qemu-kernel放置其中

并下载qemu-system

解压后,进行分区调整

从中可以看出该镜像文件共有两个分区,特别注意第二个分区的起点扇区,每个扇区是512个字节,由此算出第二分区起点位置是512 * 92160 = 47185920 字节。

接下载我们把镜像文件挂载到一个目录下面,这样就可以通过这个目录访问这个镜像文件里面的内容了,在解压后的镜像文件目录下执行命令

使用#注释掉文件里面的所有内容, Ctrl-x --» Y 保存并退出。


修改/mnt/raspbian/etc/fstab

卸载镜像

sudo umount /mnt/raspbian

写一个qemu启动脚本

gedit qemu_run.sh

#!/bin/bash
sudo qemu-system-arm \
-kernel kernel-qemu-4.4.34-jessie \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
-hda  2017-04-10-raspbian-jessie.img \
-vga std \
-cpu arm1176 -m 256 \
-M versatilepb \
-no-reboot \
-serial stdio \
-net nic \
-net user,hostfwd=::1234-:22 \

给脚本加上可执行权限,启动系统

chmod +x qemu_run.sh
./qemu_run.sh

进入终端,启动SSH服务

在Ubuntu上远程访问(默认用户名pi,默认密码raspberry)

ssh pi@127.0.0.1 -p 1234

配置网络

上面为了方便ssh连接,将树莓派的22端口映射到Ubuntu宿主机的1234端口

在Ubuntu上创建共享网络接口(tap0)

kka@kka-ubuntu:~$ sudo apt-get install uml-utilities
kka@kka-ubuntu:~$ sudo tunctl -t tap0 -u kka
Set 'tap0' persistent and owned by uid 1000
kka@kka-ubuntu:~$ sudo ifconfig tap0 172.16.0.1/24

完成配置后,查看tap0接口

kka@kka-ubuntu:~$ ifconfig tap0
tap0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.16.0.1  netmask 255.255.255.0  broadcast 172.16.0.255
        ether 6e:c0:7b:81:7a:0a  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

重新启动QEMU

sudo qemu-system-arm -kernel kernel-qemu-4.4.34-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda 2017-04-10-raspbian-jessie.img -net nic -net tap,ifname=tap0,script=no,downscript=no -no-reboot

然后就可以从Ubuntu访问raspbian开放的端口,使用nc进行测试