Используя Linux, я могу использовать необработанный доступ к NAND или доступ к файлам через файловую систему. Итак, когда мне нужно знать, где на самом деле находится мой файл в NAND, что мне делать? Я не нашел ни одной утилиты, обеспечивающей эту функцию. Более того, я не могу обнаружить никакой возможности этого, кроме взлома ядра с кучей «принтков» (это, я думаю, нехороший способ). Кто-нибудь может просветить меня по этому поводу? (Я использую файловые системы YAFFS2 и JFFS2)
Как получить реальное смещение файла в NAND по имени файла?
Ответы (1)
Вы можете сделать копию любого раздела с помощью nanddump
. Перенесите дамп этого раздела на ПК. Для монтирования разделов на ПК можно использовать утилиту nandsim.
modprobe nandsim first_id_byte=0x2c second_id_byte=0xda \
third_id_byte=0x90 fourth_id_byte=0x95 parts=2,64,64
flash_erase /dev/mtd3 0 0
ubiformat /dev/mtd3 -f rootfs.ubi
Эта команда эмулирует флэш-память Micron 256 МБ NAND с четырьмя разделами. Если вы просто захватываете один раздел, а не все устройство, не устанавливайте части. Вы также можете выполнить nanddump
для каждого раздела, а затем объединить их все. Этот код нацелен на mtd3 с разделом UbiFs. Для JFFS2 или YAFFS2 вы можете попробовать nandwrite
или другую подходящую утилиту для перепрошивки на ПК.
Как получить реальное смещение файла в NAND по имени файла?
Файлы могут занимать несколько секторов NAND и почти никогда не следуют друг за другом. Нет большого преимущества в хранении файловых данных вместе, так как нет головки диска, для поиска которой требуется физическое время. Некоторые флеш-памяти имеют чуть более высокую эффективность при последовательном чтении; еще одна флэш-память даст лучшую производительность для чтения из другого блока стирания.
Я бы включил debug либо на уровне MTD, либо в файловой системе. В действующей системе положение файла во флэш-памяти может со временем меняться, даже если он не записан. Это активное выравнивание износа.