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