安装包及依赖
raspberrypi下载raspbian镜像包
地址http://downloads.raspberrypi.org/raspbian/images/
这里下载 raspbian-2020-02-14/2020-02-13-raspbian-buster.zip
qemu raspi 内核
地址https://github.com/dhruvvyas90/qemu-rpi-kernel
需用到里面的kernel-qemu-4.19.50-buster和versatile-pb-buster.dtb文件
qemu arm软件包
sudo apt install qemu-system-arm
使用 sudo apt install qemu 会安装所有架构的包。
步骤
设置
设置qemu系统目录
mkdir -p ~/qemu_vms
将下载的raspbian image解压后的.img文件(2020-02-13-raspbian-buster.img)放到 qemu_vms 目录下
注释preload文件内容
fdisk 命令查看img内容
sudo fdisk -l 2020-02-13-raspbian-buster.img
fdisk输出
Disk 2020-02-13-raspbian-buster.img: 3.54 GiB, 3787456512 bytes, 7397376 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xea7d04d6
Device Boot Start End Sectors Size Id Type
2020-02-13-raspbian-buster.img1 8192 532479 524288 256M c W95 FAT32 (LBA)
2020-02-13-raspbian-buster.img2 532480 7397375 6864896 3.3G 83 Linux
img2扇区起始于532480,则offset=532480*512=272629760(字节)
offset参数挂载img
sudo mkdir /mnt/raspbian
sudo mount -v -o offset=272629760 -t ext4 ~/qemu_vms/2020-02-13-raspbian-buster.img /mnt/raspbian
注释ld.so.preload内容
sudo nano /mnt/raspbian/etc/ld.so.preload
使用"#"注释ld.so.preload文件中的所有内容,然后按下 CTRL+X,按Y确认,回车即可。
注:此过程若不注释,会启动不成功。
替换fstab中的mmcblk0p
sudo nano /mnt/raspbian/etc/fstab
将包含 /dev/mmcblk0p1 的第一个条目替换为 /dev/sda1
2. 将包含 /dev/mmcblk0p2 的第二个条目替换为 /dev/sda2
3. 保存并退出
注:当前下载的文件中不包含mmcblk
取消挂载
cd ~/qemu_vms
sudo umount /mnt/raspbian
启动qemu raspbian系统
启动命令
qemu-system-arm \
-M versatilepb \
-cpu arm1176 \
-m 256 \
-hda ./2020-02-13-raspbian-buster.img \
-net user,hostfwd=tcp::5022-:22 \
-net nic \
-dtb ./versatile-pb-buster.dtb \
-kernel ./kernel-qemu-4.19.50-buster \
-append 'root=/dev/sda2 panic=1' \
-no-reboot
启动后会显示桌面,系统用户名 pi,密码:raspberry
qemu窗口光标捕捉退出:按下CTRL+ALT +G 即可
ubuntu host连接qemu raspbian系统
host命令
ssh pi@127.0.0.1 -p 5022
# 按提示输入密码即可
上述命令若出现"kex_exchange_identification: read: Connection reset by peer"错误,则在qemu的系统中执行下面的命令重启ssh服务
sudo /etc/init.d/ssh restart