前面提到过基于ubuntu-base去构建根文件系统基于Ubuntu-base构建根文件系统-CSDN博客,但是有时候我们并不需要重头开始,可以基于现有的根文件系统做调整。又或者我们直接在出厂的系统上去搭建好自己的运行环境并且编译出自己想要的程序,现在要批量移植到其它的开发板上,最省事的办法当然是直接导出了。
根文件系统导出有很多种方式,可以使用U盘本地导出,也可以使用网络远程导出,当然是网络更加的方便,这里就只描述网络导出的方式了。
首先我们得明白开发板里的根文件系统实际上就是一个包含各种文件的文件夹,我们也知道linux下的根目录是“/”,所以实际上就是将“/”下的所有文件导出即可。
我们使用rsync来进行根文件系统的数据导出,PC和开发板ubuntu都需要安装SSH和rsync,默认你已经安装好了,且通过ping可以确认PC与开发板网络连接正常。
我们在PC上新建一个目录ubuntu_rootfs
mkdir ubuntu_rootfs
同步开发板根文件系统,usrname为开发板Ubuntu的用户名,可以是root也可以是普通用户名,boardip为开发板IP,意思就是将开发板/下的文件同步到ubuntu_rootfs文件夹中。连接过程中会提示输入开发板用户的密码,按实际输入即可。
sudo rsync -avx usrname@boardip:/ ubuntu_rootfs
耐心等待一会儿,就会发现ubuntu_rootfs里多出来根文件系统的文件,查看一下大小,跟开发板根文件系统大小基本一致。
后面的事就简单了,步骤与 基于Ubuntu-base构建根文件系统-CSDN博客中的一致。如果想要查看和调整根文件系统,可以使用mount.sh脚本进行挂载,就可以进入根文件系统去操作了,可以修改hostname,用户名做一些个性化定制,或者再安装一些软件等等,结束之后退出即可。
然后是制作根文件系统镜像,首先新建一个空镜像文件和空目录,将镜像挂在到空目录上,然后将包含根文件系统的文件夹内容全部拷进空目录,再取消挂载,镜像文件就已经包含了根文件系统。
汇总指令如下:
//首先创建一个空镜像文件,大小参考ubuntu_rootfs那个文件夹,可以略大一些
dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=4096
//将该文件格式化为ext4文件系统
mkfs.ext4 ubuntu_rootfs.img
//将镜像文件挂载到一个空文件中,并将ubuntu_roofs中的文件拷贝到该空文件中
chmod 777 rootfs_maker
sudo mount ubuntu_rootfs.img rootfs_maker/
sudo cp -rfp ubuntu_rootfs/* rootfs_maker/
umount rootfs_maker/
//复制完以后用e2fsck修复及检测镜像文件系统,resize2fs减小镜像文件的大小
e2fsck -p -f ubuntu_rootfs.img
resize2fs -M ubuntu_rootfs.img
这样我们就得到开发板的根文件系统了,把它烧录到其它开发板就可以直接使用,省去重复配置环境的工作了。