安装qemu模拟器
安装一些依赖
打开终端执行命令
1 2 3 4 5 6 7 |
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。
解压安装包
在安装包所在目录解压安装包
1 2 3 |
xz -d qemu-2.12.1.tar.xz tar xvf qemu-2.12.1.tar |
编译安装qemu
上面的压缩包解压以后,会生成qemu-2.12.1文件夹,下面进入该文件夹编译安装qemu
1 2 3 4 5 6 7 |
cd qemu-2.12.1 # 配置qemu,支持模拟arm架构下的所有单板: ./configure --target-list=arm-softmmu --audio-drv-list= # 编译和安装 make -j4 make install |
至此qemu编译安装完成。
注:如果上面的安装步骤一直有错不能往下进行,那就上面的都不执行,直接执行下面这条命令:
1 2 |
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定制的内核文件),把他们下载就可以,不用去官网下载了。
解压镜像文件
我们在下载到的镜像文件目录下解压镜像文件
1 2 3 4 |
unzip 2017-04-10-raspbian-jessie.zip mv 2017-04-10-raspbian-jessie.img rpi.img # 上面这一步是重命名,只是为了后面输入起来方便,不重名或者改成其他名字都行 |
挂载镜像
在解压后的镜像(.img文件)目录下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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。
接下载我们把镜像文件挂载到一个目录下面,这样就可以通过这个目录访问这个镜像文件里面的内容了:
在解压后的镜像文件目录下执行命令:
1 2 3 4 |
mkdir tmp sudo mount -v -o offset=$((512 * 92160)) -t ext4 rpi.img tmp # 上面的这个(512 * 92160)的值是根据上面fdisk输出信息来的,是第二个分区起始位置值乘上512 |
修改fstab
1 2 3 4 5 6 7 |
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
1 2 3 4 5 |
sudo gedit tmp/etc/ld.so.preload # 打开上面这个文件后,注释掉文件内容(前面加上#),最终内容如下: #/usr/lib/arm-linux-gnueabihf/libarmmem.so # 注:若不进行此项修改,将启动过程中内核会崩溃掉. |
往树莓派中拷贝bomb可执行文件
将可执行文件拷贝到tmp/home/pi/目录下
1 2 |
cp bomb tmp/home/pi |
上面的步骤完毕后卸载镜像
1 2 |
sudo umount tmp |
启动raspbian系统
创建一个启动脚本run.sh
1 2 3 4 5 |
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 # 保存退出 |
给脚本加上可执行权限
1 2 |
chmod +x run.sh |
然后./run.sh就可以启动树莓派系统了,不出意外的话能看到树莓派桌面了。
通过ssh访问树莓派
启动时参数:tcp:5022::22 就是指定网络端口映射的,意思是使用本机5022端口映射到虚拟机的22端口。
树莓派开机后,打开树莓派的终端,输入命令重启ssh:
1 2 3 4 |
sudo /etc/init.d/ssh restart # 树莓派默认密码:raspberry # 然后按 ctrl + alt + G 释放鼠标 |
然后在终端输入ssh [email protected] -p 5022
就可以访问树莓派了,然后就可以开始gdb调试了。
配置树莓派
扩容树莓派
默认情况下磁盘只剩下几十M的空间,需要进行扩容才能安装软件。这可能对于安装或者存储大容量的文件是不够,需要扩容。
先复制要扩容的树莓派镜像文件:
1 2 3 |
cp rpi.img rpi_large.img qemu-img resize rpi_large.img +3G |
此时,pi_enlarge.img 文件虽然增大3G,但其实启动后,文件系统的容量并没有改变,需要启动后在系统中修改 同时加载这两个镜像文件,并使新增大的镜像作为hdb加载,启动参数如下:
1 2 |
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 |
启动成功后,执行下面命令:
1 2 |
sudo cfdisk /dev/sdb |
打开软件界面,删除其中的sdb2 ,并使用所有空闲空间创建新的primary分区,最后选择Write项写入,选择Quit退出。
然后执行:
1 2 3 4 |
sudo resize2fs /dev/sdb2 sudo fsck -f /dev/sdb2 sudo halt |
之后,就只挂载这个增容后的镜像文件即可。
修改启动方式
树莓派默认是启动桌面环境,但是也会占用电脑资源和启动速度,所以如果用不着桌面可以修改默认不启动桌面,只启动终端,修改方式:
1 2 3 4 5 6 |
sudo raspi-config # 依次选择 >Select 3 – Boot Options >Select B1 – Desktop / CLI >Select B2 – Console Autologin |
Reference:
在安装qemu的过程中,一定在make install 前加入 sudo赋予权限。