2011-12-21 22 views
10

Sto lavorando su una scheda di sviluppo ARM9 incorporata. In questo voglio riorganizzare le mie partizioni nand. Qualcuno può dirmi come farlo?Partizionamento Nand in u-boot

Nella mia shell u-boot se do il comando mtdparts che fornisce le seguenti informazioni.

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) 

messaggio di avvio del kernel mostra il seguente:

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" 

Chiunque può per favore mi spieghi qual è il rapporto tra questi due messaggi. E quale kernel o u-boot è responsabile della creazione di partions su nand flash ?. Per quanto so che il kernel non sta creando partizioni su ogni avvio, ma perché il messaggio "Creazione di 3 partizioni MTD"?

risposta

1

è possibile impostare la variabile di ambiente mtdparts in modo tale da farlo in uboot, e il kernel lo usa solo se lo si passa nella riga di comando del kernel, altrimenti verrà impostato di default sulla struttura di partizione nand nel codice sorgente del kernel per il proprio piattaforma, che in questo caso è la partizione 3 MTD predefinita.

+0

Grazie per la risposta. Ma sto ricevendo il messaggio ** Creazione di 3 partizioni MTD ** su ogni avvio. Il kernel altera e partizioni su ogni avvio? Se voglio modificare nand partizioni tramite u-boot quale comando dovrei uso? – yuvaeasy

+1

Mi dispiace dirlo ma, puoi sempre usare Google. http://www.denx.de/wiki/DULG/UBootCmdGroupFlash questo è quello che ho trovato facilmente sul sito ufficiale u-boot tramite google, potresti voler leggere la tua comprensione di u-boot. – andycjw

+0

Grazie proverò a capire. – yuvaeasy

20

Per i dispositivi flash, NAND o NOR, non è presente la tabella delle partizioni sul dispositivo stesso. Cioè, non è possibile leggere il dispositivo in un lettore flash e trovare una tabella che indica quante partizioni sono presenti sul dispositivo e dove inizia e termina ciascuna partizione. C'è solo una sequenza indifferenziata di blocchi. Questa è una differenza fondamentale tra dispositivi flash MTD e dispositivi come dischi o dispositivi FTL come MMC.

Il partizionamento del dispositivo flash è quindi negli occhi di beholder, ovvero U-Boot o il kernel, e le partizioni vengono "create" quando lo spettatore esegue. Ecco perché vedi il messaggio Creating 3 MTD partitions. Riflette il fatto che le partizioni flash esistono solo nel sistema MTD del kernel in esecuzione, non sul dispositivo flash stesso.

Questo porta a una situazione in cui U-Boot e il kernel possono avere definizioni diverse delle partizioni flash, che è apparentemente ciò che è accaduto nel caso dell'OP.

In U-Boot, si definiscono le partizioni flash nella variabile di ambiente mtdparts. Nel kernel di Linux, le partizioni flash sono definite nei seguenti luoghi:

  1. in vecchi kernel (ad esempio 2.6.35 per i.MX28) il partizionamento del flash potrebbe essere hard-coded in gpmi-nfc-mil.c o altro codice sorgente del driver. (che peccato!).
  2. Nei kernel mainline più recenti con supporto albero dei dispositivi, è possibile definire le paritions MTD nella struttura dei dispositivi
  3. Nei kernel più recenti di solito c'è il supporto per la definizione delle partizioni linea di comando del kernel tramite riga di comando come root=/dev/mmcblk0p2 rootwait console=ttyS2,115200 mtdparts=nand:6656k(all),1m(squash),-(jffs2)

Il tipo di supporto per il partizionamento che si ha nel kernel dipende quindi dal tipo di flash che si sta utilizzando, dal fatto che il driver supporti l'analisi della riga di comando del kernel e se il kernel abbia il supporto della struttura dei dispositivi.

In ogni caso, esiste un rischio intrinseco di conflitto tra U-Boot e il partizionamento del kernel del flash.Pertanto, il mio consiglio è di definire le partizioni flash nella variabile U-Boot mtdparts e di passarle al kernel nella riga di comando del kernel U-Boot, assumendo che il proprio kernel supporti questa opzione.

+0

L'affermazione che non esiste una tabella delle partizioni sui dispositivi flash è falsa. I dispositivi che utilizzano chip Tegra, OMAP o Qualcomm possono avere GPT nella memoria flash. – Melab

+1

@Melab: i SoC di cui si parla supportano le periferiche MMC, eMMC o SD. Sebbene di solito si basino sulla tecnologia flash, non sono uguali a flash raw o MTD su cui l'OP chiede. Il comando 'mtdparts' di U-Boot che l'OP chiede riguardo si riferisce al flash NAND o NOR grezzo, non al flash" gestito "come MMC, eMMC o SD. Puoi trovare una breve descrizione delle differenze nei comandi U-Boot in http://processors.wiki.ti.com/index.php/Linux_Core_U-Boot_User%27s_Guide#Using_NAND. –

+0

Melab ha torto Jonathan hai ragione. MTD Flash non ha tabella delle partizioni e sì le partizioni sono "definite" attraverso la stringa mtdparts per u-boot e il kernel linux o attraverso .dts (e quindi .dtb). Alcuni controller potrebbero essere diversi ma questa sembra essere la mia esperienza qui su Sunxi linux e chip Allwinner. –

Problemi correlati