Определить, если раздел MTD отформатирован в UBI
Есть ли надежный способ узнать, был ли раздел MTD (например, /dev/mtd0) уже отформатирован в UBI? Я намерен провести такой тест в скрипте запуска (bash), который вызывает ubiattach только для разделов MTD, которые отформатированы в UBI. Для меня "blkid", похоже, не дает никакой информации о разделах mtd. Также я не смог найти соответствующую запись для этого в "/sys/class/mtd/".
2 ответа
Если у вас естьfile
команда доступна, вы можете сказать ей игнорировать, что/dev/mtdX
это специальное устройство (-s
флаг) и посмотрите на содержимое. Например, загрузчик u-boot или ядро (образ FIT)*:
$ file -s /dev/mtd0
/dev/mtd0: data
$ file -s /dev/mtd1
/dev/mtd1: data
загрузочный скрипт u-boot:
$ file -s /dev/mtd2
/dev/mtd2: u-boot legacy uImage, Boot Script, Linux/ARM, Script File (Not compressed), 2050 bytes, Wed Jun 15 20:58:22 2022, Load Address: 0x00000000, Entry Point: 0x00000000, Header CRC: 0xD0B28CF0, Data CRC: 0x7EBACC8D
и раздел MTD в формате UBI :
$ file -s /dev/mtd3
/dev/mtd3: UBI image, version 1
* использоватьcat ${DEVICE} > /tmp/tmp.img; dumpimage -l /tmp/tmp.img
исследовать изображения FIT
Вы можете использовать mtdinfo для проверки типа MTD:
# mtdinfo /dev/mtd0
mtd0
Name: 40000000.flash
Type: nor
Eraseblock size: 262144 bytes, 256.0 KiB
Amount of eraseblocks: 512 (134217728 bytes, 128.0 MiB)
Minimum input/output unit size: 1 byte
Sub-page size: 1 byte
Character device major/minor: 90:0
Bad blocks are allowed: false
Device is writable: true
# mtdinfo /dev/mtd2
mtd2
Name: rootfs
Type: ubi
Eraseblock size: 262016 bytes, 255.9 KiB
Amount of eraseblocks: 257 (67338112 bytes, 64.2 MiB)
Minimum input/output unit size: 1 byte
Sub-page size: 1 byte
Character device major/minor: 90:4
Bad blocks are allowed: false
Device is writable: true
Как показывает пример, /dev/mtd2
это уби!
И вы можете скачать форму mtd-utils http://www.linux-mtd.infradead.org/
mtdinfo находится в пакете, и вам нужно собрать его.