U-Boot從NAND Flash啟動(dòng)的實(shí)現
摘要:U-Boot不能從NAND Flash啟動(dòng)給應用帶來(lái)些不便,因此修改U-Boot使其支持從NAND Flash啟動(dòng)。分析了U-Boot啟動(dòng)流程的兩個(gè)階段及實(shí)現從NAND Flash啟動(dòng)的原理和思路,并根據NAND Flash的物理結構和存儲特點(diǎn),增加U-Boot對NAND Flash的操作支持,從而完成把存儲在NAND Flash上的U-Boot代碼復制到SDRAM中執行,實(shí)現從NAND Flash的啟動(dòng)。修改過(guò)后的U-Boot可以直接從NAND Flash啟動(dòng),給應用帶來(lái)便利。
關(guān)鍵詞:U-Boot;NAND Flash;Boofloader;S3C2440;移植
Bootloader引導裝載程序是系統上電后運行的第一段程序,其作用是完成基本的硬件初始化工作,所以引導裝載程序跟硬件有著(zhù)緊密的聯(lián)系。因此必須根據開(kāi)發(fā)板的硬件配置對引導裝載程序進(jìn)行修改才可以使其運行起來(lái)。隨著(zhù)嵌入式系統的復雜化,大容量數據存儲的NAND Flash的應用會(huì )越來(lái)越廣泛,同時(shí)U-Boot是功能最豐富的Bootloader,但遺憾的是U-Boot不支持從NAND Flash啟動(dòng)。所以如果能實(shí)現U-Boot從NAND Flash啟動(dòng)的話(huà)將會(huì )給應用帶來(lái)很大的方便。本文討論修改U-Boot使其支持從NAND Flash啟動(dòng).采用基于S3C2440的開(kāi)發(fā)板。
1 U-Boot簡(jiǎn)介及流程分析
U-Boot,全稱(chēng)universal boot loader,是遵循GPL條款的開(kāi)放源代碼項目??梢砸龑Ф喾N操作系統,支持多種架構的CPU。它支持如下操作系統:Linux、NetBSD、VxWorks等,支持如下架構的CPU:PowerPC、MIPS、X86、ARM、NIOS、XSeale等,同時(shí)支持NFS掛載,是一個(gè)功能豐富的BootLoader。它的整個(gè)程序框架清晰,易于移植,許多設計人員將自己的移植代碼上傳到網(wǎng)站(http://sourceforge.net/project-s/u-boot/) 上,更新速度很快。目前的版本是1.1.6,本論文正是采用此版本進(jìn)行說(shuō)明,U-Boot的目錄結構參見(jiàn)U-Boot源代碼。
要進(jìn)行U-Boot的修改移植必須了解U-Boot的程序運行流程,這是必要的一步。U-Boot屬于兩階段的BootLoader,其啟動(dòng)流程如圖l所示。第一階段的文件為cpu/arm920t/start.S和board/smdk2410/lowlevel_init.S,用ARM匯編語(yǔ)言編寫(xiě),前者是平臺相關(guān)的,后者是開(kāi)發(fā)板相關(guān)的。第一階段主要是關(guān)于基本硬件的初始化,包括關(guān)閉MMU、CACHE、設置PLL時(shí)鐘比例、關(guān)閉看門(mén)狗;初始化SDRAM,為復制第二階段代碼做準備,最后復制第二階段代碼到SDRAM中,然后跳到SDRAM中運行第二階段。第二階段代碼都是用C語(yǔ)言編寫(xiě)的,功能更加復雜。主要是進(jìn)一步初始化硬件設備、檢測內存映射、復制內核鏡像和根文件系統到SDRAM以及設置啟動(dòng)參數從而啟動(dòng)內核。
評論