[英]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分區在以下位置定義:
gpmi-nfc-mil.c
或其他驅動程序源代碼進行硬編碼。 (多么糟糕!)。 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.