国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

U-Boot啟動過程和代碼分析

2019-12-30 09:31:10葛耿育
遵義師范學(xué)院學(xué)報 2019年6期
關(guān)鍵詞:壓縮包開發(fā)板源代碼

葛耿育,秦 中

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

BootLoader在嵌入式系統(tǒng)應(yīng)用中的功能類似于PC機中的BIOS程序,初始化硬件設(shè)備并加載嵌入式操作系統(tǒng)到內(nèi)存中運行[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)項目最初由德國一名嵌入式軟件工程師WolfgangDenk為8xxROM和PPCBoot等項目編寫代碼逐漸演變而來,通過開源項目開發(fā)團隊共同完善和維護該項目,目前已經(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到當前最新uboot-2019-04版本的代碼壓縮包下載鏈接,部分代碼壓縮包如圖1所示。最初的版本號使用阿拉伯數(shù)字的主次版本號分類,從2008年8月之后改用年月日期的形式來進行分類,分別如圖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)下的目錄相當于是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命令實現(xiàn)的代碼文件、/common目錄存放和架構(gòu)無關(guān)的通用函數(shù)代碼文件、/configs目錄存放關(guān)于開發(fā)板的默認配置文件、/disk目錄存放磁盤分區(qū)及驅(qū)動處理代碼文件、/doc目錄存放一些簡要的文檔說明、/drivers目錄存放通用的驅(qū)動程序例如接口協(xié)議代碼實現(xiàn)等、/dts目錄存放 Makefile編譯的文件設(shè)備樹、/env是環(huán)境變量相關(guān)的文件、/examples目錄是獨立運行應(yīng)用程序的案例代碼、/fs目錄是各種文件系統(tǒng)實現(xiàn)的代碼文件、/include目錄存放需要被包含的頭文件、/lib目錄存放所有硬件架構(gòu)相關(guān)的通用庫函數(shù)文件、/Licenses目錄存放各種注冊碼文件、/net目錄存放網(wǎng)絡(luò)相關(guān)的代碼文件、/post目錄存放上電自檢的代碼文件、/scripts各種腳本和Makefile文件、/test目錄存放各種測試單元文件、/tools目錄存放編譯生成鏡像文件的工具。

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

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

3 代碼執(zhí)行過程

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

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

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

4 編譯生成鏡像文件

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

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

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

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

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

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

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

(5)在/board/samsung/目錄下找一個和s5pv210處理器相似的s5pc110板級文件夾,在此基礎(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#”雙引號內(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),對于用戶和開發(fā)者而言,最重要的文件就是README文本文件,通過該文件可以了解該項目的所有說明信息,文本具體的內(nèi)容分類按照行號范圍如表1所示。

6 總結(jié)

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

猜你喜歡
壓縮包開發(fā)板源代碼
人工智能下復(fù)雜軟件源代碼缺陷精準校正
計算機仿真(2023年8期)2023-09-20 11:23:42
基于TXL的源代碼插樁技術(shù)研究
軟件源代碼非公知性司法鑒定方法探析
玩轉(zhuǎn)RAR壓縮包的另類技巧
文件壓縮解壓難題巧解決
Microchip最新推出兩款PIC32 Curiosity開發(fā)板
淺析單片機開發(fā)板的設(shè)計與制作
電子制作(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ā)板
临西县| 禄劝| 普洱| 肃宁县| 新疆| 雷波县| 宜州市| 巢湖市| 通海县| 镇江市| 孟州市| 广安市| 水富县| 新平| 南和县| 浮山县| 西藏| 沾益县| 筠连县| 蒲城县| 朔州市| 兴隆县| 靖远县| 镇安县| 清新县| 东乌珠穆沁旗| 容城县| 楚雄市| 德清县| 甘德县| 铅山县| 金阳县| 大化| 应城市| 绥德县| 达日县| 二连浩特市| 清丰县| 定远县| 商水县| 修水县|