LinMao's Blog
学习科研记录与分享!

ubuntu上用qemu搭建树莓派arm虚拟环境

安装qemu模拟器

安装一些依赖

打开终端执行命令
sudo apt-get install zlib1g-dev
sudo apt-get install libglib2.0-0
sudo apt-get install libglib2.0-dev
sudo apt-get install libpixman-1-dev
# 下面这个可以解决打开树莓派卡在Uncompressing Linux... done, booting the kernel.问题
sudo apt install libsdl2-dev

qemu官网下载安装包

进入下载界面,选择source code,然后下载版本2.12.1的文件包,文件大小大约34M。

解压安装包

安装包所在目录解压安装包
xz -d qemu-2.12.1.tar.xz
tar xvf qemu-2.12.1.tar

编译安装qemu

上面的压缩包解压以后,会生成qemu-2.12.1文件夹,下面进入该文件夹编译安装qemu
cd qemu-2.12.1
# 配置qemu,支持模拟arm架构下的所有单板:
./configure --target-list=arm-softmmu --audio-drv-list=
# 编译和安装
make -j4
make install
至此qemu编译安装完成。 注:如果上面的安装步骤一直有错不能往下进行,那就上面的都不执行,直接执行下面这条命令:
sudo apt install qemu
这个命令是安装ubuntu源里面的qemu,但是版本有点老。

搭建树莓派arm环境

注意不要一直用su(root)下执行,su用户下新建的文件用户组都是root,后面很多的地方会因为权限不够无法访问。

下载raspbian镜像和内核

raspbian官方的镜像下载版本,我们下载Jessie版本的镜像,qemu文档中说了对Jessie版本的支持的最好(other versions might work, but Jessie is recommended)。 官方下载地址:raspbian-2017-04-10,我们下载里面的2017-04-10-raspbian-jessie.zip文件,文件大小大约是1.5G。 然后我们去下载为qemu定制的树莓派内核,下载链接 对于我们的实验,上面两个文件就是我们服务器上的那个20172017-04-10-raspbian-jessie.zip文件(raspbian镜像)和kernel-qemu-4.4.34-jessie文件(为qemu定制的内核文件),把他们下载就可以,不用去官网下载了。

解压镜像文件

我们在下载到的镜像文件目录下解压镜像文件
unzip 2017-04-10-raspbian-jessie.zip
mv 2017-04-10-raspbian-jessie.img rpi.img
# 上面这一步是重命名,只是为了后面输入起来方便,不重名或者改成其他名字都行

挂载镜像

在解压后的镜像(.img文件)目录下:
fdisk -lu rpi.img
# 执行上面命令后会输出下面的信息
Disk rpi.img: 4 GiB, 4285005824 bytes, 8369152 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: 0x402e4a57

Device     Boot Start     End Sectors Size Id Type
rpi.img1         8192   92159   83968  41M  c W95 FAT32 (LBA)
rpi.img2        92160 8369151 8276992   4G 83 Linux
从中可以看出该镜像文件共有两个分区,特别注意第二个分区的起点扇区,每个扇区是512个字节,由此算出第二分区起点位置是512 * 92160。 接下载我们把镜像文件挂载到一个目录下面,这样就可以通过这个目录访问这个镜像文件里面的内容了: 在解压后的镜像文件目录下执行命令:
mkdir tmp
sudo mount -v -o offset=$((512 * 92160)) -t ext4 rpi.img tmp
# 上面的这个(512 * 92160)的值是根据上面fdisk输出信息来的,是第二个分区起始位置值乘上512

修改fstab

sudo gedit tmp/etc/fstab
# 打开上面这个文件后,修改前面的挂载点,最终内容如下:
proc            /proc           proc    defaults          0       0
/dev/sda1  		/boot           vfat    defaults          0       2
/dev/sda2  		/               ext4    defaults,noatime  0       1
# 然后保存文件

修改ld.so.preload

sudo gedit tmp/etc/ld.so.preload
# 打开上面这个文件后,注释掉文件内容(前面加上#),最终内容如下:
#/usr/lib/arm-linux-gnueabihf/libarmmem.so
# 注:若不进行此项修改,将启动过程中内核会崩溃掉.

往树莓派中拷贝bomb可执行文件

将可执行文件拷贝到tmp/home/pi/目录下
cp bomb tmp/home/pi
上面的步骤完毕后卸载镜像
sudo umount tmp

启动raspbian系统

创建一个启动脚本run.sh
gedit run.sh
# 打开文件输入一下内容
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 rpi.img -redir tcp:5022::22
# 保存退出
给脚本加上可执行权限
chmod +x run.sh
然后./run.sh就可以启动树莓派系统了,不出意外的话能看到树莓派桌面了。

通过ssh访问树莓派

启动时参数:tcp:5022::22 就是指定网络端口映射的,意思是使用本机5022端口映射到虚拟机的22端口。 树莓派开机后,打开树莓派的终端,输入命令重启ssh:
sudo /etc/init.d/ssh restart 
# 树莓派默认密码:raspberry
# 然后按 ctrl + alt + G 释放鼠标
然后在终端输入ssh [email protected] -p 5022就可以访问树莓派了,然后就可以开始gdb调试了。  

配置树莓派

扩容树莓派

默认情况下磁盘只剩下几十M的空间,需要进行扩容才能安装软件。这可能对于安装或者存储大容量的文件是不够,需要扩容。 先复制要扩容的树莓派镜像文件:
cp rpi.img rpi_large.img
qemu-img resize rpi_large.img +3G
此时,pi_enlarge.img 文件虽然增大3G,但其实启动后,文件系统的容量并没有改变,需要启动后在系统中修改 同时加载这两个镜像文件,并使新增大的镜像作为hdb加载,启动参数如下:
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 rpi.img -hdb  rpi_enlarge.img -redir tcp:5022::22
启动成功后,执行下面命令:
sudo cfdisk /dev/sdb
打开软件界面,删除其中的sdb2 ,并使用所有空闲空间创建新的primary分区,最后选择Write项写入,选择Quit退出。 然后执行:
sudo resize2fs /dev/sdb2
sudo fsck -f /dev/sdb2
sudo halt
之后,就只挂载这个增容后的镜像文件即可。

修改启动方式

树莓派默认是启动桌面环境,但是也会占用电脑资源和启动速度,所以如果用不着桌面可以修改默认不启动桌面,只启动终端,修改方式:
sudo raspi-config
# 依次选择
>Select 3 – Boot Options
>Select B1 – Desktop / CLI
>Select B2 – Console Autologin
 
Reference: 从零使用qemu模拟器搭建arm运行环境
赞(0) 打赏
转载请注明出处:LinMao's Blog(林茂的博客) » ubuntu上用qemu搭建树莓派arm虚拟环境

评论 1

静态归档版本,评论功能已关闭。
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    在安装qemu的过程中,一定在make install 前加入 sudo赋予权限。

    John_snow 7年前 (2019-04-08)回复

LinMao's Blog(林茂的博客)

了解更多联系我们

觉得文章有用就打赏一下作者吧~

支付宝扫一扫打赏

支付宝

微信扫一扫打赏

微信