如何在Arch Linux上构建Raspberry Pi虚拟环境
如何在Linux上构建Raspberry Pi虚拟环境
下面我们来讲讲如何使用QEMU来仿照树莓派环境。这里首先先分成两大类。第一类是跑比较老的,安全性较低的老树莓派,主要指代的是22年4月份发布之前的版本,这个版本当中,树莓派镜像自己内部就配置了一份默认的账户密码。对于之后的版本则不配备这种默认的账号密码。因此,我们需要区分出两种装载模式。
为了省力,我们使用人家已经配置好了的
github仓库:qemu-rpi-kernel
前置环境需求
yay -S qemu-system-arm
Older Version
考虑旧的树莓派镜像,安装的方式如下
克隆仓库qemu-rpi-kernel到一个位置,取出里头的:
kernel-qemu-5.4.51-buster
versatile-pb-buster-5.4.51.dtb
这两个文件到一个自己创建的目录文件夹下。我的是oldone
下载旧树莓派镜像
https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2020-05-28/2020-05-27-raspios-buster-lite-armhf.zip
wget还是扔浏览器自己点击,看自己兴趣。下载结束解压到上面创建的oldone文件夹下
写一个简单的脚本
qemu-system-arm \
-M versatilepb \
-cpu arm1176 \
-m 256 \
-drive "file=2020-05-27-raspios-buster-lite-armhf.img,
if=none,index=0,media=disk,format=raw,id=disk0"
-device "virtio-blk-pci,drive=disk0,disable-modern=on,disable-legacy=off" \
-net "user,hostfwd=tcp::5022-:22" \
-dtb versatile-pb-buster-5.4.51.dtb \
-kernel kernel-qemu-5.4.51-buster \
-nographic \ # 提示,这个跟下面的console=ttyAMA0搭配使用,想要图形化输出请自行删掉提到的两行
-append 'root=/dev/vda2 panic=1 console=ttyAMA0' \
-no-reboot
我先说说这些参数都是什么意思。
-M versatilepb:QEMU支持的板子里有这个,这个是我们树莓派的体系平台,选这个运行我们的树莓派仿真环境
-cpu arm1176: CPU型号选择arm1176
-m 256 内存大小是256MB,我看有Issue说最大就这个,不能再大了,有bug会,笔者这里尚未考证,不予评价
下面这一个长一些:实际上就是指定我们的镜像文件和索引格式:
file=2020-05-27-raspios-buster-lite-armhf.img:指定要使用的镜像文件。if=none:指定该驱动器不自动分配到任何接口。index=0:设置驱动器的索引为0。media=disk:指定媒体类型为磁盘。format=raw:指定镜像文件的格式为raw(原始格式)。id=disk0:为该驱动器指定一个唯一的ID(disk0)。下面的这个是指定输入输出:
virtio-blk-pci:指定设备模型为VirtIO块设备(通过PCI总线连接的VirtIO块设备)。VirtIO设备通常用于提高虚拟化性能。drive=disk0:将这个设备与之前定义的ID为disk0的驱动器关联起来。disable-modern=on:禁用现代(modern)VirtIO设备特性。这些特性通常提供更高的性能,但可能与某些旧的系统不兼容。disable-legacy=off:启用传统(legacy)VirtIO设备特性。这些特性通常用于兼容旧的系统。-net配置网络:
user:使用用户模式网络栈。这是QEMU的一种网络配置方式,适合不需要复杂网络配置的场景。hostfwd=tcp::5022-:22:设置端口转发规则,将主机的TCP端口5022转发到虚拟机的TCP端口22。-dtb:指定设备树,这里用配好的
-kernel是使用到的内核:kernel-qemu-5.4.51-buster
-no-reboot:虚拟机关机或崩溃时,阻止它自动重启(关了我们怎么看日志呢hhh)
-nographic:不启用图形化,这个看心情指定,注意的是这个跟console=ttyAMA0一起用
下面的--append说的是追加内核启动参数:
root=/dev/vda2:指定根文件系统所在的设备。这里假设根文件系统位于虚拟磁盘的第二个分区。panic=1:在内核遇到致命错误时,指定在1秒后自动重启。console=ttyAMA0:指定内核控制台输出到ttyAMA0,通常用于ARM架构的串口控制台。
下面就可以启动了,我想要提到的是,由于这玩意内存就给256M,可以说启动相当的缓慢,因此,有点耐心,好几次笔者以为是配置挂了反复检查,直到吃饭回来才发现跑通的本来
总结一下,如果看官希望采用的是非图形化的输出,需要写入的脚本是:
qemu-system-arm \
-M versatilepb \
-cpu arm1176 \
-m 256 \
-drive "file=2020-05-27-raspios-buster-lite-armhf.img,
if=none,index=0,media=disk,format=raw,id=disk0"
-device "virtio-blk-pci,drive=disk0,disable-modern=on,disable-legacy=off" \
-net "user,hostfwd=tcp::5022-:22" \
-dtb versatile-pb-buster-5.4.51.dtb \
-kernel kernel-qemu-5.4.51-buster \
-nographic \
-append 'root=/dev/vda2 panic=1 console=ttyAMA0' \
-no-reboot
下面只需要
chmod 777 <脚本名称>.sh
./<脚本名称>.sh
很快就会刷屏
笔者建议使用非图形化的方式启动,日志更加丰富,而且可以实时看看进度。图形化的方式则会缺斤少两,导致一些长时间的加载被误认为是kernel挂了(我自己)

这是结束时候的画面,默认的,旧版本下的账号密码是:登录用户名为pi,该账户默认密码是raspberry,之后想要改passwd更改就好。
如果想要以图形化的方式启动:
qemu-system-arm \
-M versatilepb \
-cpu arm1176 \
-m 256 \
-drive "file=2020-05-27-raspios-buster-lite-armhf.img,
if=none,index=0,media=disk,format=raw,id=disk0"
-device "virtio-blk-pci,drive=disk0,disable-modern=on,disable-legacy=off" \
-net "user,hostfwd=tcp::5022-:22" \
-dtb versatile-pb-buster-5.4.51.dtb \
-kernel kernel-qemu-5.4.51-buster \
-append 'root=/dev/vda2 panic=1' \
-no-reboot


新版本启动
我们这一次玩一个新的,这一次我们尝试跑最新版本的树莓派镜像,有了旧版本的经验,事情垂手可得,但是这次我们要注意的是,我们必须先用非图形化的方式跑一次(可以不用吗,可以,但是我懒得改文件)
这是因为我们需要被引导设置账号密码,新版本的树莓派OS不再提供默认的账号密码了!剩下的都一样!这里不再赘述
如何在Arch Linux上构建Raspberry Pi虚拟环境的更多相关文章
- linux上构建ftp服务器
linux上构建ftp服务器 服务器搭建 https://help.aliyun.com/knowledge_detail/60152.html,可以参考这篇博文. 配置文件详解 进入/etc/vsf ...
- 如何在linux上构建objective-c程序
swfit目前还是os x独占,以后会不会扩展到其他系统还未可知,但objective-c并不只存在于os x,在linux下gcc和clang都支持obj-c哦,下面简单把如何在ubuntu上构建o ...
- 如何在 Arch Linux 的终端里设定 WiFi 网络
如果你使用的是其他 Linux 发行版 而不是 Arch CLI,那么可能会不习惯在终端里设置 WiFi.尽管整个过程有点简单,不过我还是要讲一下.在这篇文章里,我将带领新手们通过一步步的设置向导,把 ...
- Linux上构建一个RADIUS服务器详解
作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息.但是网络设备通常只支持有限的用户管理功能.学习如何使用Linux上的一个外部RADIUS服务器来验证用户,具体来说是通过一个 ...
- 在linux上安装python, jupyter, 虚拟环境(virtualenv)以及 虚拟环境管理之virtualenvwraper
一, 安装python31.下载python3源码 wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz2.解压缩源码包,去 ...
- 如何在 Arch Linux 中安装 DNSCrypt 和 Unbound
DNSCrypt 是一个用于对 DNS 客户端和 DNS 解析器之间通信进行加密和验证的协议.它可以阻止 DNS 欺骗或中间人攻击. DNSCrypt 可用于大多数的操作系统,包括 Linux,Win ...
- 在linux上构建gitolite
每台机器生成密钥前要设置邮箱和用户名: git config --global user.name "admin" git config --global user.email & ...
- dotnet 在 linux 上构建问题(RID 的问题)
个人理解 一方面 /etc/os-release 中定义的的 ID VERSION_ID 是会与源代码中定义 RID 的相对应,如果不对应,就会报错 The specified RuntimeIden ...
- 如何在kali Linux上安装VMware Tools
作用: 1.让虚拟机和本地上的文件可以互传,直接拖动就可以实现转接 2.可在虚拟机上执行本地脚本 3.本地时钟与虚拟机同步 4........... 方法: 1.运行虚拟机 2.在上方菜单栏中点击安装 ...
- 如何在Ubuntu Linux上安装Oracle Java
不错文档,希望地址永久可用,url:http://zh.wikihow.com/%E5%9C%A8Ubuntu-Linux%E4%B8%8A%E5%AE%89%E8%A3%85Oracle-Java
随机推荐
- 008. gitlab代码克隆与推送
推送配置 gitlab需要推送的客户端sshkey添加到gitlab服务器中 node1 推送配置 centos node1: [root@node1 ~]# cat ~/.ssh/id_rsa.pu ...
- Java中的空指针异常 java.lang.NullPointerException
空指针异常 属于运行错误,java.lang.NullPointerException 原因:当引用名称的值为null时,就不能方法某个对象中的属性或方法,如果非要访问则就出现空指针异常 解决办法:在 ...
- LeetCode 683. K Empty Slots K 个空花盆 / LintCode 861. K个空的位置 (C++/Java)
题目: 一个花园有N个位置.每个位置上有一朵花.这N朵花会在N天内逐一盛开.每天都一定会有并且只有一朵花盛开,从这天起,这朵花将一直处于盛开的状态. 给定一个由数字1到N组成的数组flowers.数组 ...
- 笔记本重装系统后重装OFFICE(预装的,赠送的)
笔记本重装系统后重装OFFICE(预装的,赠送的) 1.首先用edge打开bing搜索微软账号,谷歌浏览器也行就是登录微软账号多了一步 2.进去后点击服务和订阅那一栏,然后可以看到自己已购买的产品.再 ...
- 动态生成的 select option 无法选中,设置值
使用jQuery的 .val('22') 给select 设置值时不生效. 原因:select是动态生成的,在DOM还没生成完之前就调用了.val('22'). 解决方法:动态生成的ajax请求改成同 ...
- WebStorm 中自定义文档注释模板
WebStorm 中自定义文档注释模板 前提 使用WebStrom写HTML,JavaScript,进行头部注释. 减少重复劳动 养成良好的代码习惯,规范化代码,规范的注释便于后续维护. 头部注释内容 ...
- skywalking需要引入的背景(查询调用链),传统的日志查询方法, 引入EFK日志搜索重要性
1.根据两次请求日志的关键点来截取日志,缩小日志的范围.tail -f orderApi.log | grep "orderKeyWordSubmit" 确定两次异常请求的 ...
- 支撑阻力指标,庄家成本价是可靠的支撑位(无未来,DLL加密)
本指标依据庄家的成本价设计的,庄家成本价是可靠的支撑位.底层逻辑:庄家是有内幕的, 庄家能在价格低位时抄底,庄家控股时,庄家不会让散户获取低价的筹码,所以当股价到达到支撑位时,会有比较大的反弹.庄家也 ...
- invalid comparison: java.util.Date and java.lang.String异常的原因
mybatis查询时使用date类型与""比较导致的 例 <if test="params.applicationEndTime != null and param ...
- 常见 i2c设备地址
背景 朋友分享的一份i2c器件地址清单,我觉得还不错. reference:https://learn.adafruit.com/i2c-addresses/the-list Special case ...