当前位置: 首页 > news >正文

【Linux应用】在PC的Linux环境下通过chroot运行ARM虚拟机镜像img文件(需要依赖qemu-aarch64、不需要重新安装iso)

【Linux应用】在PC的Linux环境下通过chroot运行ARM虚拟机镜像img文件(需要依赖qemu-aarch64、不需要重新安装iso)

qemu提供了运行ARM虚拟机的方法
具体的操作方式就是建立一个硬盘img 然后通过iso安装到img 最后再运行img即可
这种方式教程很多 很简单
这里介绍的是对已有img文件的运行
该img文件能够在ARM平台直接运行
原理就是将img文件的系统内容拷贝到Linux平台上 然后对

文章目录

  • 安装qemu-aarch64-static
  • 查看并挂载img文件分区(将img分区文件完整拷贝)
  • 移植qemu-aarch64-static
  • 挂载系统目录到制作的rootfs目录
  • 移植resolv.conf文件
  • 使用chroot命令运行虚拟机系统
  • 写一个shell脚本来运行
  • ARM环境下“交叉编译”
  • 附录:开发板快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互(RADXA ZERO 3为例)
    • ZERO 3烧录
    • ZERO 3串口shell
    • 外设挂载
    • 连接WiFi
    • SSH连接
    • SSH的文件交互
    • 换源

安装qemu-aarch64-static

使用命令:

qemu-system-aarch64 -version
qemu-aarch64-static  -version

即可查看已安装的版本
如果没有的话 需要执行安装:

sudo apt install qemu-system-aarch64

查看并挂载img文件分区(将img分区文件完整拷贝)

通过fdisk -l命令可以查看img文件相关
如:

fdisk -l radxa.img

在这里插入图片描述
这里可以看到img文件有三个分区
第三个即为我们要使用的主系统分区(根据实际情况而定)

通过losetup -f命令查看可用的循环设备
在这里插入图片描述
那么就可以使用losetup -p 参数挂载img文件到对应的循环设备

sudo losetup -P /dev/loop15 radxa.img

而后使用sudo lsblk查看循环设备列表
在这里插入图片描述
那么现在就可以通过mount命令挂载loop15p3到/mnt/目录了

sudo mount /dev/loop15p3 /mnt/

在这里插入图片描述
可以在mnt目录下看到所有原本在img分区内的文件(不用担心mnt挂载的其他设备会被覆盖 如共享文件夹等 这些在卸载挂载时会还原)
在这里插入图片描述
然后可以建立一个rootfs文件夹,将这些文件都拷贝进去

mkdir ~/rootfs
sudo cp -a /mnt/* ~/rootfs/

在这里插入图片描述
拷贝完毕就可以卸载mnt了

sudo umount /mnt

卸载mnt后 mnt下就被还原成最初只有共享文件夹的状态了
同时 使用losetup -d命令即可卸载循环设备

sudo losetup -d /dev/loop15

如此一来 我们就把img文件下对应的分区文件全部拷贝到了rootfs文件夹下

移植qemu-aarch64-static

通过命令来实现移植(默认安装路径/usr/bin/

sudo cp /usr/bin/qemu-aarch64-static ./rootfs/usr/bin/

在这里插入图片描述

挂载系统目录到制作的rootfs目录

(这一步可以不操作 不会影响后续的执行 甚至挂载以后再卸载也可以 但是建议每次运行时操作一下 确保安全)

运行以下指令:

sudo mount -t proc /proc ./rootfs/proc
sudo mount -t sysfs /sys ./rootfs/sys
sudo mount -o bind /dev ./rootfs/dev
sudo mount -o bind /dev/pts ./rootfs/dev/pts

在这里插入图片描述
成功挂载后 可以在文件系统中看到被挂载的目录

如果是卸载的话 就是:

sudo umount  ./rootfs/proc
sudo umount  ./rootfs/sys
sudo umount  ./rootfs/dev
sudo umount  ./rootfs/dev/pts

(如果运行完虚拟机后要卸载挂载 那么需要扥虚拟机完全关闭才行 最好是延时后卸载 否则会有bug)
当然 重启的话 也会自动卸载了

移植resolv.conf文件

为了能够运行以后远程连接、操作虚拟机 同时虚拟机能够上网 需要将相关的dns配置参数等移植过去

sudo cp /etc/resolv.conf ./rootfs/etc/

在这里插入图片描述

使用chroot命令运行虚拟机系统

使用chroot命令进入我们建立好的根目录系统

sudo chroot ./rootfs /bin/bash

进去以后 就直接是虚拟机的终端
在这里插入图片描述
运行后 即可操作虚拟机上的各种文件、程序
在这里插入图片描述
但是涉及到需要硬件架构支持的 运行则会报错

写一个shell脚本来运行

echo "cp /etc/resolv.conf ./rootfs/etc/"
sudo cp /etc/resolv.conf ./rootfs/etc/ #同步文件
echo "start chroot"
sudo chroot ./rootfs /bin/bash
echo "end chroot"

在这里插入图片描述
在虚拟机中输入exit即可退出

ARM环境下“交叉编译”

如果在ARM虚拟机上编译的话 就不要安装原本运行在PC上的交叉编译器了
而是应该安装ARM本身的编译器
譬如:

#C++编译环境
sudo apt-get install -y cmake
sudo apt-get install -y g++ build-essentialsudo apt-get install -y libopencv-dev #OPENCV库 4.5.1
sudo apt-get install -y libpcl-dev #PCL库 1.11.1

在这里插入图片描述
这样一来 其实严格意义上而言都不叫“交叉编译”了

交叉编译实际上是在PC的x86架构上运行支持交叉编译的编译器 然后编译成目标架构
其交叉编译器只能在PC上运行 但编译出来的文件只能在目标架构上运行

所以 在ARM环境上编译出ARM的程序 那么所用的编译器就不是交叉编译器了 所以直接安装g++即可
但如果在PC环境下安装g++ 则只能编译出在PC上运行的程序 如果要编译ARM程序 则需要交叉编译器如aarch64-g+±linux等

附录:开发板快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互(RADXA ZERO 3为例)

开发板快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互(RADXA ZERO 3为例)

ZERO 3烧录

ZERO 3有两种 最本质的就是一个带WiFi一个不带WiFi
在这里插入图片描述

ZERO 3作为一个Linux板 其存储支持从sd卡EFI启动

系统安装则直接通过Balena Etcher来进行
可以使用其Windows版本即可
官方文档:
官方文档快速上手描述

镜像下载则也可以使用官方镜像:
Radxa ZERO 3 Debian Build 6

该镜像是最初的镜像 很多依赖都没有
如果开发的话 可以直接下载第三方镜像 或者自己在原有官方镜像上去安装镜像包等等

烧录很简单 直接用工具选择U盘 选择镜像即可

下图为烧录好了的sd卡
在这里插入图片描述
除了系统分区外 就是一个config分区 其挂载根根目录名称即为config

在这里插入图片描述

ZERO 3串口shell

串口与ZERO 3链接如下图:
在这里插入图片描述
链接后 配置串口为

baudrate: 1500000
data bit: 8
stop bit: 1
parity  : none
flow control: none

启动后 用户名和密码都为radxa
在这里插入图片描述

外设挂载

根据df命令查询系统挂载点
在这里插入图片描述
其做好了的U盘外部存储空间为/config
在这里插入图片描述

连接WiFi

使用如下指令链接WiFi:

nmcli device wifi                                           #扫描WiFi
sudo nmcli device wifi connect <ssid> password <passwd>     #连接WiFi

在这里插入图片描述
连上后 使用ip a命令即可查看连接状态和ip
在这里插入图片描述

SSH连接

使用命令sudo systemctl status ssh查看ssh状态在这里插入图片描述
前提是要安装ssh
如果没有安装 则通过shell安装ssh:

sudo apt-get update
sudo apt-get install openssh-server openssh-sftp-server

根据Active判断是否需要重启ssh服务:
重启ssh服务:

sudo systemctl restart ssh

启动后如下:
在这里插入图片描述
Active状态就被设置为了running

开机自启动ssh则使用命令:

sudo systemctl enable --now ssh

在PC上 支持ssh的设备中 使用以下指令链接到板子:

ssh [username]@[IP address] # or ssh [username]@[hostname]

如下图:
在这里插入图片描述

SSH的文件交互

若是在PC上作为主机去访问设备
那么就是在PC的cmd中运行shell

有的终端软件配备了ssh的文件管理传输功能
在这里插入图片描述
连上以后就可以直接搜素到当前目录下的各类文件 以便于实现文件管理
并且可以直接download
在这里插入图片描述

# 复制 Windows 文件到 Linux
scp D:\data\1.txt root@192.168.88.161:/root/data
# 复制 Windows 目录到 Linux(记得加 -r)
scp -r D:\data root@192.168.88.161:/root/data# 复制 Linux 文件到 Windows
scp root@192.168.88.161:/root/data/1.txt D:\data
# 复制 Linux 目录到 Windows(记得加 -r)
scp -r root@192.168.88.161:/root/data D:\data

前提是设备开启了ssh可以被链接
在这里插入图片描述
发过去后便能在板子上看到:
在这里插入图片描述

回传文件夹:
在这里插入图片描述
在这里插入图片描述

如果是Linux设备去连接Windows设备 则需要在Windows里面设置对应的服务 相关教程很多 这里不过多赘述

如果是Linux设备访问Linux设备 则主设备也要指定IP

scp root@192.168.88.161:/root/1.txt root@192.168.88.162:/root# 如果设置了Linux之间的免密登录,可这样写:
scp 192.168.88.161:///root/1.txt 192.168.88.162:///root

换源

Linux系统的源都在/etc/apt/下 一般有两个文件
一个是sources.list 另外一个是sources.list.d目录下的品牌list文件

如树莓派需要备份原本的源:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak

而radxa的则是:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 
sudo cp /etc/apt/sources.list.d/radxa.list /etc/apt/sources.list.d/radxa.list.bak

将原本的文件进行编辑:

sudo nano /etc/apt/sources.list

注释掉最初的源 并添加新的源:

deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free-firmware

如图:
在这里插入图片描述
然后再换子目录下的源

sudo nano /etc/apt/sources.list.d/raspi.list

替换成:

deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main

不过很可惜 清华源没有radxa 但是可以换debian的源(/etc/apt/sources.list):

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

换源后 执行

sudo apt-get upgrade
sudo apt-get update

相关文章:

  • 【Linux】Linux内核模块开发
  • MySQL 实战 45 讲 笔记 ----来源《极客时间》
  • 【Linux学习笔记】进程替换和自定义shell
  • 开源Kotlin从零单排0基础完美入门教程
  • 基于SpringAI实现简易聊天对话
  • Python PyTorch库【机器学习框架】全面深入讲解与实践
  • windows 使用 FFmpeg 放大视频原声
  • BUUCTF——Online Tool
  • nextcloud私有网盘系统搭建
  • 百度语音合成API调用
  • SOLIDWORKS广东东莞地区代理商哪个服务好?都有哪些代理商?
  • 1.1 点云数据获取方式——引言
  • 图漾官网Sample_V1版本C++语言完整参考例子---单相机版本
  • Java练习6
  • 大数据项目全生命周期工具链解析
  • ​MCP协议深度解析:原理、应用与物联网时代的机遇-优雅草卓伊凡
  • 认识Linux基本操作、命令
  • Spring Boot 集成 ActiveMQ 实现异步消息通信(二)
  • 面试篇 - LoRA(Low-Rank Adaptation) 原理
  • 《图像采集与处理技术的研究与洞察》
  • 浙商银行一季度净赚超59亿微增0.61%,非息净收入降逾22%
  • 从咖啡节到话剧、演唱会,上海虹口“文旅商体展”联动促消费
  • 新华社评论员:汇聚起工人阶级和广大劳动群众的磅礴力量
  • “上海-日喀则”直飞航线正式通航,将于5月1日开启首航
  • 滨江集团去年营收约691亿元,尚未结算的预收房款1253亿元
  • 因高颜值走红的女通缉犯出狱后当主播自称“改邪归正”,账号已被封