當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]U-boot在S3C44B0上的移植與分析

摘 要:Bootloader是嵌入式系統(tǒng)軟件開發(fā)的第一個環(huán)節(jié),用于初始化目標板硬件,給嵌入式操作系統(tǒng)提供板上硬件資 源信息,并進一步裝載、引導(dǎo)嵌入式系統(tǒng)的固件,其性能直接影響系統(tǒng)的穩(wěn)定性。為了引導(dǎo)嵌入式操作系統(tǒng),根據(jù)S3C44BO 開發(fā)板上特定的硬件信息,在不改變Bootloader架構(gòu)的前提下,對與硬件相關(guān)的代碼,特別是FLASH芯片Intel 28F320C3B 代碼進行了添加修改,將U-bOOt成功地移植到了開發(fā)板上,并在基于μCLinux的智能機器人避障系統(tǒng)中使用良好。
關(guān)鍵詞:Bootloader;U-boot;S3C44BO;移植


O 引 言
    Bootloader是操作系統(tǒng)啟動運行之前執(zhí)行的一段小程序。它是基于特定硬件平臺實現(xiàn)的,通過它可以初始化硬件設(shè)備,建立內(nèi)存空間的映射表,從而建立適當(dāng)?shù)南到y(tǒng)軟硬件環(huán)境,為最終調(diào)用操作系統(tǒng)內(nèi)核作好準備。嵌入式系統(tǒng)的硬件部分不可能完全一致,由于嵌入式系統(tǒng)需要硬件與軟件的配合才能正常工作,因此需要針對硬件系統(tǒng)進行有關(guān)引導(dǎo)程序的設(shè)計。對于嵌入式系統(tǒng)來說,引導(dǎo)程序比較復(fù)雜,一般采用在基本符合硬件體系要求的現(xiàn)有引導(dǎo)程序的基礎(chǔ)上進行修改,然后通過應(yīng)用的方法設(shè)計引導(dǎo)程序,這就是引導(dǎo)程序的移植。


1 U-boot介紹
    U—boot(Universal Boot LoadeI)源自DENX軟 件工程中心的Wolfgang Denk,基于8xxrom的源碼創(chuàng) 建的PPCBoot工程,遵循GPL條款的開放源碼項目,已經(jīng)可以支持PowerPC,ARM,X86,MIPS等體系結(jié)構(gòu)上的上百種開發(fā)板。U-boot提供:啟動加載(Boot
Loading)和下載(Down Loading)兩種操作模式。并具 有大型Bootloader的全部功能。主要特性有:SCC/ FEC以太網(wǎng)支持;BOOTP/TFTP引導(dǎo)——IP,MAC 預(yù)置功能;在線讀寫FLASH,DOC,IDE,I2C,E2ROM, RTC;支持串行口kermit,S-record下載代碼;識別二進制、ELF32,pImage格式的Image;對Linux引導(dǎo)有特別的支持;監(jiān)控(minitor)命令集;具有讀寫I/O、內(nèi)存、寄存器、外設(shè)測試等功能。
    U-boot還支持多種文件系統(tǒng),如cramfs,ext2, fat,reiserfs和jffs2等;支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux,NetBSD,VxWorks,QNX,RTEMS,ARTOS 和LynxOS等,并對Linux引導(dǎo)有特別的支持。另外, U-boot還提供單任務(wù)軟件運行環(huán)境,可以在沒有操作系統(tǒng)的情況下動態(tài)加載和運行獨立的應(yīng)用程序,這些獨立的應(yīng)用程序可以利用U-boot提供控制臺的I/O函數(shù)、內(nèi)存申請和中斷服務(wù)等。


2 U-boot啟動流程
    對ARM7核處理器,U-boot.啟動流程主要體現(xiàn)在 3個文件上,即start.s,lib arm/board.c和U-boot/common/main.c。下面詳細分析啟動流程。
2.1 start.s文件
    start.s文件主要是CPU的初始化,用匯編語言編寫,其主要代碼流程如下:
    (1)定義入口。由于一個可執(zhí)行的Image必須有一個入口點,并且只能有一個全局入口,通常這個入口放在ROM(FLASH)的Ox0地址,在start.s文件中有如下語句:
    .globl_start
    _start:
    因此,必須通知編譯器使其知道這個入口.該工作可通過修改連接器腳本文件U-boot.1ds來完成。
    (2)設(shè)置異常向量(Exception Vector)。異常中斷向量表是U-boot與操作系統(tǒng)內(nèi)核發(fā)生聯(lián)系的關(guān)鍵所在之一。即使操作系統(tǒng)內(nèi)核已經(jīng)得到處理器的控制權(quán)運行,一旦發(fā)生中斷,處理器還是會自動跳轉(zhuǎn)到從OxO地址開始的異常中斷向量表中的某個位置(依據(jù)于中斷類型)讀取指令運行的。
    (3)設(shè)置CPU的速度、時鐘頻率及中斷控制寄存器。依次為關(guān)閉看門狗計時器,屏蔽所有中斷,配置時鐘(包括3個寄存器:PLLCON,CLKCON,LOCK-TIME)。
    (4)初始化內(nèi)存控制器。內(nèi)存控制器初始化主要通過設(shè)置13個從1c80000開始的特殊功能寄存器來完成,包括外部數(shù)據(jù)總線寬度、訪問周期、定時的控制信號等。
    (5)將ROM中的程序復(fù)制到RAM中。首先利用PC取得BootLoader在FIASH的起始地址,再通過標號之差計算出這個程序代碼的大小。通過寄存器(r3~r10)為復(fù)制的中間媒介將代碼復(fù)制到RAM中。
    (6)初始化堆棧。進入各種模式設(shè)置相應(yīng)模式的堆棧。
    (7)轉(zhuǎn)到RAM中執(zhí)行。該工作可使用指令1dr pc來完成,即Idr pc,start armboot。[!--empirenews.page--]
2.2 lib_arm/board.c文件()
    U—b00t/Lib arm/board.c中的start armboot是C語言開始的函數(shù),也是整個啟動代碼中C語言的主函數(shù),該函數(shù)主要是調(diào)用一一系列的初始化函數(shù)。進行各種初始化設(shè)置。該函數(shù)完成的操作是:
    (1)調(diào)用一系列的初始化函數(shù),包括:cpu init(CPU相關(guān)的設(shè)置),board init(板子相關(guān)的設(shè)置),in-terrupt_init(中斷設(shè)置),env_init(環(huán)境變量設(shè)置),init_ baudrate(baud參數(shù)設(shè)置),serial init(串口初始化),console_inh_f(控制臺設(shè)置),display_banner(顯示標題),dram init(可用內(nèi)存配置);
    (2)初始化FLAsH設(shè)備;
    (3)初始化系統(tǒng)內(nèi)存分配函數(shù);
    (4)如果目標系統(tǒng)擁有NAND設(shè)備,則初始化NAND設(shè)備;
    (5)如果目標系統(tǒng)有顯示設(shè)備,則初始化該類設(shè)備;
    (6)初始化相關(guān)網(wǎng)絡(luò)設(shè)備,填寫IP、MAC地址等。
2.3 U—boot/common/main.c文件
    完成上述初始化后,進入命令循環(huán)(即整個boot的工作循環(huán)),代碼為:
    for(;;)
    {
    main_loop();

   }


3 移植過程
    在此使用的是創(chuàng)維特公司的EB44BO開發(fā)板,系統(tǒng)相關(guān)配置如下:
    處理器:SamslJng S3C4BOX,工作頻率60 MHz;

   
    2個串口。4個可編程的LED以及14針JTAG接口。
    為了降低移植的難度,在移植過程中,一般都是選擇與目標處理器以及目標板最接近的一個版本進行移植。因此選擇B2進行移植。從U—bo()t的官方網(wǎng)站上下載最新版的源代碼,目前最高版本為1.3.3。移植主要修改的文件有:cptl/s3c44b0/start.s,board/dave/b2/lowlevel init.s,board/dave/b2/b2.c,board/dave/corn。mon/FLASH.c,include/configs/b2.h,board/dave/b2/config.mk。
3.1 cpu/s3c44b0/start.s文件
    start.s是匯編語言編寫的U-boot:程序入口代碼,主要包括處理器內(nèi)部各個寄存器的初始化以及代碼的搬移。主要完成設(shè)置處理器狀態(tài)、初始化中斷、堆棧、內(nèi)存控制器等,并確定是否需要對整個U-boot代碼重定位,最終從FLASH中跳轉(zhuǎn)到定位好的內(nèi)存位置執(zhí)行。下面對其中一些代碼進行針對性的分析。
    (1)設(shè)置WTCON=0x0,禁止看門狗定時器,避免處理器強行復(fù)位;
    (2)設(shè)置INTMSK=Ox7ffffff,禁止所有中斷,Bootloader的執(zhí)行過程中不必要響應(yīng)任何中斷;
    (3)根據(jù)嵌入式微處理器工作主頻,修改宏CON-FIG 83C4480 CLCICK SPEED=60 MHz,使處理器能夠正常工作;
    (4)設(shè)置PLLCON=0x34031,PLLCON鎖相環(huán)控制寄存器中儲存有計算系統(tǒng)時鐘的相關(guān)參數(shù),為了產(chǎn)生正確的系統(tǒng)時鐘,必須根據(jù)外接晶振頻率和處理器工作主頻確定各個倍頻系數(shù)。
3.2 board/dave/b2/lowlevel init.S文件
    該文件由匯編代碼完成,主要包括SDRAM工作參數(shù)的設(shè)置,以及處理器內(nèi)存控制器的初始化,參數(shù)需要根據(jù)SDRAM芯片資料進行設(shè)置。
3.3 board/dave/b2/b2.c文件
    該文件中的代碼主要是SDRAM的驅(qū)動程序,并完成了處理器各個I/O 口的初始化,根據(jù)具體的目標板進行適當(dāng)?shù)男薷募纯伞?br />3.4 board/dave/common/FLASH.C
    這個文件是FLASH的驅(qū)動程序。FLASH存儲器的燒寫與擦除一般不具有通用性,根據(jù)不同型號的存儲器做出相應(yīng)的修改。EB4480開發(fā)板采用的是Intel28F320C3B,總共71個塊,1~8每塊大小是8 KB,9~71每塊大小是64 KB,它的特殊性決定了需要對

[!--empirenews.page--]
3.5 include/configs/b2.h文件
    該文件中包含了B2目標板的一些配置的宏定義,主要有系統(tǒng)工作頻率、環(huán)境變量緩沖區(qū)長度、串口波特率、FLASH起始地址及容量、DRAM起始地址及容量、環(huán)境變量保存位置、FLASH讀/寫命令字、網(wǎng)絡(luò)芯片的基地址、目標板IP地址、硬件地址MAC、主機IP地址、內(nèi)核裝載地址、交互操作命令等。
3.6 board/dave/b2/config.mk文件
    U-boot將其代碼從FLASH復(fù)制到SDRAM的位置在0x0c700000處,修改TEXT_BASE=0x0c700000。
    U-boot是在Linux環(huán)境下開發(fā)的,因此需要在Linux下進行編譯,使用的操作系統(tǒng)為Fedora core 7,從http://opensrc.see.samsung.corn/download/arm-elf-tools-20040427.sh下載arm-elf=tools=20040427.sh,使用的編譯器為arm-elf-gcc,在U-boot根目錄下對其中的makefile文件進行相應(yīng)的修改,然后在命令行中運行以下指令:

   
    編譯連接后生成U_boot,U_boot.bin,U_boot.
srec,其中的U_boot.bin是二進制bin文件,純粹的U_boot二進制執(zhí)行代碼,不保存ELF格式和調(diào)試信息,這個文件用于燒寫到用戶的開發(fā)板中。通過創(chuàng)維特集成開發(fā)環(huán)境自帶的FLASH燒寫工具載人到SDRAM中運行,從超級終端顯示U-boot的啟動信息,分別試驗erase,cp,printenv,saveenv等命令,并檢測對FLASH的操作;使用tftp命令,以檢測網(wǎng)口下載功能,然后裝載操作系統(tǒng)內(nèi)核,完成以上任務(wù)則移植成功。經(jīng)過以上步驟移植的U-boot已經(jīng)在自己開發(fā)的ARM板上順利地引導(dǎo)了μClinux操作系統(tǒng)。


4 結(jié) 語
    Bootloader是連接系統(tǒng)硬件和操作系統(tǒng)的橋梁,這里根據(jù)U-boot的運行機制,在硬件資源固定,不改變Bootloader框架的前提下,對與目標板硬件相關(guān)的代碼,特別是FLASH芯片Intel 28F320C3B的代碼進行修改,成功移植到EB4480開發(fā)板上,并且結(jié)合U-boot和μClinux的啟動流程與運行機制,成功設(shè)計并實現(xiàn)了在基于S3C44BOX目標板上引導(dǎo)嵌入式操作系統(tǒng)。在移植過程中,要熟悉U-boot的組織結(jié)構(gòu)和工作流程,對相關(guān)的硬件資源有一定的了解,根據(jù)實際情況進行裁減,靈活選用功能模塊。目前,移植后的U-boot能夠穩(wěn)定地運行在嵌入式目標板上,并能順利地引導(dǎo)嵌入式μCinux系統(tǒng),已成功應(yīng)用在智能機器人的避障系統(tǒng)中。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉