确保两边都安装好了SSH和rsync
RK3568开发板上的操作
使用以下命令在RK3568的开发板上安装ssh、rsync
sudo apt-get install ssh
sudo apt-get install rsync
Ubuntu主机上的操作
使用以下命令在Ubuntu主机上安装ssh、rsync
sudo apt-get install ssh
sudo apt-get install rsync
接着在ubuntu主机上创建一个目录,用于存放导出的开发板文件系统。一下的操作都是在ubuntu主机下进行。
mkdir rootfs
使用以下命令同步RK3568开发板上的文件系统,执行完命令后可以将开发板的文件系统同步到ubuntu主机上。
sudo rsync -avx root@192.168.10.10:/ rootfs
注: root为开发板的用户名
192.168.10.10为开发板的ip地址,这个按照自己板子的实际情况定。
/:根目录是开发板的根目录。
rootfs:这里是前面ubuntu主机上创建的rootfs文件夹的路径。
运行sudo rsync -avx root@192.168.10.10:/ rootfs命令可能出现的报错:
root@Ubuntu-B660M:/rootfs# sudo rsync -avx root@192.168.2.82:/ rootfs
/etc/ssh/ssh_config: line 53: Bad configuration option: permitrootlogin
/etc/ssh/ssh_config: terminating, 1 bad configuration options
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.3]
解决办法:
sudo nano /etc/ssh/ssh_config
找到 permitrootlogin 行并将其删除或注释掉(在行前加上 #)。
就可以正常运行了,我就是只遇到这个报错,如果有新遇到的根据实际报错解决。
制作根文件系统镜像,用dd命令创建镜像文件(这个镜像文件需要根据打包的板子上的文件有多大对应把count做修改)
然后使用dd命令创建一个空镜像文件。
dd if=/dev/zero of=rk3568.img bs=1M count=4096
其中:
/dev/zero:为虚拟盘的名字。
rk3568.img:为要建的镜像文件。
bs=1M :表示每块读写1M数据。
count=4096:拷贝块的数量。
格式化镜像文件
使用以下命令格式化镜像文件,并加入linuxroot卷标。
sudo mkfs.ext4 -F -L linuxroot rk3568.img
挂载根文件镜像、并往里面拷入修改后的文件系统。
mkdir rk3568_mount
sudo mount rk3568.img rk3568_mount
sudo cp -rfp rootfs/* rk3568_mount
卸载镜像
sudo umount rk3568_mount
查看挂载信息
df -h
卸载/media/root/linuxroot,不然后面操作会提示
根据自己的查到的实际修改
sudo umount /media/root/linuxroot
经过前面的流程rk3568.img镜像文件里就有开发板的文件系统了,但rk3568.img文件大小不是文件系统的实际大小,还要经过处理才能使用。
检查并精简rk3588.img镜像的大小
使用以下命令完成操作:
1、检查修复镜像的文件系统
sudo e2fsck -p -f rk3568.img
2、精简文件系统镜像的大小
sudo resize2fs -M rk3568.img
以上的步骤是参考了该文章
下面是用到了辅助工具辅助把想要的镜像打包出来,注:rk3568.img需要重命名为rootfs,因为脚本里写死了。
用工具辅助,替换rootfs.img文件,然后再打成镜像文件
1、解包统一固件update.img:
这里的解包的过程是为了获取到一下文件:
output/
├── Image
│ ├── boot.img
│ ├── recovery.img
│ ├── misc.img
│ ├── rootfs.img
│ └── uboot.img
├── MiniLoaderAll.bin
├── package-file
└── parameter.txt
具体操作:
将已有系统镜像拷贝到 linux_sv_repack 目录下
执行解包脚本:./unpack-img.sh xxxxx.img
脚本成功执行完后,在./Linux_Pack_Firmware/rockdev/目录下生成output目录,就会得到上述文件了。
2、打包统一固件update.img:
将文件boot.img 、MiniLoaderAll.bin 、 parameter.txt、 trust.img、uboot.img、rootfs.img、recovery.img拷贝到linux_repack/image目录下。
注:这里替换掉自己打包好的rootfs.img文件
执行打包脚本:./pack-img.sh
最后会/home/linux_sv_repack/下生成的update.img就是镜像文件了