本教程将教大家将泰山派开发板里面已经运行的系统备份和提取出来,制作成镜像可以再烧录进其他的板子。
烧录镜像
我这里选择的是 ubuntu20.04_hdmi_20240220_RNDIS_update.img
烧录进开发板。
注意
这里我仅仅是用来进行演示,正常情况下应该是已经烧录进去了。
要记住这个基础镜像名字,后面我们需要使用 瑞芯微开发工具
解包镜像拿到 parameter.txt
这个文件!!
链接网络
必须要连接网络!!!
我们推荐使用USB共享网路来进行联网,或者用wifi也可以,必须要保证电脑的虚拟机和泰山派处于同一局域网内!!
在泰山派上的操作
连接好网络已经可以ping通windows电脑虚拟机之后,就可以开始下一步了。
安装rsync
sudo apt-get update
sudo apt-get install rsync
查看版本
rsync -version
安装ssh
参考:调试工具使用教程
我们安装SSH客户端
sudo apt-get install openssh-client
安装SSH服务器
sudo apt-get install openssh-server
检查ssh状态
ps -e|grep ssh
如果出现了 sshd
和 ssh-agent
那就说明服务器和客户端都已经启动完成了。
如果缺少 sshd
,说明ssh服务没有启动或者没有安装。
如果缺少 ssh-agent
,且已经安装成功了,则可以使用下方的命令:
eval ssh-agent
然后再检查,就会发现缺失的 ssh-agent 出现了。
配置ssh
使用以下命令打开 sshd_config
文件
vim /etc/ssh/sshd_config
打开文件后找到这个位置,将箭头指示的语句开头的 # 删掉。
如果没有这个语句,则自己手打上去!!!!
解释
这个选项允许 root 用户通过 SSH 登录。如果你取消注释并设置为 yes,则 root 用户可以使用任何允许的认证方式登录,包括密码(如果不被其他配置禁止)和 SSH 密钥。
PermitRootLogin yes
完成修改之后我们输入命令重启ssh,这样配置就生效了。
sudo /etc/init.d/ssh restart
这样就重启成功了
验证操作
我们需要在根目录
下创建一个测试文件,用来验证我们的系统备份是否成功了。
因为原版的镜像烧录之后没有这个文件,我们备份的系统如果能保留这两个文件就说明成功!!
新建一个copy_test.txt
在根目录下,在里面写入:测试板载系统镜像提取---根目录
sudo echo "测试板载系统镜像提取---根目录" > /copy_test.txt
在虚拟机中的操作
安装rsync和ssh
这个几乎就不用操作什么,参照上面的教程安装即可!
安装好了就行,不需要虚拟机去配置
sshd_config
文件!
sudo apt-get update
sudo apt-get install rsync
sudo apt-get install openssh-client
sudo apt-get install openssh-server
2
3
4
ps -e|grep ssh
新建一个同步文件夹
这个文件夹内将会存放开发板当前的文件系统。
mkdir rootfs_copy
将当前开发板上的文件系统同步到虚拟机rootfs_copy文件夹
查看泰山派的IP地址
ip地址为:192.168.137.202
在虚拟机上创建~/.ssh/config 文件:
vim ~/.ssh/config
在文件中输入下面内容:
UserKnownHostsFile ~/.ssh/known_hosts
注意:这里一定要用root权限
sudo rsync -avx root@192.168.137.202:/ rootfs_copy
输入 虚拟机的密码
输入 yes
输入ssh的密码
,我们没有设置直接输入root
即可!
等待完成!!
生成一个镜像文件
我们需要制作镜像文件,使用dd工具,在虚拟机中执行命令:
大小可以自己调节,修改count的值,根据自己板子上的文件容量来计算。
dd if=/dev/zero of=rootfs.img bs=1M count=5000
命令解释
dd
:是数据复制命令,用于读取和写入文件。if=/dev/zero
:指定输入文件为 /dev/zero,这是一个特殊的设备文件,它会不断地产生零值数据。of=rootfs.img
:指定输出文件为 rootfs.img,这是我们要创建的文件。bs=1M
:指定每次读写操作的大小为 1MB。count=5000
:指定总共要进行的读写操作次数,这里是 5000 次。
这个命令将会创建一个名为 rootfs.img 的文件,其大小为 5000 * 1MB = 5000MB,即 5GB。由于每次操作都从 /dev/zero 读取数据,文件中的所有数据都是零值。这个文件将用作文件系统映像的基础。
使用 mkfs.ext4工具
将 rootfs.img文件
格式化为 ext4文件系统
,并且设置卷标为 linuxroot
sudo mkfs.ext4 -F -L linuxroot rootfs.img
命令解释
mkfs.ext4
:mkfs.ext4是用于创建ext4文件系统的工具。ext4是第四代扩展文件系统(Fourth Extended Filesystem),它是Linux系统中广泛使用的文件系统格式,支持大型文件和文件系统,以及对文件系统的日志功能,以保持文件系统的一致性。
-F
:-F或--force选项告诉mkfs.ext4强制执行文件系统的创建,即使目标设备或文件(这里是rootfs.img)已经有一个文件系统。这个选项会忽略任何已存在的文件系统,并覆盖它。
-L linuxroot
:-L选项用于设置文件系统的卷标(volume label)。在这里,卷标被设置为linuxroot。卷标是给文件系统起的一个名字,可以用来在挂载文件系统时更容易地识别它。
rootfs.img
:rootfs.img是命令的操作对象,即要创建文件系统的映像文件。这个命令执行后,rootfs.img文件会被创建(如果它尚不存在),并且会被格式化为ext4文件系统。
挂载镜像并将文件系统复制进去
创建一个挂载镜像文件的目录
mkdir rootfs-mount
挂载空的 rootfs.img 镜像
sudo mount rootfs.img rootfs-mount
将设备树文件系统复制到挂载了镜像的目录下
注意:设备树文件系统存放在 rootfs_copy 文件夹下,是我们之前从开发板copy出来的!!
sudo cp -rfp rootfs_copy/* rootfs-mount
然后卸载已经挂载的镜像
sudo umount rootfs-mount
处理镜像文件
运行 e2fsck 工具,自动修复 rootfs.img 文件系统映像中的错误,确保文件系统的一致性和完整性。
sudo e2fsck -p -f rootfs.img
使用瑞芯微开发工具提取出所需的文件
打开瑞芯微开发板工具,选择高级功能。
选择原始的镜像
我这里是:
ubuntu20.04_hdmi_20240220_RNDIS_update.img
点击解包,等待解包完成
这个会将img镜像打散
这里显示的是Android固件,不用管它,固定显示是这样的,所以我倾向于瑞芯微官方留下的小彩蛋。
我们找到 瑞芯微开发板工具
的 文件夹
,在目录下能找到我们所需要的已经被打散的镜像
。
路径为:
/RKDevTool_Release_v2.92/Output/Android/Image
其实到这里就可以进行烧录rootfs.img
和parameter.txt
文件。
- 这里的
parameter.txt
文件是上面用瑞芯微开发工具解包得来的。 - 这里的
rootfs.img
是我们之前在虚拟机中制作的rootfs.img
使用泰山派SDK中的工具打包镜像。
能用到这个功能的,应该都已经至少编译过一遍SDK了,所以我们直接进入SDK目录下
将解包img镜像
得到的所有文件放在SDK中的rockdev文件夹
中。
将我们之前在虚拟机中制作的rootfs.img
拷贝到rockdev文件夹
中,覆盖掉当前的文件。
运行 ./build.sh updateimg
命令打包镜像。
会在SDK目录下的 rockdev文件夹
中生成 update.img镜像
!!
烧录镜像测试
我们烧入刚刚生成的这个镜像到新的开发板中。
这时候我们进入开发板就能看到当时在根目录中的 copy_test.txt
!!
注意
到这里就是文件系统的备份了,关于userdata的备份,下方会有教程!!
只制作文件系统的备份将会丢失userdata的数据,一般情况下不是特意去使用的话,那userdata就是用来存放临时文件的,可以忽略不记!!