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