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中的保持一致,即同步修改內核的相關部分代碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章