要打包一个根文件系统,结果按网上的说法安装了 android-sdk-ext4-utils,sudo apt install e2fsprogs以及android-tools-fsutils,解果确实有了make_ext4fs,但是打包一直报错
error: build_directory_structure: can‘t set android permissions - built without android support
找了很多帖子都没解决,什么安装这个工具那个工具,还有deb包之类的方法,都没用。然后想要卸载也卸载不掉,说什么有依赖问题。然后想起以前第一次学Linux的时候也有make_ext4fs的内容,想着去借鉴借鉴。
没想还真的有,且看讯为教程搭建环境是这样写的:
因为讯为教程是基于ubuntu12.04的,而我的是ubuntu20.04的,不知道兼容不兼容,如果是静态链接的应该可以,动态链接的估计又有一堆依赖问题,不管怎么样只能试一试了。将这两个工具拷贝到ubuntu20.04,覆盖原来的make_ext4fs,然后打包文件系统,登登登登登登,成功了!
sudo make_ext4fs -s -l 314572800 -a root -L linux system.img rootfs
下面再详解一下这个命令,以后忘了可以查看:
sudo make_ext4fs -s -l 314572800 -a root -L linux system.img rootfs
-s 指以s模式制作镜像,固定的
-l 指定分区大小,314572800是十进制的数,单位是B,换成M就是300M,意思是这个是生成的镜像大小的上限值,如果实际的大小超出300M会打包镜像失败。
-a 指最终该文件系统会被挂载到哪里,有两个选择,后面是root,则是挂载到kernel的"/"目录下,如果后面是system,则是挂载到android的“system”目录下。
-L 是标签的意思,后面跟linux说明是基于linux的镜像。
system.img 是要生成的镜像的名字
rootfs 是你要打包的根文件系统的顶层文件夹
所以综上就是:
sudo make_ext4fs -s -l 分区大小 -a root或system -L linux 镜像名字 根文件系统文件夹
完~