1

У меня есть система ARM, использующая buildroot-2011.05 - Linux 2.6.38.7. На плате используется флэш-память 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), но я думаю, что сообщение генерируется до того, как до него дойдет. В сети есть сообщения об ошибке UBIFS при перемонтировании R/W после ошибки, но это не тот случай, для начала он смонтирован только для чтения. Все, что я могу придумать, это поведение ядра по умолчанию для монтирования 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  

Любая помощь с благодарностью получена!

2 ответа2

1

Я отслеживал похожую проблему. Я указал root-файлы только для чтения в командной строке ядра и увидел, что UBIFS монтируется как доступный только для чтения во время запуска, но к тому времени, когда я попал в оболочку, он был загадочно доступен для чтения и записи.

В моем случае сценарий /etc/init.d/mountall, как оказалось, содержал строку

/bin/mount -o remount,noatime,nodiratime /dev/root /

В свою очередь, генерация этого скрипта контролировалась опцией конфигурации файловой системы в SDK моей платы. Детали могут различаться в зависимости от ваших настроек, но проверьте ваши сценарии инициализации и проверьте все параметры конфигурации, которые их генерируют.

0

Сделайте make menuconfig для buildroot.

Затем в меню «System Configuration» убедитесь, что «перемонтировать корневую файловую систему для чтения-записи во время загрузки» не выбрано.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .