Для флэш-устройств, NAND или NOR, на самом устройстве нет таблицы разделов . То есть вы не можете прочитать устройство во флэш-ридере и найти таблицу, в которой указано, сколько разделов на устройстве и где начинается и заканчивается каждый раздел. Существует только недифференцированная последовательность блоков. Это принципиальное различие между флэш-устройствами MTD и устройствами, такими как диски, или устройствами FTL, такими как MMC.
Поэтому разделение флеш-устройства находится в глазах смотрящего, то есть, либо U-Boot, либо ядро, и разделы «создаются» во время работы смотрящего. Вот почему вы видите сообщение Creating 3 MTD partitions
. Это отражает тот факт, что разделы флэш-памяти действительно существуют только в системе MTD работающего ядра, а не на самом устройстве флэш-памяти.
Это приводит к ситуации, в которой U-Boot и ядро могут иметь разные определения разделов флэш-памяти, что, очевидно, и произошло в случае OP.
В U-Boot вы определяете разделы флэш-памяти в переменной среды mtdparts
. В ядре Linux разделы flash определены в следующих местах:
- В старых ядрах (например, 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 и разбиением ядра на флэш-память. Поэтому я рекомендую определить разделы flash в переменной U-Boot mtdparts
и передать это ядру в командной строке ядра U-Boot, предполагая, что ваше ядро поддерживает эту опцию.