簡體   English   中英

在u-boot中進行Nand分區

[英]Nand partitioning in u-boot

我正在開發嵌入式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: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上​​創建partion? 至於我知道內核不是在每次啟動時創建分區,而是為什么消息“ 創建3個MTD分區 ”?

對於閃存設備,NAND或NOR,設備本身沒有分區表 也就是說,您無法在閃存讀取器中讀取設備,並找到一些表格,指示設備上有多少分區以及每個分區的開始和結束位置。 只有一個未分化的塊序列。 這是MTD閃存設備與磁盤或FTL等設備(如MMC)之間的根本區別。

因此,閃存設備的分區是旁觀者的眼睛,即U-Boot或內核,並且在旁觀者運行時“創建”分區。 這就是為什么你看到Creating 3 MTD partitions的消息。 它反映了閃存分區實際上只存在於正在運行的內核的MTD系統中而不是閃存設備本身的事實。

這導致U-Boot和內核可以具有不同的閃存分區定義的情況,這顯然是在OP的情況下發生的情況。

在U-Boot中,您可以在mtdparts環境變量中定義閃存分區。 在Linux內核中,flash分區在以下位置定義:

  1. 在較舊的內核中(例如i.MX28的2.6.35),flash分區可以用gpmi-nfc-mil.c或其他驅動程序源代碼進行硬編碼。 (多么糟糕!)。
  2. 在具有設備樹支持的較新主線內核中,您可以在設備樹中定義MTD分區
  3. 在較新的內核中,通常使用命令行支持內核命令行分區定義,例如root=/dev/mmcblk0p2 rootwait console=ttyS2,115200 mtdparts=nand:6656k(all),1m(squash),-(jffs2)

因此,內核中的分區支持類型取決於您使用的閃存類型,它的驅動程序是否支持內核命令行解析以及您的內核是否具有設備樹支持。

無論如何,U-Boot和閃存的內核分區之間存在固有的沖突風險。 因此,我的建議是在U-Boot mtdparts變量中定義flash分區,並將其傳遞給U-Boot內核命令行中的內核,假設您的內核支持此選項。

你可以設置mtdparts環境變量在uboot中這樣做,如果你在內核啟動命令行中傳遞它,內核只使用它,否則它將默認為你平台的內核源代碼中的nand分區結構,在這種情況下3 MTD分區默認。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM