首页 > 系统相关 >如何在Arch Linux上构建Raspberry Pi虚拟环境

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

时间:2024-07-29 22:28:39浏览次数:14  
标签:kernel 树莓 buster disk0 51 虚拟环境 Linux Raspberry qemu

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

​ 下面我们来讲讲如何使用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不再提供默认的账号密码了!剩下的都一样!这里不再赘述

标签:kernel,树莓,buster,disk0,51,虚拟环境,Linux,Raspberry,qemu
From: https://www.cnblogs.com/charliechen114514-blogs/p/18331195

相关文章

  • Linux安装与配置
    下载VMware首先我们需要下载一个叫VMware的软件:进入官方下载,地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html选择与自己电脑版本适配的VMware版本【输入许可证密钥MC60H-DWHD5-H80U9-6V85M-8280D】此密钥后续会用到,可以先进......
  • Wordle For Linux 1.0
    把本世纪最伟大的发明移植到LinuxClicktoDownloadWordleForWindows1.2.0使用方法请先解压到/home文件夹下(其他地方也可以,但是你在运行之前必须要先跳到那个文件夹下)然后打开终端,输入以下命令:g++WordleForLinux.cpp-owordle即为编译完成,此后你无需再进行编译,只......
  • Linux常用工具
    Linux常用工具tar打包命令详解tar命令做打包操作当tar命令用于打包操作时,该命令的基本格式为:tar[选项]源文件或目录需要注意的是,在使用tar命令指定选项时可以不在选项前面输入“-”。例如,使用“cvf”选项和“-cvf”起到的作用一样。打包文件和目录......
  • 多队列网卡-虚拟机Linux系统设置
    多队列网卡安装作者使用的是ubuntu20.04,VMWARE首先查看系统上的网卡ipa#查看网卡信息查看ens33是否支持多队列网卡,如果是下图这种情况就是不支持多队列网卡。cat/proc/interrupts|grepens33#proc是linux虚拟文件系统关闭虚拟机,添加多个网卡修改VMWAE......
  • Linux-进程管理
    文章目录 1.进程1.1定义1.2进程和线程的区别:2.静态查看进程3.动态查看进程3.1查看进程3.2杀死进程3.3作业控制总结1.进程1.1定义进程是已启动的可执行程序的运行实例,是程序运行的过程,动态的,有生命周期及运行状态,是一个正在运行的程序,包括主进程和子......
  • Linux-存储管理
    文章目录1.硬盘1.1初识硬盘2.磁盘分区2.1硬盘设备命名2.2磁盘分区方式2.3磁盘分区3.fstab开机自动挂载4.文件系统4.1分类4.2概念5.逻辑卷LVM5.1LVM管理5.2LVM制作5.3逻辑卷扩容5.4逻辑卷缩容6.交换分区7.mount详解8.raid--磁盘阵列8.1RA......
  • 【Linux中Shell的功能】
    一、Shell概念Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell编程跟JavaScript、php编程一样,只要有一个......
  • MPsoc TSN网络功能设计及测试 (petalinux22.2)
    TSN参考链接:linkxilinx内核TSNkernel代码链接:linkpetalinux-config-ckernel选择如下:TSNPL端设备树配置代码tsn0_axi_firewall_0:axi_firewall@a0020000{ clock-names="aclk"; clocks=<&misc_clk_0>; compatible="xlnx,axi-firewall-1.2&qu......
  • Linux——进程间通信
    一、进程间通信介绍目的数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个进程或一个组发送消息,通知它(它们)发生了某种事件进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够......
  • Linux操作系统下编译、链接过程详解
    gcc和g++的区别:gcc和g++是GNU编译器集合中的两个不同的编译器,它们之间的主要区别在于它们所针对的编程语言以及它们的行为和功能。1.编译器的目标语言:gcc是用于编译C语言的编译器,而g++是用于编译C++语言的编译器。因此它们分别用于编译不同的源代码文件;2.语法支持:gcc和......