如何在Linux上构建Raspberry Pi虚拟环境

news2024/9/8 22:59:02

目录

前置环境需求

Older Version

新版本启动


下面我们来讲讲如何使用QEMU来仿照树莓派环境。这里首先先分成两大类。第一类是跑比较老的,安全性较低的老树莓派,主要指代的是22年4月份发布之前的版本,这个版本当中,树莓派镜像自己内部就配置了一份默认的账户密码。对于之后的版本则不配备这种默认的账号密码。因此,我们需要区分出两种装载模式。

为了省力,我们使用人家已经配置好了的

github仓库:qemu-rpi-kernel

前置环境需求

yay -S qemu-system-arm

Older Version

考虑旧的树莓派镜像,安装的方式如下

  1. 克隆仓库qemu-rpi-kernel到一个位置,取出里头的:

    kernel-qemu-5.4.51-buster
    versatile-pb-buster-5.4.51.dtb

    这两个文件到一个自己创建的目录文件夹下。我的是oldone

  2. 下载旧树莓派镜像

    https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2020-05-28/2020-05-27-raspios-buster-lite-armhf.zip

    wget还是扔浏览器自己点击,看自己兴趣。下载结束解压到上面创建的oldone文件夹下

  3. 写一个简单的脚本

    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不再提供默认的账号密码了!剩下的都一样!这里不再赘述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1957629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Layui表格合并、表格折叠树

1、核心代码&#xff1a; let tableMerge layui.tableMerge; // 引入合并的插件&#xff0c;插件源文件在最后let tableData [{pid: 0,cid: 111,sortNum: 1, // 序号pName: 数据父元素1,name: 数据1,val: 20,open: true, // 子树是否展开hasChild: true, // 有子数据opt: 数据…

昇思25天学习打卡营第1天 | 快速入门教程

昇思大模型平台&#xff0c;就像是AI学习者和开发者的超级基地&#xff0c;这里不仅提供丰富的项目、模型和大模型体验&#xff0c;还有一大堆经典数据集任你挑。 AI学习有时候就像找不到高质量数据集的捉迷藏游戏&#xff0c;而且本地跑大数据集训练模型简直是个折磨&#xf…

react css module 不生效问题记录

背景&#xff1a;自己使用webpackreactcssless配置的项目框架&#xff0c;在使用过程中发现css module引入不生效。 import React from react import styles from ./index.module.less console.log(styles)//输出 undefinedwebpack配置了css-loader,less-loader,webpack默认cs…

Linux系统之dns服务配置

要求&#xff1a;DNS服务器域解析 www. 11zzj.com为192.168.11.1; ftp.11zzj.com 为192.168.11.2; mail.11zzj.com 为172.16.11.20; 1.打开Linux6&#xff08;服务器&#xff09;和Linux5&#xff08;客户端&#xff09; 配置IP地址和DNS 地址&#xff0c;并ping通。…

PSINS工具箱函数介绍——kfinit

kfinit是kf的参数初始化函数&#xff0c;用于初始化滤波参数 本文所述的代码需要基于PSINS工具箱&#xff0c;工具箱的讲解&#xff1a; PSINS初学指导基于PSINS的相关程序设计&#xff08;付费专题&#xff09; 使用方法 kfinit这个函数的字面意思是&#xff1a;kf的初始化…

游戏制作中没想明白的事情

当一个备忘录&#xff0c;有的是还没有时间去深入研究&#xff0c;或者没有从头了解 什么是建模绑定&#xff1f;为什么人物建模&#xff0c;初始化都是双手打开的&#xff1f;平着放武器&#xff0c;但运行的时候武器会自动竖起来&#xff0c;这是怎么做到的&#xff1f; 思…

嵌入式学习Day13---C语言提升

目录 一、二级指针 1.1.什么是二级指针 2.2.使用情况 2.3.二级指针与数组指针 二、指针函数 2.1.含义 2.2.格式 2.3.注意 2.4.练习 三、函数指针 3.1.含义 3.2.格式 3.3.存储 3.4.练习 ​编辑 四、void*指针 4.1.void缺省类型 4.2.void* 4.3.格式 4.4.注…

RocketMQ的详细讲解(四种mq的对比(activeMq、rabbitmq、rocketmq、kafka))

20240729 RocketMQ1 mq的三大作用 异步、削峰限流、解耦合2. 四种mq的对比&#xff08;activeMq、rabbitmq、rocketmq、kafka&#xff09;3 rocketmq特点1. 平台无关2. 能提供什么样的功能 4 rocketMq4.1 broker中的标题&#xff0c;来约束读和写4.2 rocketmq的结构4.3 读和写的…

AJAX概念与axios使用

一、什么是AJAX&#xff1f; 定义&#xff1a;AJAX 是异步的 JavaScript和XML(Asynchronous JavaScript And XML)。简单点说&#xff0c;就是使用XMLHttpRequest 对象与服务器通信。 它可以使用 JSON&#xff0c;XML&#xff0c;HTML 和 text 文本等格式发送和接收数据。AJAX最…

Java 内推 | 教育行业缺口来了,研发,运维,产品,教研,职能,营销... 别错过

Java 内推 | 教育行业缺口来了&#xff0c;研发&#xff0c;运维&#xff0c;产品&#xff0c;教研,职能&#xff0c;营销… 别错过 岗位职责&#xff1a; 1、根据公司战略及业务规划&#xff0c;参与部门业务架构分析与设计&#xff0c;包含规划立足当前、面向未来的应用架构…

嵌入式C++、STM32、ROS系统和MQTT协议通讯:智能农业灌溉系统项目设计思路(代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. STM32微控制器代码 1.1 STM32初始化代码 1.2 读取土壤湿度 1.3 MQTT数据发送 1.4 接收控制命令 1.5 主循环 2. ROS系统代码 2.1 创建ROS节点 2.2 控制水泵的逻辑 3. ROS与MQTT的集成 3.1 安…

MySQL 执行计划详解

文章目录 一. 概念二. 语法三. 详解各字段1. id2. select_type3. table4. partitions5. type6. possible_keys与key7. key_len8. ref9. rows10. filtered11. Extra 一. 概念 有了慢查询后&#xff0c;需要对慢查询语句进行分析。一条查询语句经过MySQL查询优化器后&#xff0c…

最全国内13家DNS分享 解决网页被恶意跳转或无法打开问题

腾讯 DNS (DNSPod) 腾讯 DNS 是由 DNSPod 提供的公共免费 DNS 服务。DNSPod 已被腾讯收购&#xff0c;现在属于腾讯公司所有。该 DNS 服务稳定性和连通性良好&#xff0c;经测试在海外也可以使用。 DNSPod 提供了 IPv4、IPv6 DNS 和 DoT/DoH 服务。 IPv4 地址: 119.29.29.29…

fastapi教程(五):中间件

一&#xff0c;什么是中间件 中间件是一种软件组件&#xff0c;它在请求到达应用程序处理程序之前和/或响应发送回客户端之前执行操作。 请求从客户端发出。 请求首先经过Middleware 1。 然后经过Middleware 2。 请求到达FastAPI路由处理器。 响应从路由处理器返回。 响应经过…

精品PPT | 云原生大数据平台构建及落地实践.pptx

1、监控和可观测性的关系及渊源 2、当前阶段落地可观测性的挑战在哪里 3、落地好一个可观测系统的三大要素 4、面向故障处理过程的可观测性体系建设案例 5、思考&#xff1a;人工智能2.0对可观测性技术和产品演进的影响

鸿蒙开发—黑马云音乐之Music页面

目录 1.外层容器效果 2.信息区-发光效果 3.信息区-内容布局 4.播放列表布局 5.播放列表动态化 6.模拟器运行并配置权限 效果&#xff1a; 1.外层容器效果 Entry Component export struct MuiscPage {build() {Column() {// 信息区域Column() {}.width(100%)// .backgroun…

环形链表 II - 力扣(LeetCode)C语言

142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; (点击前方链接即可查看题目) 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达…

制造企业选型MES管理系统时需要关注的地方

在当今制造业全面拥抱数字化转型的浪潮中&#xff0c;MES管理系统解决方案的角色日益凸显&#xff0c;成为提升生产效率、优化资源配置的关键工具。对于制造企业而言&#xff0c;选择一款合适的MES管理系统不仅关乎当前的生产管理需求&#xff0c;更直接影响到企业未来的竞争力…

【React】详解classnames工具:优化类名控制的全面指南

文章目录 一、classnames的基本用法1. 什么是classnames&#xff1f;2. 安装classnames3. 导入classnames4. classnames的基本示例 二、classnames的高级用法1. 动态类名2. 传递数组3. 结合字符串和对象4. 结合数组和对象 三、实际应用案例1. 根据状态切换类名2. 条件渲染和类名…

【权威发布】第二届机械电子工程与软件工程国际会议(MEESE 2024)

第二届机械电子工程与软件工程国际会议 2024 International Conference on Mechanical and Electronic Engineering and Software Engineering 【1】会议简介 第二届机械电子工程与软件工程国际会议是一个专注于机械电子工程与软件工程领域交叉融合的国际盛会。会议旨在汇聚全球…