www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

摘 要:Bootloader是嵌入式系統(tǒng)軟件開發(fā)的第一個環(huán)節(jié),用于初始化目標(biāo)板硬件,給嵌入式操作系統(tǒng)提供板上硬件資 源信息,并進(jìn)一步裝載、引導(dǎo)嵌入式系統(tǒng)的固件,其性能直接影響系統(tǒng)的穩(wěn)定性。為了引導(dǎo)嵌入式操作系統(tǒng),根據(jù)S3C44BO 開發(fā)板上特定的硬件信息,在不改變Bootloader架構(gòu)的前提下,對與硬件相關(guān)的代碼,特別是FLASH芯片Intel 28F320C3B 代碼進(jìn)行了添加修改,將U-bOOt成功地移植到了開發(fā)板上,并在基于μCLinux的智能機(jī)器人避障系統(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)核作好準(zhǔn)備。嵌入式系統(tǒng)的硬件部分不可能完全一致,由于嵌入式系統(tǒng)需要硬件與軟件的配合才能正常工作,因此需要針對硬件系統(tǒng)進(jìn)行有關(guān)引導(dǎo)程序的設(shè)計。對于嵌入式系統(tǒng)來說,引導(dǎo)程序比較復(fù)雜,一般采用在基本符合硬件體系要求的現(xiàn)有引導(dǎo)程序的基礎(chǔ)上進(jìn)行修改,然后通過應(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下載代碼;識別二進(jìn)制、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。下面詳細(xì)分析啟動流程。
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的起始地址,再通過標(biāo)號之差計算出這個程序代碼的大小。通過寄存器(r3~r10)為復(fù)制的中間媒介將代碼復(fù)制到RAM中。
    (6)初始化堆棧。進(jìn)入各種模式設(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ù)。進(jìn)行各種初始化設(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(顯示標(biāo)題),dram init(可用內(nèi)存配置);
    (2)初始化FLAsH設(shè)備;
    (3)初始化系統(tǒng)內(nèi)存分配函數(shù);
    (4)如果目標(biāo)系統(tǒng)擁有NAND設(shè)備,則初始化NAND設(shè)備;
    (5)如果目標(biāo)系統(tǒng)有顯示設(shè)備,則初始化該類設(shè)備;
    (6)初始化相關(guān)網(wǎng)絡(luò)設(shè)備,填寫IP、MAC地址等。
2.3 U—boot/common/main.c文件
    完成上述初始化后,進(jìn)入命令循環(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接口。
    為了降低移植的難度,在移植過程中,一般都是選擇與目標(biāo)處理器以及目標(biāo)板最接近的一個版本進(jìn)行移植。因此選擇B2進(jìn)行移植。從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í)行。下面對其中一些代碼進(jìn)行針對性的分析。
    (1)設(shè)置WTCON=0x0,禁止看門狗定時器,避免處理器強(qiáng)行復(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芯片資料進(jìn)行設(shè)置。
3.3 board/dave/b2/b2.c文件
    該文件中的代碼主要是SDRAM的驅(qū)動程序,并完成了處理器各個I/O 口的初始化,根據(jù)具體的目標(biāo)板進(jìn)行適當(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目標(biāo)板的一些配置的宏定義,主要有系統(tǒng)工作頻率、環(huán)境變量緩沖區(qū)長度、串口波特率、FLASH起始地址及容量、DRAM起始地址及容量、環(huán)境變量保存位置、FLASH讀/寫命令字、網(wǎng)絡(luò)芯片的基地址、目標(biāo)板IP地址、硬件地址MAC、主機(jī)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下進(jìn)行編譯,使用的操作系統(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文件進(jìn)行相應(yīng)的修改,然后在命令行中運行以下指令:

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

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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉