Nand разделение в U-Boot - PullRequest
       60

Nand разделение в U-Boot

9 голосов
/ 21 декабря 2011

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

В моей оболочке u-boot, если я дам команду 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:256k@0(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 »?

Ответы [ 2 ]

22 голосов
/ 15 января 2014

Для флэш-устройств, NAND или NOR, на самом устройстве нет таблицы разделов . То есть вы не можете прочитать устройство во флэш-ридере и найти таблицу, в которой указано, сколько разделов на устройстве и где начинается и заканчивается каждый раздел. Существует только недифференцированная последовательность блоков. Это принципиальное различие между флэш-устройствами MTD и устройствами, такими как диски, или устройствами FTL, такими как MMC.

Поэтому разделение флеш-устройства находится в глазах смотрящего, то есть, либо U-Boot, либо ядро, и разделы «создаются» во время работы смотрящего. Вот почему вы видите сообщение Creating 3 MTD partitions. Это отражает тот факт, что разделы флэш-памяти действительно существуют только в системе MTD работающего ядра, а не на самом устройстве флэш-памяти.

Это приводит к ситуации, в которой U-Boot и ядро ​​могут иметь разные определения разделов флэш-памяти, что, очевидно, и произошло в случае OP.

В U-Boot вы определяете разделы флэш-памяти в переменной среды mtdparts. В ядре Linux разделы flash определены в следующих местах:

  1. В старых ядрах (например, 2.6.35 для i.MX28) разделение флэш-памяти может быть жестко задано в gpmi-nfc-mil.c или другом исходном коде драйвера. (какой облом!).
  2. В более новых основных ядрах с поддержкой дерева устройств вы можете определить MTD-разделы в дереве устройств
  3. В более новых ядрах обычно поддерживается определение раздела командной строки ядра с использованием командной строки, такой как root=/dev/mmcblk0p2 rootwait console=ttyS2,115200 mtdparts=nand:6656k(all),1m(squash),-(jffs2)

Тип поддержки разбиения, который вы имеете в ядре, зависит от типа используемой вами флэш-памяти, поддерживает ли ее драйвер синтаксический анализ командной строки ядра и поддерживает ли ваше ядро ​​дерево устройств.

В любом случае существует риск конфликта между U-Boot и разбиением ядра на флэш-память. Поэтому я рекомендую определить разделы flash в переменной U-Boot mtdparts и передать это ядру в командной строке ядра U-Boot, предполагая, что ваше ядро ​​поддерживает эту опцию.

1 голос
/ 22 декабря 2011

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

...