1. 程式人生 > >uboot和kernel中關於nand分割槽的定義

uboot和kernel中關於nand分割槽的定義

系統的NAND FLASH分割槽依賴於u-boot和Linux核心兩方面的設定。

U-Boot中的NAND分割槽

位置:include/configs/開發板.h;

Kernel中的NAND FLASH分割槽

位置:linux-X.Y.Z/arch/arm/mach-xxxx/board-xxxxx.c中static struct mtd_partition _nand_partition[]結構體;

1.如何對nand 分割槽。修改mtdparts環境變數就可以了麼?

對於目前的U-boot而言,是的.而且, 設定了mtdparts變數之後,你可以在nand read/write/erase命令中直接使用分割槽的名字而不必指定分割槽的偏移位置.

set bootargs noinitrd console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2  mtdparts=nand_flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.jffs2),30m(root.yaffs)


2 核心通過bootargs找到檔案系統,bootargs中的mtdblockx即代表分割槽,block1,2,3代表哪個分割槽是如何確定的。

事實上,bootargs中的"root=/dev/mtdblockx"只是告訴核心,root fs從第x個(x=0,1,2...)MTD分割槽掛載,mtdblock0對應第一個分割槽,mtdblock1對應第二個分割槽,以此類推.至於這個分割槽對應MTD device(NAND Flash)的哪一段範圍,取決於核心讀到的MTD分割槽資訊,這個分割槽資訊可以通過:

1) 寫死在MTD層的NAND Controller驅動或者核心其他部分程式碼裡

2) 通過U-boot傳遞給核心的命令列中的mtdparts=...部分解析得出,解析的規則同u-boot中mtdparts變數的賦值規則

3) 其他可以讓核心知道分割槽資訊的任何辦法


3 在u-boot中給nand分割槽後是否要對應修改kernel的程式碼?

如果你用的是通過核心命令列給MTD層傳遞u-boot中的MTD分割槽資訊,那是不需要的,在這種情況下,核心讀取到的分割槽資訊始終和u-boot中的保持一致(推薦的做法)

如果你用的是把分割槽資訊寫死在核心原始碼裡的方法,那最好保證它和u-boot中的保持一致,即同步修改核心的相關部分程式碼