瑞芯微Rockchip开发者社区
登录
直播中
qjqb
8年用户
1255经验值
擅长:5762
私信
关注
[问答]
怎样通过QEMU模拟器加载系统文件打包成新的roofts镜像呢
开启该帖子的消息推送
qemu
镜像
模拟器
怎样通过QEMU模拟器加载系统文件打包成新的roofts镜像呢?有哪些步骤?
回帖
(1)
解欣
2022-3-4 11:13:44
打包环境
Ubuntu 18.04 AMD64
RK3288 ARM v7 板卡
安装QEMU
在Ubuntu系统下执行一下命令,安装QEMU模拟器
sudo apt-get install qemu-user-static
rootfs系统文件提取
将厂家或自行下载的系统镜像rootfs.img,拷贝到系统,这里我放置到用户目录下的RK3288文件夹:
执行如下命令新建文件夹,并加载镜像(这里我打包的是Debian系统):
sudo mkdir Debian-mount # 镜像挂载目录
sudo mkdir Debian # 定制系统目录
sudo mount rootfs.img Debian-mount # 挂载原始镜像
拷贝镜像内的所有文件,到本机文件夹,用于定制系统
sudo cp -frp Debian-mount/* Debian/ # 拷贝时连带文件价权限一块递归复制
取消挂载原始rootfs镜像
sudo umount Debian-mount # 取消镜像挂载
配置QEMU
进入到Debian文件夹,并拷贝qemu-arm-static可执行程序到要打包的系统可执行文件夹usr/bin下面:
cd Debian # 切换到要定制系统根目录
sudo cp /usr/bin/qemu-arm-static usr/bin # 拷贝模拟器arm可执行文件到定制系统bin文件夹下
cd .. # 配置后切换到上一级路径
创建根文件系统脚本
拷贝完模拟器ARM平台可执行程序后,新建一个切换根目录系统的脚本ch-mount.sh,对应的脚本内容如下:
#!/bin/bash
function mnt() {
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
echo "Either 1'st, 2'nd or both parameters were missing"
echo ""
echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m /media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi
切换到新系统根目录
执行以下命令挂载切换到指定的根文件系统(
Debian文件夹
):
./ch-mount.sh -m Debian/
可以看到执行后,终端显示的用户名变为了root用户,机器名为当前系统的机器名。通过ls命令可以看到已经挂在了指定文件夹的文件,其中md5sum.txt文件为我这边系统的镜像内的校验文件。
安装所需要的软件包
这里演示给新系统安装一个nginx软件包:
apt-get update # 更新可获取软件机器版本信息
apt-get install nginx # 安装nginx软件包
执行结果如下:
部分软件安装可能启动异常,这是由于在模拟器运行的缘故,只要安装成功即可。
创建新镜像
执行exit命令退出系统,并执行./ch-mount.sh -u Debian/取消挂载系统目录。使用如下命令创建新的镜像文件:
dd if=/dev/zero of=rootfs_new.img bs=1M count=3000 # 这里要注意根据新系统目录的大小创建镜像
sudo mkfs.ext4 -F -L linuxroot rootfs_new.img # 格式化镜像文件,并加入linuxroot卷标
执行结果如下:
制作新镜像
挂载镜像,并拷贝修改后的文件系统进去:
sudo mount rootfs_new.img Debian-mount # 挂载新镜像文件
sudo cp -rfp Debian/* Debian-mount/ # 拷贝时连带文件价权限一块递归复制
拷贝完成后,卸载镜像:
sudo umount Debian-mount
修复新镜像
由于创建的新镜像文件大小和里面的新系统文件大小不一致,需要通过命令检查并修复新镜像
e2fsck -p -f rootfs_new.img
修复新镜像并进行4k对齐
resize2fs -M rootfs_new.img
完成后,就可以通过AndroidTool工具,将新系统文件刷入板卡对应分区,实现批量部署定制后的新系统。
打包环境
Ubuntu 18.04 AMD64
RK3288 ARM v7 板卡
安装QEMU
在Ubuntu系统下执行一下命令,安装QEMU模拟器
sudo apt-get install qemu-user-static
rootfs系统文件提取
将厂家或自行下载的系统镜像rootfs.img,拷贝到系统,这里我放置到用户目录下的RK3288文件夹:
执行如下命令新建文件夹,并加载镜像(这里我打包的是Debian系统):
sudo mkdir Debian-mount # 镜像挂载目录
sudo mkdir Debian # 定制系统目录
sudo mount rootfs.img Debian-mount # 挂载原始镜像
拷贝镜像内的所有文件,到本机文件夹,用于定制系统
sudo cp -frp Debian-mount/* Debian/ # 拷贝时连带文件价权限一块递归复制
取消挂载原始rootfs镜像
sudo umount Debian-mount # 取消镜像挂载
配置QEMU
进入到Debian文件夹,并拷贝qemu-arm-static可执行程序到要打包的系统可执行文件夹usr/bin下面:
cd Debian # 切换到要定制系统根目录
sudo cp /usr/bin/qemu-arm-static usr/bin # 拷贝模拟器arm可执行文件到定制系统bin文件夹下
cd .. # 配置后切换到上一级路径
创建根文件系统脚本
拷贝完模拟器ARM平台可执行程序后,新建一个切换根目录系统的脚本ch-mount.sh,对应的脚本内容如下:
#!/bin/bash
function mnt() {
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
echo "Either 1'st, 2'nd or both parameters were missing"
echo ""
echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m /media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi
切换到新系统根目录
执行以下命令挂载切换到指定的根文件系统(
Debian文件夹
):
./ch-mount.sh -m Debian/
可以看到执行后,终端显示的用户名变为了root用户,机器名为当前系统的机器名。通过ls命令可以看到已经挂在了指定文件夹的文件,其中md5sum.txt文件为我这边系统的镜像内的校验文件。
安装所需要的软件包
这里演示给新系统安装一个nginx软件包:
apt-get update # 更新可获取软件机器版本信息
apt-get install nginx # 安装nginx软件包
执行结果如下:
部分软件安装可能启动异常,这是由于在模拟器运行的缘故,只要安装成功即可。
创建新镜像
执行exit命令退出系统,并执行./ch-mount.sh -u Debian/取消挂载系统目录。使用如下命令创建新的镜像文件:
dd if=/dev/zero of=rootfs_new.img bs=1M count=3000 # 这里要注意根据新系统目录的大小创建镜像
sudo mkfs.ext4 -F -L linuxroot rootfs_new.img # 格式化镜像文件,并加入linuxroot卷标
执行结果如下:
制作新镜像
挂载镜像,并拷贝修改后的文件系统进去:
sudo mount rootfs_new.img Debian-mount # 挂载新镜像文件
sudo cp -rfp Debian/* Debian-mount/ # 拷贝时连带文件价权限一块递归复制
拷贝完成后,卸载镜像:
sudo umount Debian-mount
修复新镜像
由于创建的新镜像文件大小和里面的新系统文件大小不一致,需要通过命令检查并修复新镜像
e2fsck -p -f rootfs_new.img
修复新镜像并进行4k对齐
resize2fs -M rootfs_new.img
完成后,就可以通过AndroidTool工具,将新系统文件刷入板卡对应分区,实现批量部署定制后的新系统。
举报
更多回帖
rotate(-90deg);
回复
相关问答
qemu
镜像
模拟器
如何将LUbuntu
系统
的根
文件系统
打包成
img
呢
2022-03-03
1874
启动DevEco Studio本地
模拟器
提示
镜像文件
缺失要如何处理?
2022-06-07
1894
启动DevEco Studio本地
模拟器
提示
镜像文件
缺失怎么解决
2022-04-07
1319
启动DevEco Studio本地
模拟器
为什么会失败
呢
2022-03-21
4154
如何用
Qemu
去
模拟
ARM平台
呢
2021-10-22
1415
手把手教你在Ubuntu
系统
中
通过
QEMU
来运行基于Arm CPU的Linux
系统
2021-08-19
3457
使用
QEMU
去
模拟
开发板能替代真的开发板吗
2021-07-30
2819
请问一下
怎样
使用AWTK Designer把图片
文件
打包成
数据的
2022-02-10
1036
使用CH32V103创建工程,用
QEMU
模拟
调试时选择什么
模拟器
?
2022-04-18
2398
labview
打包成安装文件
时
怎样
一起
打包
附加模块如“(Report Generator Toolkit)求大神解答
2016-02-17
6172
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分