flash分區的意義


所謂分區,就是說對Flash進行分塊管理。//如何方便地進行分塊管理(存儲設備類型和數量);


對Flash(相當於硬盤)的管理必須事先使用分區界定;


uboot中和kernel中都有個分區表,分區表就是我們在做系統移植時對Flash的整體管理分配方法。
有了這個界定后,我們在部署系統時按照分區界定方法來部署,uboot和kernel的軟件中也是按照這個分區界定來工作,就不會錯。

分區方法不是一定的,不是固定的,是可以變動的。
uboot必須從Flash起始地址開始存放(uboot分區的大小必須保證uboot肯定能放下,一般設計為512KB或者1MB(因為一般uboot肯定不足512KB,給再大其實也可以工作,但是浪費)


kernel:內核

rootfs:根文件系統

剩下的就是自由分區,一般kernel啟動后將自由分區掛載到rootfs下使用

uboot必須在Flash開頭,其他分區相對位置是可變的。


各分區的大小由系統移植工程師自己來定,一般定為合適大小(不能太小,太小了容易溢出;不能太大,太大了浪費空間)
分區在系統移植前確定好,在uboot中和kernel中使用同一個分區表。將來在系統部署時和系統代碼中的分區方法也必須一樣。



我們燒寫程序時,實際是將程序先燒寫到了內存當中,然后由內存搬運到NAND flash中


init=/linuxrc   init進程的位置。
console=ttySAC0  終端對應tty設備,因此,在引導系統前,串口驅動移植應當完成。


其實uboot的分區表就是個助記符一樣,甚至很多uboot壓根就沒有分區表,


內核就一定要有一張分區表,內核根據他們的位移來確定存儲區的范圍,
讀取分析在上面的結構,文件系統之類。

uboot一般可以將分區表傳入內核,通過bootargs參數,這樣內核啟動后就可以知道分區信息了。
找到uboot中對應你工程的源文件,里面應該有分區表,或者你直接搜分區表的名字~

內核通過bootargs找到文件系統
bootargs中的mtdblockx即代表分區,block1,2,3代表哪個分區
bootargs中的"root=/dev/mtdblockx"只是告訴內核,root fs從第x個(x=0,1,2...)MTD分區掛載
mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)
要想這個參數起作用,內核中的mtd驅動必須要支持,即內核配置時需要選上。

分區方法:
1) MTD層的分區
2) 通過U-boot傳遞給內核的命令行中的mtdparts=...
3) 其他可以讓內核知道分區信息的任何辦法,(內核默認的命令參數)

 

如果你是通過uboot的內核命令行給MTD層傳遞MTD分區信息,這種情況下,內核讀取到的分區信息始終和u-boot中的保持一致(推薦的做法)
如果你是把分區信息寫在內核源代碼MTD里定義好的方法,那最好保證它和u-boot中的保持一致,即同步修改uboot及內核的相關部分。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM