基于openwrt本来的imx6,使用外部米尔科技提供的内核,
成功移植了openwrt到im6ul上。
并且通过修改uboot分区,成功挂载了rootfs_data作为overlay分区。
但是现在有问题:
1. 启动log提示
mount_root: no usable overlay filesystem found, using tmpfs overlay
2. 用logread还可以看到
Thu Jan 1 07:26:16 1970 daemon.err mount_root: no jffs2 marker found
Thu Jan 1 07:26:16 1970 kern.notice kernel: [ 30.074155] jffs2: jffs2_scan_eraseblock(): Node at 0x003e5ffc {0x1985, 0xe001, 0xe0011985) has invalid CRC 0x00000032 (calculated 0x7a744b16)
Thu Jan 1 07:26:16 1970 daemon.info mount_root: performing overlay whiteout
Thu Jan 1 07:26:16 1970 daemon.info mount_root: syncronizing overlay
Thu Jan 1 07:26:16 1970 daemon.err mount_root: failed to sync jffs2 overlay
Thu Jan 1 07:26:17 1970 daemon.info procd: - init complete -
3. 如果在/root目录创建文件,板子复位后,文件正常。
4. 如果修改/etc下的配置文件,板子复位后,文件被恢复成未修改之前状态。
rootfs用的是ubifs格式
本人linux新手,有高手指点下吗?
先谢了!
离线
测试发现,其实在/etc/config下创建新文件也是可以的,就是修改配置文件会被还原。
离线
make menuconfig 里面有一个sect 4k的选项去掉试一试?
离线
make menuconfig 里面有一个sect 4k的选项去掉试一试?
感谢答复。
我看了下,这个sect应该只是针对nor flash吧?
我这里是nandflash。
还有个现象,在etc下创建的文件,如果在硬件复位进入命令行后立刻查看,
没有这个新文件,但是过一会,新创建的文件就会出现。
但是被修改过的network配置文件,永远都不会出现修改的内容。
说明 overlay流程有问题?
离线
调试:
每次更新设备的固件,通过mfgtool下载内核和rootfs,并且把rootfs_data区域擦除。
启动开始preinit,mount_root检测rootfs_data分区开头,没发现jffs2标志,所有 不 挂载rootfs_data做为overlay。
过一会,流程会重新执行mount_root,并且,不知道哪个地方,会创建jffs2文件系统,但是,创建的位置是rootfs_data分区的最后1块。
重启后,mount_root还是检测rootfs分区的第一块,没有发现jffs2,,,,,就会重新创建一些配置文件,这些配置文件时间戳较新。
等过一会,jffs2起来,做为overlay的时候,就不会覆盖新文件,所以,配置文件被还原了。
那问题来了,如何解决?为什么会这样?哪里没配置对?
离线
请问你的问题解决了吗?我遇到了类似的问题,overlayfs最终是挂在tmpfs里面,而不是rootfs_data那个分区。以可交流下吗?
离线
这个问题我解决了,首先我的是squashfs(rootfs) + ubifs(rootfs_data),在nandflash上使用squashfs需要注意坏块的问题,所以需要ubiblock + squanshfs,内核打开CONFIG_MTD_UBI_BLOCK。然后/lib/preinit/80_mount_root脚本里面,在mount_root前加入对mtd6(rootfs_data)的操作:
ubiattach /dev/ubi_ctrl -m 6
[ $? -ne 0 ] && {
ubiformat -y /dev/mtd6
ubiattach /dev/ubi_ctrl -m 6
}
[ ! -c /dev/ubi0 ] && {
mknod /dev/ubi0 c 248 0
}
[ ! -d /sys/class/ubi/ubi0/ubi0_0 ] && { #when erase rootfs_ubi
ubimkvol /dev/ubi0 -N rootfs_data -S $(($(cat /sys/devices/virtual/ubi/ubi0/total_eraseblocks) - 100))
}
[ ! -c /dev/ubi0_0 ] && {
mknod /dev/ubi0_0 c 248 1
}
mount_root
离线