• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      U-Boot啟動(dòng)過程和代碼分析

      2019-12-30 09:31:10葛耿育
      關(guān)鍵詞:壓縮包開發(fā)板源代碼

      葛耿育,秦 中

      (遵義師范學(xué)院信息工程學(xué)院,貴州遵義563006)

      BootLoader在嵌入式系統(tǒng)應(yīng)用中的功能類似于PC機(jī)中的BIOS程序,初始化硬件設(shè)備并加載嵌入式操作系統(tǒng)到內(nèi)存中運(yùn)行[1-3]。常見的嵌入式Boot-Loader有 Blob、vivi、Bios-lt、Redboot、ARMboot、Bootldr以及U-Boot等,其中較為通用和流行的是U-Boot。本文分析最新版的官方源代碼架構(gòu),解析其代碼執(zhí)行流程和移植編譯方法,用以輔助嵌入式系統(tǒng)課程的教學(xué)和供學(xué)習(xí)者參考。

      1 官方代碼下載和說明

      U-Boot(Universal Boot loader)項(xiàng)目最初由德國一名嵌入式軟件工程師WolfgangDenk為8xxROM和PPCBoot等項(xiàng)目編寫代碼逐漸演變而來,通過開源項(xiàng)目開發(fā)團(tuán)隊(duì)共同完善和維護(hù)該項(xiàng)目,目前已經(jīng)支持多種CPU架構(gòu)的系統(tǒng)移植功能[4,5]。

      官網(wǎng)提供源代碼下載網(wǎng)址ftp://ftp.denx.de/pub/u-boot/,提供從第一版本u-boot-0.2.0到當(dāng)前最新uboot-2019-04版本的代碼壓縮包下載鏈接,部分代碼壓縮包如圖1所示。最初的版本號(hào)使用阿拉伯?dāng)?shù)字的主次版本號(hào)分類,從2008年8月之后改用年月日期的形式來進(jìn)行分類,分別如圖1的左右兩邊顯示。

      圖1 官方源代碼下載界面

      2 目錄架構(gòu)分析

      本文選用截止發(fā)稿日期的最新版u-boot-2019.4版本作為源代碼分析,在Windows下解壓之后的目錄架構(gòu)如圖2所示,U-Boot官方代碼、目錄架構(gòu)和編譯軟件的風(fēng)格參考了Linux內(nèi)核的方式,因此很多目錄和文件名和Linux官方內(nèi)核源代碼目錄架構(gòu)很相似,在Linux操作系統(tǒng)下的目錄相當(dāng)于是Windows操作系統(tǒng)下的文件夾。主目錄下/api目錄存放關(guān)于外部應(yīng)用程序編寫的api接口程序、/arch目錄存放涉及具體CPU架構(gòu)相關(guān)的代碼(包括ARC/ARM/m68k/MIPS/PowerPC/RISC-V/x86等 CPU 架構(gòu))、/board目錄存放依賴于開發(fā)板的相關(guān)代碼、/cmd目錄存放u-boot命令實(shí)現(xiàn)的代碼文件、/common目錄存放和架構(gòu)無關(guān)的通用函數(shù)代碼文件、/configs目錄存放關(guān)于開發(fā)板的默認(rèn)配置文件、/disk目錄存放磁盤分區(qū)及驅(qū)動(dòng)處理代碼文件、/doc目錄存放一些簡(jiǎn)要的文檔說明、/drivers目錄存放通用的驅(qū)動(dòng)程序例如接口協(xié)議代碼實(shí)現(xiàn)等、/dts目錄存放 Makefile編譯的文件設(shè)備樹、/env是環(huán)境變量相關(guān)的文件、/examples目錄是獨(dú)立運(yùn)行應(yīng)用程序的案例代碼、/fs目錄是各種文件系統(tǒng)實(shí)現(xiàn)的代碼文件、/include目錄存放需要被包含的頭文件、/lib目錄存放所有硬件架構(gòu)相關(guān)的通用庫函數(shù)文件、/Licenses目錄存放各種注冊(cè)碼文件、/net目錄存放網(wǎng)絡(luò)相關(guān)的代碼文件、/post目錄存放上電自檢的代碼文件、/scripts各種腳本和Makefile文件、/test目錄存放各種測(cè)試單元文件、/tools目錄存放編譯生成鏡像文件的工具。

      圖2 代碼目錄架構(gòu)

      在主目錄下,還有其他幾個(gè)比較重要的文件,MAINTAINERS是代碼維護(hù)者的說明信息、Makefile是自動(dòng)化編譯工程的編譯規(guī)則文件、Kconfig為系統(tǒng)編譯前配置界面提供源文件、Kbuild是基于 GNU make實(shí)現(xiàn)的內(nèi)核構(gòu)建系統(tǒng)并進(jìn)行部分功能擴(kuò)展,此外還有一個(gè)經(jīng)常被初學(xué)者忽視的README文件。很多嵌入式系統(tǒng)學(xué)習(xí)者會(huì)在購買的開發(fā)板附帶資料或網(wǎng)絡(luò)論壇查看U-Boot有關(guān)的知識(shí),由于網(wǎng)上這方面內(nèi)容較少且知識(shí)老舊,因此很多人對(duì)代碼分析、移植工作和編譯鏡像無從下手。最好的辦法是參考該官方目錄下的README文件說明,該文件在Windows操作系統(tǒng)下使用 sourceinsight工具打開后共4995行文本信息,從多個(gè)方面和角度對(duì)U-Boot項(xiàng)目進(jìn)行說明解釋,因而非常重要。

      3 代碼執(zhí)行過程

      在Windows操作系統(tǒng)下解壓u-boot-2019.04最新版的代碼文件壓縮包后發(fā)現(xiàn),代碼文件共76.7MB,包含1607個(gè)目錄,共14850個(gè)文件如圖3所示,大部分文件代碼通過C語言編程實(shí)現(xiàn),小部分偏向硬件底層的代碼通過匯編語言實(shí)現(xiàn),其他的有腳本和文本信息。如此龐大的項(xiàng)目很難找到第一個(gè)執(zhí)行的代碼文件以及之后順序執(zhí)行的代碼文件。

      圖3 u-boot-2019.04版文件屬性

      通過查看README文件的第218至298行之間的文本信息中得知,U-Boot的啟動(dòng)第一個(gè)代碼文件是基于特定CPU架構(gòu)的匯編程序start.S,在類似/arch/XXX/cpu/YYY/start.S的路徑,其中XXX泛指不同CPU的廠商或架構(gòu)名,YYY代表CPU的具體型號(hào)或指令集代號(hào),該文件主要功能是初始化CPU硬件相關(guān)的工作,后綴名.S代表匯編代碼中嵌入了C語言的預(yù)處理相關(guān)代碼。start.S接下來按照先后順序調(diào)用lowlevel.S文件中的lowlevel_init()函數(shù)、board_f.c文件中的board_init_r()函數(shù)以及board_r.c文件中的board_init_r()函數(shù)。后兩個(gè)C語言文件都是獨(dú)立于CPU架構(gòu)的通用代碼,存放在/common目錄中,最后調(diào)用/common目錄下 main.c文件中的main_loop()函數(shù)。當(dāng)運(yùn)行過程中上位機(jī)(宿主機(jī)或PC機(jī))截住則執(zhí)行uboot命令行模式下的命令,稱為交互模式,可以通過串口或者網(wǎng)絡(luò)刷機(jī),如果在bootdelay延時(shí)時(shí)間內(nèi)沒有截住,則執(zhí)行自啟動(dòng)模式,調(diào)用autoboot.c文件中的相應(yīng)函數(shù)最終加載OS鏡像到內(nèi)存中運(yùn)行,整個(gè)引導(dǎo)程序過程結(jié)束。

      4 編譯生成鏡像文件

      U-Boot項(xiàng)目代碼中已經(jīng)包括了很多經(jīng)典 CPU架構(gòu)的流行開發(fā)板,這些開發(fā)板是各個(gè)半導(dǎo)體公司在封裝SOC處理器時(shí)作為測(cè)試使用的樣例開發(fā)板,涵蓋了比較完整的外圍設(shè)備和接口模塊,只需要進(jìn)行簡(jiǎn)單的配置即可編譯生成可執(zhí)行文件。README文件第3374至3482行之間的文本信息中得知,將U-Boot官方代碼建立成可執(zhí)行二進(jìn)制文件,所有文件操作需要在 Linux操作系統(tǒng)下實(shí)施。首先進(jìn)入uboot根目錄cd/u-boot/,需要進(jìn)行配置,執(zhí)行make NAME_defconfig,其中NAME是具體開發(fā)板的代號(hào)名稱。之后執(zhí)行make all,就會(huì)生成uboot.bin文件,移植到相應(yīng)的NAME型號(hào)開發(fā)板中即可運(yùn)行工作,并加載嵌入式操作系統(tǒng)如Linux等到內(nèi)存中運(yùn)行[6,7]。

      圖4 嵌入式開發(fā)板實(shí)物圖

      在對(duì)于市場(chǎng)上大部分的嵌入式開發(fā)板都是根據(jù)半導(dǎo)體廠商樣例開發(fā)板修改而來,因此功能模塊和各個(gè)主要模塊芯片接口協(xié)議相同,可以兼容通用。例如圖 4所示的基于 Cortex A8內(nèi)核的三星公司S5pv210處理器的核心開發(fā)板,包含 Nandflash、SDRAM、USB接口、網(wǎng)卡接口、RS232串口等音視頻接口等[8-10],對(duì)于此類的開發(fā)板進(jìn)行U-Boot的移植步驟為:

      (1)在官網(wǎng)下載uboot源代碼壓縮包

      (2)在Linux系統(tǒng)下解壓該壓縮包

      (3)下載交叉編譯工具 arm-none-linux-gnueabigcc

      (4)在源代碼根目錄下打開Makefile將CROSS-_COMPILE的值改為(3)中的名稱

      (5)在/board/samsung/目錄下找一個(gè)和s5pv210處理器相似的s5pc110板級(jí)文件夾,在此基礎(chǔ)上修改,復(fù)制/board/samsung/s5pc110/并重命名為v210,修改/board/samsung/v210/Makefile中s5pc110.o改成v210.o。

      (6)將/include/configs/s5pc110.h復(fù)制一份,并改成/include/configs/v210.h,將內(nèi)容#define CONFIG_SYS_PROMPT“S5PC110#”雙引號(hào)內(nèi)容改成“v210#”;將#define CONFIG_IDENT_STRING for S5PC110改成 for v210;配置boards.cfg在s5pc110后加入一行v210 arm armv7 v210 Samsung s5pv210。

      (7)編譯u-boot,依次執(zhí)行命令make distclean、makev210_config以及make,則生成uboot.bin文件。5 README文件內(nèi)容分布

      表1 README文件內(nèi)容分布

      在U-Boot代碼目錄中具有很多重要的分類目錄和相關(guān)代碼文件,通過分析發(fā)現(xiàn),對(duì)于用戶和開發(fā)者而言,最重要的文件就是README文本文件,通過該文件可以了解該項(xiàng)目的所有說明信息,文本具體的內(nèi)容分類按照行號(hào)范圍如表1所示。

      6 總結(jié)

      本文通過參考 U-Boot官方源代碼目錄中的README文件,提取出關(guān)于整個(gè)項(xiàng)目代碼的分層架構(gòu)說明、代碼的執(zhí)行過程以及建立裸機(jī)可以運(yùn)行的二進(jìn)制鏡像文件方法,對(duì)于開發(fā)者和學(xué)習(xí)人員提供一個(gè)參考,在教學(xué)和實(shí)驗(yàn)過程中起到很好的示范效果[11,12]。

      猜你喜歡
      壓縮包開發(fā)板源代碼
      人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
      基于TXL的源代碼插樁技術(shù)研究
      軟件源代碼非公知性司法鑒定方法探析
      玩轉(zhuǎn)RAR壓縮包的另類技巧
      文件壓縮解壓難題巧解決
      Microchip最新推出兩款PIC32 Curiosity開發(fā)板
      淺析單片機(jī)開發(fā)板的設(shè)計(jì)與制作
      電子制作(2017年22期)2017-02-02 07:10:14
      揭秘龍湖產(chǎn)品“源代碼”
      批量刪除壓縮包內(nèi)的指定文件
      電腦迷(2014年12期)2014-04-29 00:44:03
      Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
      海宁市| 郯城县| 逊克县| 淮滨县| 永福县| 威远县| 手机| 河东区| 石家庄市| 保德县| 新宾| 青神县| 本溪市| 墨脱县| 衡水市| 大安市| 金塔县| 广南县| 新密市| 来安县| 南投市| 托克托县| 吴旗县| 霍山县| 手游| 涟水县| 抚松县| 牙克石市| 乐业县| 鹤峰县| 紫阳县| 象州县| 沾化县| 内乡县| 阿荣旗| 绍兴市| 彩票| 蒙城县| 抚顺县| 双牌县| 武陟县|