Разделение Nand в u-boot

Я работаю над платой разработки Embedded ARM9. В том, что я хочу переставить мои nand разделы. Может ли кто-нибудь сказать мне, как это сделать?

В моей u-boot shell, если я даю команду mtdparts, которая дает следующую информацию.

Boardcon> mtdparts      

device nand0 <nandflash0>, # parts = 7

#: name                size            offset          mask_flags
0: bios                0x00040000      0x00000000      0
1: params              0x00020000      0x00040000      0
2: toc                 0x00020000      0x00060000      0
3: eboot               0x00080000      0x00080000      0
4: logo                0x00100000      0x00100000      0
5: kernel              0x00200000      0x00200000      0
6: root                0x03c00000      0x00400000      0

active partition: nand0,0 - (bios) 0x00040000 @ 0x00000000

defaults:
mtdids  : nand0=nandflash0 
mtdparts: mtdparts=nandflash0:[email protected](bios),128k(params),128k(toc),512k(eboot),1024k(logo),2m(kernel),-(root) 

Сообщение загрузки ядра показывает следующее:

 Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":
 0x000000000000-0x000000040000 : "Boardcon_Board_uboot"
 0x000000200000-0x000000400000 : "Boardcon_Board_kernel"
 0x000000400000-0x000003ff8000 : "Boardcon_Board_yaffs2"

Никто не может объяснить мне, какова связь между этими сообщениями. И какой из ядер или u-boot отвечает за создание разделов на nand flash?. Что касается, поскольку я знаю, что ядро ​​не создает разделы при каждой загрузке, но почему сообщение " Создание 3 MTD-разделов"?

Ответ 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, предполагая, что ваше ядро ​​поддерживает эту опцию.

Ответ 2

вы можете установить переменную среды mtdparts для этого в uboot, и ядро ​​использует это только в том случае, если вы передадите это в командной строке загрузки ядра, иначе она будет по умолчанию структурой nand в исходном коде ядра для вашей платформы, который в этом случае имеет 3 раздела MTD по умолчанию.