關於uboot如何找核心,核心如何找根檔案系統的個人見解
關於uboot如何找核心,核心如何找根檔案系統的個人見解
這幾天真算是讓這個辰漢給搞趴下了,唉。也沒有資料可以參考。一點資訊也不說,弄不弄就把Freescale的東東拿出來。而你的東東又跟原廠的不一樣。我真CAO了。
為了將這些映像搞進NAND中,哥我徹夜未眠啊。還有,那個網絡卡驅動現在都不好用。網路不行啊。
還是以i.mx53處理器為例吧。我估計別的也差不多。i.mx53根據GPIO引腳的高低電平決定從哪個外設引導。手冊上有說明的,就是幾個撥碼開關,通過上拉、下拉電阻搞個高低電平,讓處理器在復位時取樣,決定如何引導。
當從NAND引導後,應該uboot燒寫在Nand Flash的0x0起始地址處,所以起初先執行uboot
在uboot中有幾條重要的命令,如下:
1、mmc read 1 ${loadaddr} 0x800 0x1800;bootm
Mmc read 這條命令相對於nand read,而在i.mx53平臺下Nand Flash是通過MMC介面訪問的,在uboot中通過MMC實現了Nand Flash的訪問。
這條命令的作用是:讀取1
不過我就一直沒有搞明白0x1800/1024=6KB,核心不可能這麼小????
Bootm就是直接跳至記憶體${loadaddr}地址去執行了。
這個預設的${loadaddr}我在uboot-imx/include/configs/mx53_smd.h檔案中找到了,定義如下:
#define CONFIG_LOADADDR 0x70800000
查看了別的檔案mx53_arm2_ddr3.h,mx53_ard.h也是這個值。可能是官方定義的預設值。
還有一個地方不明白,不是說使用mkimage
2、setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk0p1 rootwaitrw ‘
這一條就是uboot傳輸給核心的引數,這些引數會存放在NAND Flash提前協商分割槽好的扇區上,核心啟動的時候會去特定的地址去讀取這些核心引數。
而這裡最最主要的也是 root=/dev/mmcblk0p1 ,這就是根檔案系統的掛載點。為什麼要這樣寫呢?這樣寫核心能找到根檔案系統嗎?為什麼不直接寫根檔案系統在NAND Flash的起始地址呢?
哈哈,問題就在這裡,我們都寫過LDD3中的hello world,都知道在linux一切都是檔案,只要是裝置,肯定就對應一個裝置檔案。而核心對檔案系統也不例外。核心把檔案系統也當成一個裝置,通過特定的裝置節點進行訪問。
那檔案系統都沒有掛載,光有一個裝置節點有什麼用?
哈哈,這個問題問得好。我都思考好長時間了,這裡告訴大家。還記得NANDFlash的分割槽嗎?我們將其劃分為好幾個區,bootloader,kernel,rootfs,userfs等。這些分割槽都對應於Nand Flash上的物理空間,核心掛載檔案系統是通過核心中的NAND Flash分割槽表進行的。當讀取完畢後,再通過核心引數root=/dev/mmcblk0p1裝置節點進行互動。
當然,這些只是理論上的,也是這幾天鼓搗i.mx53總結下來的,還是要奉勸幾位,買評估板一定得買原廠原貨,資料多,有技術支援。不要貪圖小便宜,買個仿造的,唉。IT屌絲男,傷不起啊。
晚上,繼續加班,搞網絡卡驅動。唉,怎麼就不好使呢。。。。。。。