Ответ 1
Для флеш-устройств, NAND или NOR, нет таблицы разделов на самом устройстве. То есть вы не можете прочитать устройство в флэш-ридере и найти таблицу, которая показывает, сколько разделов находится на устройстве и где каждый раздел начинается и заканчивается. Существует только недифференцированная последовательность блоков. Это принципиальное различие между флеш-устройствами MTD и такими устройствами, как диски или устройства FTL, такие как MMC.
Таким образом, разбиение флеш-устройства в глазах наблюдателя, то есть либо на U-Boot, либо на ядре, а разделы "создаются" при запуске поискового устройства. Вот почему вы видите сообщение Creating 3 MTD partitions
. Это отражает тот факт, что флэш-разделы действительно существуют только в системе MTD работающего ядра, а не на самом устройстве флэш-памяти.
Это приводит к ситуации, когда U-Boot и ядро могут иметь разные определения флеш-разделов, что, по-видимому, произошло в случае OP.
В U-Boot вы определяете разделы флэш-памяти в переменной среды mtdparts
. В ядре Linux флэш-разделы определяются в следующих местах:
- В старых ядрах (например, 2.6.35 для i.MX28) разбиение фраз может быть жестко закодировано в
gpmi-nfc-mil.c
или другом исходном коде драйвера. (какой облом!). - В новых ядрах ядра с поддержкой дерева устройств вы можете определить MTD-парирования в дереве устройств
- В более новых ядрах обычно поддерживается определение раздела командной строки ядра с использованием командной строки, например
root=/dev/mmcblk0p2 rootwait console=ttyS2,115200 mtdparts=nand:6656k(all),1m(squash),-(jffs2)
Тип поддержки секционирования, который у вас есть в ядре, зависит от типа используемой вспышки, независимо от того, поддерживает ли он драйвер синтаксиса командной строки ядра и поддерживает ли ваше ядро дерево устройств.
В любом случае существует риск конфликта между U-Boot и разбиением ядра на флеш-память. Поэтому моя рекомендация - определить флэш-разделы в переменной U-Boot mtdparts
и передать это ядру в командной строке ядра U-Boot, предполагая, что ваше ядро поддерживает эту опцию.