384 подписчика
Как монтировать UBIFS раздел из файла в Linux на примере раздела recovery:
sudo modprobe ubifs # загружаем поддержку файловой системы UBIFS и сопутствующие модули
sudo modprobe nandsim first_id_byte=0xef second_id_byte=0xaa third_id_byte=0x22 fourth_id_byte=0x15 parts=10,12,12,2,2,32,288,36,4,512,1138
#ID байты лучше всего взять с NAND реального устройства, чтобы вручную не выставлять размер флешки, размер блока, размер стираемой области.
#parts= указывает размеры разделов NAND в erase блоках (для указанной NAND с камеры Яндекса это 0x20000 байт)
#в ENV у нас строка mtdparts=nand0:0x140000(CIS),0x180000(BOOT),0x180000(BOOT_BAK),0x40000(unifykey),0x40000(ENV),0x400000(rkernel),0x2400000(recovery),0x480000(KERNEL),0x80000(dtb),0x4000000(ubia),-(ubib)
#0x140000/0x20000=10, 0x180000/0x20000=12 и так далее
ls /dev/mtd* #проверяем, что появились виртуальные mtd устройства
cat /proc/mtd #проверяем размеры разделов в байтах, должны совпасть со строкой из ENV
#recovery у нас седьмой раздел, поэтому записываем его на /dev/mtd6 (отсчет от 0)
sudo dd if=./recovery of=/dev/mtd6 bs=1024
sudo ubiattach /dev/ubi_ctrl -m 6 --vid-hdr-offset 2048
# тут также указываем что подключаем 6ой MTD
# --vid-hdr-offset 2048 нужен только если мы получаем ошибку при монтировании. Значение 2048 берется из dmesg:
#ubi0 error: validate_ec_hdr [ubi]: bad VID header offset 2048, expected 512
ubinfo /dev/ubi0 # проверяем размер
sudo mkdir -p /mnt/ubi
sudo mount -t ubifs /dev/ubi0_0 /mnt/ubi
#делаем что требуется в папке /mnt/ubi
#размонтируем и записываем изменения назад в файл
sudo umount /mnt/ubi
sudo ubidetach /dev/ubi_ctrl -m 6 #тут тоже 6ой MTD
sudo dd if=/dev/mtd6 of=modified_recovery bs=1024 #размер указывать не надо, так как выше мы указали корректные размеры разделов
sudo rmmod nandsim #удаляем виртуальные устройства mtd
1 минута
28 июня