在D1的tina上整上overlayfs
-
刚拿到机器,刷上了86的固件,哎呀,这,没有overlayfs? 这怎么行!
为了文件系统捣鼓起来更方便和各种OTA操作的舒服感觉,
所以,搞上了e2fsprogs
make menuconfig 一阵操作后,竟然报错了,还好有谷歌大法,直接找到问题:
https://bugs.gentoo.org/577946
于是自己加了个patch进去,一波烧录,起飞了
不敢独享,patch在这里
solve_major.patch直接扔到 package\utils\e2fsprogs\patches 下面就可以啦。
-
楼主666
Index: e2fsprogs-1.42.12/lib/blkid/devname.c =================================================================== --- e2fsprogs-1.42.12.orig/lib/blkid/devname.c 2014-07-03 22:33:48.000000000 +0800 +++ e2fsprogs-1.42.12/lib/blkid/devname.c 2022-01-27 22:54:42.879876367 +0800 @@ -37,7 +37,9 @@ #include <sys/mkdev.h> #endif #include <time.h> - +#ifdef HAVE_SYS_SYSMACROS_H +#include <sys/sysmacros.h> +#endif #include "blkidP.h" /* Index: e2fsprogs-1.42.12/lib/blkid/devno.c =================================================================== --- e2fsprogs-1.42.12.orig/lib/blkid/devno.c 2014-06-26 03:19:15.000000000 +0800 +++ e2fsprogs-1.42.12/lib/blkid/devno.c 2022-01-27 22:55:17.691876715 +0800 @@ -31,7 +31,9 @@ #if HAVE_SYS_MKDEV_H #include <sys/mkdev.h> #endif - +#ifdef HAVE_SYS_SYSMACROS_H +#include <sys/sysmacros.h> +#endif #include "blkidP.h" char *blkid_strndup(const char *s, int length) Index: e2fsprogs-1.42.12/lib/ext2fs/finddev.c =================================================================== --- e2fsprogs-1.42.12.orig/lib/ext2fs/finddev.c 2014-06-26 03:19:15.000000000 +0800 +++ e2fsprogs-1.42.12/lib/ext2fs/finddev.c 2022-01-27 22:55:46.043876998 +0800 @@ -31,7 +31,9 @@ #if HAVE_SYS_MKDEV_H #include <sys/mkdev.h> #endif - +#ifdef HAVE_SYS_SYSMACROS_H +#include <sys/sysmacros.h> +#endif #include "ext2_fs.h" #include "ext2fs.h" #include "ext2fsP.h" Index: e2fsprogs-1.42.12/lib/ext2fs/ismounted.c =================================================================== --- e2fsprogs-1.42.12.orig/lib/ext2fs/ismounted.c 2014-07-03 22:33:48.000000000 +0800 +++ e2fsprogs-1.42.12/lib/ext2fs/ismounted.c 2022-01-27 22:56:45.743877595 +0800 @@ -38,7 +38,9 @@ #endif /* HAVE_GETMNTINFO */ #include <string.h> #include <sys/stat.h> - +#ifdef HAVE_SYS_SYSMACROS_H +#include <sys/sysmacros.h> +#endif #include "ext2_fs.h" #include "ext2fs.h" Index: e2fsprogs-1.42.12/misc/mk_hugefiles.c =================================================================== --- e2fsprogs-1.42.12.orig/misc/mk_hugefiles.c 2014-08-27 21:26:49.000000000 +0800 +++ e2fsprogs-1.42.12/misc/mk_hugefiles.c 2022-01-27 22:57:24.915877986 +0800 @@ -34,6 +34,9 @@ #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> +#ifdef HAVE_SYS_SYSMACROS_H +#include <sys/sysmacros.h> +#endif #include <libgen.h> #include <limits.h> #include <blkid/blkid.h>
可是光改这个package\utils\e2fsprogs\patches也不行吧?
-
@memory
大佬你好,
这个显然,menuconfig 得开起来呀
patches 文件夹里,直接扔我的这个patch文件
重新mm e2fsprogs ,肯定成功呀。
目前你遇到啥问题呢? -
@memory
另外分区表 加入 rootfs_data 这个是必须的。
这里patch只是解决e2fsprogs编译不过的问题,因为overlayfs 第一次起来要用mkfs.ext4 工具 -
也就是说 overlayfs 文件系统是 ext2/ext4 对吗? 请问在哪里配置挂载这个 overlayfs 呢?
-
@memory
没错,ext4的
sys_partition.fex 需要修改
加上 如下:
[partition]
name = rootfs_data
size = 25600
user_type = 0x8000 -
@tevet
再厚脸请教一下, rootfs_data 在哪里指定生成 ext4 格式的呢? 他如何填充文件的呢?如何把 rootfs_data 挂载成 overlayfs 的呢? -
@memory
啊哈,
改ext4文件系统,可以参考
TinaLinux_系统配置说明文档.pdf指定rootfs_data 和 开机挂载策略在fstab
更多的可以参考
D1_Tina_Linux_存储_开发指南.pdf -
@tevet
谢谢楼主,原来如此,我明天试一试。 -
-
-
果然在这个文档 D1_Tina_Linux_存储_开发指南.pdf 找到 rootfs_data 了。
在 A100 的 SDK也找到这玩意,
target/allwinner/xxx-a3/base-files/etc/config/fstab
config 'global' option anon_swap '0' option anon_mount '0' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '1' config 'mount' option target '/boot-res' option device '/dev/by-name/boot-res' option options 'ro,sync' option enabled '1' config 'mount' option target '/mnt/UDISK' option device '/dev/by-name/UDISK' option options 'rw,async' option enabled '1' config 'mount' option target '/overlay' option device '/dev/by-name/rootfs_data' option options 'rw,sync' option enabled '1' config 'mount' option target '/mnt/SDCARD' option device '/dev/mmcblk1' option options 'rw,async' option enabled '1' config 'mount' option target '/mnt/SDCARD' option device '/dev/mmcblk1p1' option options 'rw,async' option enabled '1' config 'mount' option target '/mnt/exUDISK' option device '/dev/sda1' option options 'rw,async' option enabled '1' config 'mount' option target '/mnt/exUDISK' option device '/dev/sda' option options 'rw,async' option enabled '1'
./device/config/chips/xxx/configs/a3/linux/sys_partition.fex
;--------------------------------------------------------------------------------------------------- ; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串 ;--------------------------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------------------------- ; 固件下载参数配置 ;--------------------------------------------------------------------------------------------------- ;*************************************************************************************************** ; mbr的大小, 以Kbyte为单位 ;*************************************************************************************************** [mbr] size = 512 ;*************************************************************************************************** ; 分区配置 ; ; ; partition 定义范例: ; [partition] ; //表示是一个分区 ; name = USERFS2 ; //分区名称 ; size = 16384 ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T ; downloadfile = "123.fex" ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径 ; keydata = 1 ; //私有数据分区,重新量产数据将不丢失 ; encrypt = 1 ; //采用加密方式烧录,将提供数据加密,但损失烧录速度 ; = ? ; //私有用法 ; verify = 1 ; //要求量产完成后校验是否正确 ; ; 注:1、name唯一, 不允许同名 ; 2、name最大12个字符 ; 3、size = 0, 将创建一个无大小的空分区 ; 4、为了安全和效率考虑,分区大小最好保证为16M字节的整数倍 ;*************************************************************************************************** [partition_start] [partition] name = boot-resource size = 512 downloadfile = "boot-resource.fex" user_type = 0x8000 [partition] name = env size = 1024 downloadfile = "env.fex" user_type = 0x8000 [partition] name = env-redund size = 1024 downloadfile = "env.fex" user_type = 0x8000 [partition] name = boot size = 30720 downloadfile = "boot.fex" user_type = 0x8000 [partition] name = rootfs size = 131072 downloadfile = "rootfs.fex" user_type = 0x8000 [partition] name = rootfs_data ;size = 61440 size = 8192 user_type = 0x8000 [partition] name = private size = 1024 user_type = 0x8000 ; recovery分区说明 ; 如果启用了OTA升级,默认以boot_initramfs.img作为recovery.fex,否则recovery.fex为空 [partition] name = recovery size = 32768 downloadfile = "recovery.fex" user_type = 0x8000 ;[partition] ; name = misc ; size = 1024 ; user_type = 0x8000 [partition] name = UDISK user_type = 0x8100
rootfs_data 只有 size,没有 downloadfile。
-
tigger@ubuntu:/opt/D1$ sudo unsquashfs /opt/D1/tina_d1_open/out/d1-nezha/image/rootfs.fex Parallel unsquashfs: Using 8 processors 1099 inodes (1149 blocks) to write [==============================================================================================================================================|] 1149/1149 100% created 796 files created 130 directories created 302 symlinks created 1 devices created 0 fifos tigger@ubuntu:/opt/D1/$
tigger@ubuntu:/opt/D1$ ls -l squashfs-root/ total 80 drwxr-xr-x 7 root root 4096 Dec 24 13:39 base drwxr-xr-x 2 root root 4096 Dec 24 13:39 bin drwxr-xr-x 2 root root 4096 Dec 24 13:39 dev drwxr-xr-x 20 root root 4096 Dec 24 13:39 etc drwxr-xr-x 10 root root 4096 Dec 24 13:39 lib drwxr-xr-x 2 root root 4096 Dec 24 13:39 lib64xthead drwxr-xr-x 6 root root 4096 Dec 24 13:39 mnt drwxr-xr-x 2 root root 4096 Dec 24 13:39 overlay drwxr-xr-x 2 root root 4096 Dec 24 13:39 proc -rwxrwxr-x 1 root root 78 Dec 24 13:39 rdinit drwxr-xr-x 3 root root 4096 Dec 24 13:39 riscv64-unknown-linux-gnu drwxrwxr-x 2 root root 4096 Dec 24 13:39 rom drwxr-xr-x 2 root root 4096 Dec 24 13:39 root drwxr-xr-x 2 root root 4096 Dec 24 13:39 sbin drwxr-xr-x 3 root root 4096 Dec 24 13:39 spec drwxr-xr-x 4 root root 4096 Dec 24 13:39 stress drwxr-xr-x 2 root root 4096 Dec 24 13:39 sys drwxrwxrwt 2 root root 4096 Dec 24 13:39 tmp drwxr-xr-x 9 root root 4096 Aug 14 18:32 usr lrwxrwxrwx 1 root root 4 Dec 24 13:39 var -> /tmp drwxr-xr-x 2 root root 4096 Dec 24 13:39 www tigger@ubuntu:/opt/D1$
解压 rootfs.fex (squashfs 文件格式) 到默认目录 squashfs-root
也可以mount 挂载 squashfs 文件系统:
$sudo mount -o loop,rw /opt/D1/tina_d1_open/out/d1-nezha/image/rootfs.fex /tmp/aaa/
但是是只读的,如果想重新打包,那要先解压,再打包:
https://sleeplessbeastie.eu/2012/05/27/how-to-modify-squashfs-image/ -
感谢楼主, 在d1 tina 2.0上面搞定了
不用修改 e2fsprogs
只要修改这几个文件:
device/config/chips/d1-h/configs/nezha/sys_partition.fex target/allwinner/d1-h-nezha/base-files/etc/config/fstab target/allwinner/d1-h-nezha/defconfig
打包备份:
tar cvf /mnt/hgfs/D/tina_d1_open_v2_for_ext4_overlay.tar device/config/chips/d1-h/configs/nezha/sys_partition.fex target/allwinner/d1-h-nezha/base-files/etc/config/fstab target/allwinner/d1-h-nezha/defconfig
这里下载: tina_d1_open_v2_for_ext4_overlay.tar
运行效果:
root@TinaLinux:/# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 17152 17152 0 100% /rom devtmpfs 503924 0 503924 0% /dev tmpfs 508116 36 508080 0% /tmp /dev/by-name/UDISK 176576 157240 19336 89% /overlay overlayfs:/overlay 176576 157240 19336 89% / root@TinaLinux:/# root@TinaLinux:/# root@TinaLinux:/# ls /overlay/upper/ aaa etc opt root@TinaLinux:/# root@TinaLinux:/# root@TinaLinux:/# mount /dev/root on /rom type squashfs (ro,noatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=503924k,nr_inodes=125981,mode=755) proc on /proc type proc (rw,nosuid,nodev,noexec,noatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime) /dev/by-name/UDISK on /overlay type ubifs (rw,relatime,assert=read-only,ubi=0,vol=8) overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600,ptmxmode=000) debugfs on /sys/kernel/debug type debugfs (rw,noatime) none on /sys/kernel/config type configfs (rw,relatime) adb on /dev/usb-ffs/adb type functionfs (rw,relatime) root@TinaLinux:/# root@TinaLinux:/#
-
-
-
-
-
v2.0 果然修复了这个问题。
-
@uuuuid 好!!!
-
@whycan
今天复盘发现前面修改的不到位,[ 4.728131] random: procd: uninitialized urandom read (4 bytes read) formating /dev/by-name/UDISK to ext4 mkfs.ext4: error while loading shared libraries: libext2fs.so.2: cannot open shared object file: No such file or directo formating /dev/by-name/rootfs_data to ext4 mkfs.ext4: error while loading shared libraries: libext2fs.so.2: cannot open shared object file: No such file or directo [ 4.922229] mount_root: mounting /dev/root [ 4.929631] mount_root: loading kmods from internal overlay
提示缺库: libext2fs.so.2
修改文件 package/utils/e2fsprogs/Makefile:
$ repo diff package/utils/e2fsprogs/Makefile project package/ diff --git a/utils/e2fsprogs/Makefile b/utils/e2fsprogs/Makefile index 837e77dd..5a99a673 100644 --- a/utils/e2fsprogs/Makefile +++ b/utils/e2fsprogs/Makefile @@ -173,6 +173,8 @@ define Package/e2fsprogs/install $(LN) e2fsck $(1)/usr/sbin/fsck.ext4 $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/libe2p.so.* $(1)/usr/lib/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libext2fs.so.2* $(1)/usr/lib/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcom_err.so.2* $(1)/usr/lib/ $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_DIR) $(1)/lib/functions/fsck $(INSTALL_DATA) ./files/e2fsck.sh $(1)/lib/functions/fsck/
启动格式化正常:
Writing superblocks and filesystem accounting information: 0/15 done formating /dev/by-name/rootfs_data to ext4 mke2fs 1.46.4 (18-Aug-2021) [ 10.606705] random: mkfs.ext4: uninitialized urandom read (16 bytes read) [ 10.614536] random: mkfs.ext4: uninitialized urandom read (16 bytes read) Creating filesystem with 12800 1k blocks and 3200 inodes Filesystem UUID: 53820334-39e9-4e0f-87dc-f4d06ba4c2f7 Superblock backups stored on blocks: 8193 Allocating group tables: done Writing inode tables: done Creating journal (1024 blocks): done Writing superblocks and filesystem accounting information: done [ 10.971936] mount_root: mounting /dev/root [ 10.977198] mount_root: loading kmods from internal overlay [ 11.156955] block: attempting to load /etc/config/fstab e2fsck 1.46.4 (18-Aug-2021) /dev/by-name/UDISK: clean, 11/115920 files, 16835/462727 blocks [ 11.328707] EXT4-fs (mmcblk0p9): mounted filesystem with ordered data mode. Opts: [ 11.352305] mount_root: switched to extroot [ 11.369502] procd: - early - [ 11.373087] procd: - watchdog -
挂载正常:
root@TinaLinux:/# mount /dev/root on /rom type squashfs (ro,noatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=504672k,nr_inodes=126168,mode=755) proc on /proc type proc (rw,nosuid,nodev,noexec,noatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime) /dev/by-name/UDISK on /overlay type ext4 (rw,relatime) overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600,ptmxmode=000) debugfs on /sys/kernel/debug type debugfs (rw,noatime) none on /sys/kernel/config type configfs (rw,relatime) adb on /dev/usb-ffs/adb type functionfs (rw,relatime) /dev/mmcblk0p1 on /mnt/SDCARD type vfat (rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
读写正常:
root@TinaLinux:/# mkdir -p /opt/ root@TinaLinux:/# root@TinaLinux:/# touch /opt/test.txt root@TinaLinux:/# root@TinaLinux:/#
root@TinaLinux:/# ls /overlay/upper/ etc opt root@TinaLinux:/# root@TinaLinux:/# root@TinaLinux:/# ls /overlay/upper/opt/ test.txt
打包命令:
tar cvf /mnt/hgfs/D/tina_d1_open_v2_for_ext4_overlay_20220320A.tar device/config/chips/d1-h/configs/nezha/sys_partition.fex target/allwinner/d1-h-nezha/base-files/etc/config/fstab target/allwinner/d1-h-nezha/defconfig package/utils/e2fsprogs/Makefile
-
@whycan
生成的img文件,烧录到 TF卡, 是 squashfs + overlayfs(ext4),
烧录到 spi nand, 也是 squashfs + overlayfs(ubifs)
一个固件通吃!
-
@whycan 在 在D1的tina上整上overlayfs 中说:
d1-h-nezha/base-files/etc/config/fstab
sdk2.0中,d1s-nezha/base-files/etc/config/目录中没有fstab 文件,
按步骤测试了下,没有fstab文件,文件系统也能正常工作,支持可写,不知是否会有其它问题 -
@jmhh247
大佬,这个2.0 你是否修改了procd,若是使用procd时要这个fstab 的,
如果使用busybox init 则不需要。 -
@tevet
请问怎么看是用 procd 还是 busybox init 呢? -
-
@memory menuconfig 里边可以选择 system init
-
-
-
-
-
@tevet
报这个错误是什么原因呢 -
@how0723 kernel启用ext2,或者换jffs2
-
@how0723
e2fsprogs 这个包没有编译通过.make menuconfig勾选 e2fsprogs之后,
然后
执行 make package/utils/e2fsprogs/compile 编译
执行make package/utils/e2fsprogs/install安装 -
@whycan 在source和 lunch 基础上 可以直接 cd package/utils/e2fsprogs 然后mm -B
-
-
@whycan
这是咋回事啊 -
-
@whycan 解决了,ext2 要打开
-
@whycan 为什么我调整分区大小,却没有任何变化
应该怎么调整?
-
@whycan Hello 晕哥,
我按照你的方法,将这几个文件copy到相应目录,重新编译,mount的log如下:
root@TinaLinux:/# mount /dev/root on / type ext4 (ro,noatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=244408k,nr_inodes=61102,mode=755) proc on /proc type proc (rw,nosuid,nodev,noexec,noatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime) cgroup on /sys/fs/cgroup type cgroup (rw,nosuid,nodev,noexec,relatime,blkio,devices,freezer,pids) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600,ptmxmode=000) debugfs on /sys/kernel/debug type debugfs (rw,noatime) none on /sys/kernel/config type configfs (rw,relatime) adb on /dev/usb-ffs/adb type functionfs (rw,relatime) /dev/mmcblk0p1 on /mnt/SDCARD type vfat (rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
发现没有overlayfs, 文件系统还是只读,这里我用的buildroot的genimage方法生成的固件。
请帮忙看一下,是什么问题?
-
-
-
-
@whycan 在 在D1的tina上整上overlayfs 中说:
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libext2fs.so.2* $(1)/usr/lib/
-
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcom_err.so.2* $(1)/usr/lib/
我按照你的写法,编译不过,我在下面复制了 ,就可以通过编译,看不出来是什么问题。
-
-
@tevet
“86”固件是指什么? -
@copper 喔,是个 D1 的开发板 RV86, 带屏幕的。 86盒。不是AE86,不开车。
-
@uuuuid 哈喽,这个对比图哪边是v2.0呀?左边还是右边?
-
没有一份完整的资料吗?谢谢
-
@kevin_allwinner 下载D1 的最新TINA 已经完美适配了。
这个是陈年老帖了 -
@tevet 好的,谢谢,我已经弄出来了,我用的D1改的T113系统,确实小改下就可以了
-
@kevin_allwinner 大佬,怎么小改。用哪家配置的sdk
-
@how0723 老哥,在哪里打开,能说下嘛
-
@qinhao4832 文档:D1(改T113)Tina 系统解决系统只读问题....
链接:http://note.youdao.com/noteshare?id=5278bec1c63e459ec38de1ee8fe86919&sub=3D0097C0B2034663AD93C73DAB922AD2
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号