嵌入式開發(fā)教程之基于S3C2410A的嵌入式系統(tǒng)的U-Boot移植
,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,2011-5-20,#,嵌入式開發(fā)教程之基于,S3C2410A,的嵌入式系統(tǒng)的,U-Boot,移植,引 言,1,嵌入式系統(tǒng)的軟件組成,1,1,系統(tǒng)的軟件組成,1,2 U-Boot,分析,2 U-Boot,的啟動分析,3 U-Boot,的移植方法,3,1,修改,cpu,arm920t,start,S,文件,3,2,修改,board,smdk2410,目錄下文件,3,3,在,include,文件中設(shè)置,NAND FLASH,硬件參數(shù),3,4,編譯與運行,4,結(jié) 語,arm,嵌入式處理器已被廣泛應(yīng)用于消費電子產(chǎn)品、無線通信、網(wǎng)絡(luò)通信和工業(yè)控制等領(lǐng)域。其中,,arm9,的芯片更是以其低價格、低功耗、高性能在手持設(shè)備中占據(jù)著重要市場。在嵌入式操作系統(tǒng)中,,Linux,,,Vxworks,,,WinCE,三足鼎立,其中,Linux,由于其開源性、穩(wěn)定性、安全性、可裁減性更是一支獨放。在嵌入式系統(tǒng)中,如何實現(xiàn)在,arm9,平臺下,Linux,操作系統(tǒng)的引導(dǎo)工作是嵌入式技術(shù)開發(fā)的重要環(huán)節(jié)。,引 言,1,1,系統(tǒng)的軟件組成,嵌入式的軟件系統(tǒng)主要由,Bootloader,、操作系統(tǒng)、文件系統(tǒng)、應(yīng)用程序等組成。其中,,Bootloader,是介于硬件和操作系統(tǒng)之間的一層,其作用就好像,PC,機(jī)中的,BIOS,。系統(tǒng)加電運行后,由系統(tǒng)自動加載。通過這段程序,可以初始化硬件設(shè)備,建立內(nèi)存空間的映射圖,從而將系統(tǒng)的硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好環(huán)境。對于一個嵌入式系統(tǒng),通常,BootLoader,是依賴于硬件而實現(xiàn)的。對于不同類型的嵌入式芯片、不同的操作系統(tǒng)和外圍接口都需要重新移植、修改和編譯,Bootloader,。,1,嵌入式系統(tǒng)的軟件組成,嵌入式,Linux,系統(tǒng)中常用的,Bootloader,引導(dǎo)程序有,U-Boot,,,redboot,,,blob,和,vivi,等,其中,U-Boot,遵循,GPL,條款的開放源碼項目,功能最為強(qiáng)大;,U-Boot,對,PowerPC,系列處理器支持最豐富,同時還支持,MIPS,,,x86,,,arm,,,Nios,,,XScale,等諸多常用系列的處理器;,U-Boot,引導(dǎo)程序分為,Stage 1,和,Stage 2,兩大部分,,Stage 1,中主要包括設(shè)備初始化、中斷設(shè)置、時鐘設(shè)置和存儲器初始化等工作,并且采用匯編語言實現(xiàn),而一些通用功能大多采用,C,語言實現(xiàn),放在,Stage 2,中。,1,2,嵌入式開發(fā)教程之,U-Boot,分析,Stage 1,的代碼在,CPU,arm920t,start,s,中定義,它包括從系統(tǒng)上電后在,0 x00000000,地址開始執(zhí)行的部分。這部分代碼系統(tǒng)啟動后,從,NAND FLASH,自動加載到,SDRAM,中,它包括對,S3C2410A,中寄存器的初始化和將,U-Boot,的,Stage 2,代碼從,FLASH,拷貝到,SDRAM,。,Stage 2,的起始地址是在,Stage1,代碼中指定的。被復(fù)制到,SDRAM,后,就從第一階段跳到這個入口地址,開始執(zhí)行剩余部分代碼。第二階段主要是對內(nèi)存的分配,對,NAND FLASH,以及對外圍設(shè)備的初始化,其代碼在,lib-,arm,board,C,中。啟動的流程分析如圖,1,所示。,2,嵌入式開發(fā)教程之,U-Boot,的啟動分析,嵌入式開發(fā)教程,(1),跳轉(zhuǎn)到,C,語言程序之后,首先定義初始化函數(shù)表,程序在,lib-arm,board,e,中,如下所示:,嵌入式開發(fā)教程,(2),初始化,FLASH,設(shè)備和顯示,FLASH,設(shè)備信息;,(3),初始化系統(tǒng)內(nèi)存分配函數(shù);,(4),如果目標(biāo)系統(tǒng)擁有,NAND,設(shè)備,則初始化,NAND,設(shè)備;,(5),初始化顯示設(shè)備;,(6),初始化網(wǎng)絡(luò)設(shè)備,填寫,IP,地址、,MAC,地址等信息;,(7),開啟中斷處理;,(8),進(jìn)入命令循環(huán),接收用戶從串口的命令輸入。,嵌入式開發(fā)教程,本文選用交叉編譯環(huán)境,arm-linux-gcc-2,95,3,,選用,U-Boot-1,1,4,版本作為移植平臺。為了使,U-Boot,支持新的開發(fā)板,一種簡便的做法是在,U-Boot,已經(jīng)支持的開發(fā)板中選擇一種與目標(biāo)板接近的,在其基礎(chǔ)上進(jìn)行修改。這里選用的是,smdk2410,的配置。,3,嵌入式開發(fā)教程之,U-Boot,的移植方法,Start,s,是采用匯編語言編寫的,U-Boot,程序入口代碼,完成對底層硬件的初始化,其中有一個很重要的功能是從,NAND FLASH,中把,Stage 2,階段的代碼復(fù)制到,SDRAM,中。在此階段,涉及到對,NANDFLASH,的讀操作,在,U-Boot,中,沒有對,NANDFLASH,讀操作的驅(qū)動,采用以下方法實現(xiàn):,3,1,修改,cpu,arm920t,start,S,文件,嵌入式開發(fā)教程,通過調(diào)用,board,smdk2410,nand_read,C,中的,nand_read_11,函數(shù)將,Stage 2,階段的代碼復(fù)制到,ram,中。,(1),增加對,NANDFLASH,的讀驅(qū)動,nand_read,c,3,2,修改,board,smdk2410,目錄下文件,(2),在,smdk2410,C,文件中添加對,NANDFLASH,初始化的程序,在此主要是對主板的,GPIO,的一些設(shè)置,并加上對,NANDFLASH,初始化程序。,嵌入式開發(fā)教程,嵌入式開發(fā)教程,(3),在該目錄下的,Makefile,文件中添加,nand_read,C,文件的編譯,OBJS,:,=smdk24 10,o FLASH,o nand_read,o,嵌入式開發(fā)教程,在,linux,mtd,nand_ids,h,中設(shè)置參數(shù):,3,3,在,include,文件中設(shè)置,NAND FLASH,硬件參數(shù),配置好以后,進(jìn)入,U-Boot,主目錄,重新編譯,U-Boot,代碼,運行命令:,(1),查看交叉編譯器的版本號,arm-linux-gcc-v,(2),清除生成的連接,Make distclean,(3),編譯,make smdk2410_config,(4)make CROSS-COMPILE=,arm,-linux-,編譯成功后,將生成三個文件:,3,4,嵌入式開發(fā)教程之,編譯與運行,u-boot,:,ELF,格式的文件,可以被大多數(shù),Debug,程序識別。,u-boot,bin,:二進(jìn)制,bin,文件,純碎的,U-Boot,二進(jìn)制執(zhí)行代碼,不保存,ELF,格式和調(diào)試信息。這個文件用于燒到用戶的開發(fā)板中。,u-boot,srec,:,Motorola S-Record,格式,可以通過串口下載到開發(fā)板中。,將得到的,u-boot,bin,文件借助于,FLASH,芯片燒寫工具,通過,JTAG,口下載到目標(biāo)板后,檢查,U-Boot,能否正常工作。如果能從串口輸出正確的啟動信息,就表明移植基本成功。,嵌入式開發(fā)教程,目前筆者移植的,U-Boot,已經(jīng)能穩(wěn)定地運行在開發(fā)板上。,U-Boot,引導(dǎo)程序是嵌入式,Linux,系統(tǒng)軟件開發(fā)中的一個重要環(huán)節(jié)。在此通過分析,U-Boot,的代碼結(jié)構(gòu)和啟動過程,并針對開發(fā)板系統(tǒng)的硬件資源,通過分析與調(diào)試,實現(xiàn)了,U-Boot,的移植,并且能夠引導(dǎo)嵌入式,Linux,內(nèi)核和文件系統(tǒng),為今后進(jìn)一步開發(fā)奠定了堅實的基礎(chǔ)。,4,結(jié) 語,