修改镜像内部的文件¶
在系统构建章节中,我们得到了系统镜像,分别是SD镜像.img格式,emmc镜像zip压缩包格式, 除了重新编译镜像之外,还有一种方法也能够修改镜像内部的内容, 将部署应用程序需要的一些程序、脚本等文件直接添加到镜像中。
修改SD镜像¶
将img镜像文件拷贝到linux系统下,以
sg2000-riscv-2024-08-01-ubuntu-sd.img
文件为例
使用
parted xxx.img
命令进入GNU Parted如下所示1 2 3 4 5 6 7 8 9
#parted查看img镜像情况 parted sg2000-riscv-2024-08-01-ubuntu-sd.img #信息输出如下 WARNING: You are not superuser. Watch out for permissions. GNU Parted 3.2 Using /home/guest/test/sg2000-riscv-2024-08-01-ubuntu-sd.img Welcome to GNU Parted! Type 'help' to view a list of commands. (parted)
以字节大小查看img镜像的分区情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#以字节大小查看 (parted) unit b (parted) print #信息输出如下 Model: (file) Disk /home/guest/test/sg2000-riscv-2024-08-01-ubuntu-sd.img: 795664896B Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 512B 16777727B 16777216B primary fat16 boot, lba 2 16777728B 795664895B 778887168B primary ext4
从上图可以看到img镜像的分区情况,其中Start下面的
512B
、16777728B
表示 为文件系统的分区起始地址, 因为我们要需改文件系统里面的内容(比如添加、删除、修改一些文件或者添加自己的app), 所以我们后面的操作需要用到此地址信息。使用quit
即可退出GNU Parted。创建一个空白目录,用于img镜像挂载,并将img镜像第二个分区挂载到该目录下,如下所示
1 2 3 4 5
#创建挂载目录 mkdir dir_img #根据第二分区起始地址进行挂载 sudo mount -o loop,offset=16777728 sg2000-riscv-2024-08-01-ubuntu-sd.img ./dir_img/
以上将sg2000-riscv-2024-08-01-ubuntu-sd.img文件挂载到dir_img目录, 具体路径以情况以电脑上的镜像路径及需要挂载的目录为准。
接着就可以往挂载了img镜像的目录下添加自己想要的脚本、程序等文件了。
1 2 3 4 5 6 7 8 9
#查看dir_img目录下的文件内容 ls ./dir_img/ #信息输出如下 bin data etc lib lost+found mnt proc run sdcard sys udisk var boot dev home lib64 media opt root sbin srv tmp usr #往/home/cat目录下添加需要添加的文件内容 touch dir_img/home/cat/hello.sh
此处添加往/home/cat目录添加了一个简单的hello.sh,具体路径和具体文件完全由用户决定。
修改完成之后回到刚刚的目录下取消挂载img镜像的文件系统,取消挂载之后在dir_img目录下的目录和文件 将会消失。
1
sudo umount ./dir_img
此时得到img镜像已经是修改过的img镜像了,将img镜像烧写到sd卡,并选择以sd卡启动, 在板子新烧录的系统/home/cat目录下便可以看到hello.sh文件。
修改eMMC镜像¶
提示
以下是旨在不编译SDK修改emmc镜像包中根文件系统,如果是能够编译SDK的用户,参考Ubuntu根文件系统章节修改即可。
将构建出来的sophon-image-build/ubuntu/ubuntu-rootfs.ext4, 或者使用资料网盘/7-SDK源码压缩包/根文件系统-用于编译镜像使用的根文件系统,解压然后拷贝到linux系统下。
创建一个空白目录,用于根文件系统镜像挂载,将ubuntu-rootfs.ext4镜像挂载到该目录下,如下所示
1 2 3 4 5
#创建挂载目录 mkdir dir_img #根据第二分区起始地址进行挂载 sudo mount -o loop,offset=0 ubuntu-rootfs.ext4 ./dir_img/
以上将ubuntu-rootfs.ext4文件挂载到dir_img目录, 具体路径以情况以电脑上的镜像路径及需要挂载的目录为准。
接着就可以往挂载了img镜像的目录下添加自己想要的脚本、程序等文件了。
1 2 3 4 5 6 7 8 9 10
#查看dir_img目录下的文件内容 ls ./dir_img/ #信息输出如下 bin dev ld-musl-riscv64v0p7_xthead.so.1 lib64v0p7_xthead mnt root sdcard tmp var boot etc lib lost+found opt run srv udisk data home lib64 media proc sbin sys usr #往/home/cat目录下添加需要添加的文件内容 touch dir_img/home/cat/hello.sh
此处添加往/home/cat目录添加了一个简单的hello.sh,具体路径和具体文件完全由用户决定。
修改完成之后回到刚刚的目录下取消挂载img镜像的文件系统,取消挂载之后在dir_img目录下的目录和文件 将会消失。
1
sudo umount ./dir_img
然后将修改好的ubuntu-rootfs.ext4拷贝到SDK源码的Ubuntu目录下,具体路径以情况以电脑上的镜像路径目录为准。
1 2
#拷贝到ubuntu目录下,-f参数是原来存在则覆盖 sudo cp -f ubuntu-rootfs.ext4 sophon-image-build/ubuntu/
借助SDK改变根文件系统格式,生成能够烧录的根文件系统,在sdk源码顶层目录执行以下命令,初始化编译环境和加载对应的emmc配置文件:
如果编译过sdk的执行以下命令:
1 2 3 4 5 6 7 8
#初始化编译环境,输入当前用户的密码 source build/cvisetup.sh #加载对应的板级配置文件 defconfig sg2000_lubancat_riscv_ubuntu_emmc #打包文件系统 pack_rootfs
生成的sophon-image-build/install/soc_sg2000_lubancat_riscv_ubuntu_emmc/rootfs.emmc 就是我们需要的文件系统。
如果没有编译过sdk的执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#初始化编译环境,输入当前用户的密码 source build/cvisetup.sh #加载对应的板级配置文件 defconfig sg2000_lubancat_riscv_ubuntu_emmc #创建目录 mkdir -p install/soc_sg2000_lubancat_riscv_ubuntu_emmc/rawimages #将build/Makefile的rootfs:ebf-ubuntu-rootfs-prepare注释掉,不打包编译的sdk的.ko和.so进文件系统 sed -i 's/^rootfs:ebf-ubuntu-rootfs-prepare/#rootfs:ebf-ubuntu-rootfs-prepare/' build/Makefile #打包文件系统 pack_rootfs #打包完成后恢复build/Makefile配置 sed -i 's/^#rootfs:ebf-ubuntu-rootfs-prepare/rootfs:ebf-ubuntu-rootfs-prepare/' build/Makefile
生成的sophon-image-build/install/soc_sg2000_lubancat_riscv_ubuntu_emmc/rootfs.emmc 就是我们需要的文件系统。
对生成的rootfs.emmc进行md5校验
1 2 3 4 5
#进行md5校验 md5sum install/soc_sg2000_lubancat_riscv_ubuntu_emmc/rootfs.emmc #信息输出如下 854a9456466cfe2f1384e7619519dfa0 install/soc_sg2000_lubancat_riscv_ubuntu_emmc/rootfs.emmc
将生成的rootfs.emmc替换到eMMC镜像包
修改eMMC镜像包的META目录中的metadata.txt,将生成的md5校验值修改到文件中。
最终使用该emmc镜像包刷到emmc中即可,启动系统后可以在/home/cat/目录下看到我们添加的hello.sh