我有一个使用 buildroot-2011.05 - Linux 2.6.38.7 的 ARM 系统。主板使用 NAND 闪存,为了解决 squashfs 不喜欢坏块的问题,我将根文件系统改为使用只读 UBIFS。
系统现在启动正常,但我很担心并且找不到有关重新挂载 UBI 卷 R/W 的内核消息来源:
[ 1.540000] UBIFS: read-only UBI device
[ 1.630000] UBIFS: recovery needed
[ 1.700000] UBIFS: recovery deferred
[ 1.710000] UBIFS: mounted UBI device 0, volume 0, name "rootfs"
[ 1.710000] UBIFS: mounted read-only
[ 1.720000] UBIFS: file system size: 14321664 bytes (13986 KiB, 13 MiB, 111 LEBs)
[ 1.720000] UBIFS: journal size: 9033728 bytes (8822 KiB, 8 MiB, 71 LEBs)
[ 1.730000] UBIFS: media format: w4/r0 (latest is w4/r0)
[ 1.740000] UBIFS: default compressor: lzo
[ 1.740000] UBIFS: reserved for root: 0 bytes (0 KiB)
[ 1.750000] VFS: Mounted root (ubifs filesystem) readonly on device 0:14.
[ 1.760000] devtmpfs: mounted on dev
[ 1.770000] Freeing init memory: 104K
**[ 2.060000] UBIFS: cannot re-mount R/W - UBI volume is R/O**
它使用 barebox init(无 sysvinit),但我认为在到达此位置之前会生成消息。网上有一些关于在发生错误后重新安装 R/W 时 UBIFS 错误的帖子,但事实并非如此,它一开始就以只读方式安装。我能想到的只是可能存在默认内核行为来安装 rootfs r/w。
内核启动参数:
console=ttymxc0,115200 rootfstype=ubifs ro ubi.mtd=3 root=ubi0:rootfs otg_mode=host lpj=514048 mtdparts=mxc_nand:256k(barebox)ro,128k(bareboxenv),3M(kernel),16M(rootfs)ro,16M(flash),-(misc)
inittab和fstab的相关部分:
::sysinit:/bin/mount -t proc proc /proc
::sysinit:/bin/mkdir -p /dev/pts
::sysinit:/bin/mount -a
proc /proc proc defaults 0 0
devpts /dev/pts devpts defaults,gid=5,mode=620 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/mtdblock4 /mnt/flash jffs2 noatime
任何帮助都感激不尽!
答案1
make menuconfig
为 buildroot执行。
然后在“系统配置”菜单中,确保未选择“在启动期间重新挂载读写根文件系统”。
答案2
我正在跟踪一个类似的问题。我在内核命令行上指定了一个只读的 rootfs,并在启动期间看到 UBIFS 以只读方式挂载,但当我进入 shell 时 / 却神秘地变为了读写。
就我而言,/etc/init.d/mountall脚本结果包含以下行
/bin/mount -o remount,noatime,nodiratime /dev/root /
反过来,该脚本的生成由我主板 SDK 中的文件系统配置选项控制。具体细节可能因您的设置而异,但请检查您的初始化脚本并检查生成它们的任何配置选项。