999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2019-12-30 09:31:10葛耿育
遵義師范學院學報 2019年6期
關鍵詞:嵌入式

葛耿育,秦 中

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

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

1 官方代碼下載和說明

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

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

圖1 官方源代碼下載界面

2 目錄架構分析

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

圖2 代碼目錄架構

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

3 代碼執行過程

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

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

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

4 編譯生成鏡像文件

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

圖4 嵌入式開發板實物圖

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

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

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

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

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

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

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

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

表1 README文件內容分布

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

6 總結

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

猜你喜歡
嵌入式
Focal&Naim同框發布1000系列嵌入式揚聲器及全新Uniti Atmos流媒體一體機
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于嵌入式Linux內核的自恢復設計
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
嵌入式PLC的設計與研究
電子制作(2018年16期)2018-09-26 03:27:18
搭建基于Qt的嵌入式開發平臺
基于嵌入式系統Windows CE的應用程序開發
嵌入式單片機在電機控制系統中的應用探討
電子制作(2017年8期)2017-06-05 09:36:15
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 久久免费视频6| 自拍偷拍欧美日韩| 欧美色图久久| 青青操国产视频| 久久一级电影| 亚洲男人天堂久久| 色视频久久| 亚洲精品动漫| 九九九久久国产精品| 日韩资源站| 欧美全免费aaaaaa特黄在线| 久久久亚洲色| 国产福利观看| 久久精品国产精品国产一区| 日本一区高清| 欧美成人精品一级在线观看| 国产一级毛片网站| 青青热久麻豆精品视频在线观看| 亚洲精品欧美日本中文字幕| 一级成人欧美一区在线观看| 99精品这里只有精品高清视频| 国产SUV精品一区二区6| 色婷婷在线播放| 日韩高清成人| 无码视频国产精品一区二区| 日本不卡在线播放| 免费国产不卡午夜福在线观看| 国产精品久线在线观看| 国产91蝌蚪窝| 国产黑丝一区| 99re经典视频在线| 国产精品分类视频分类一区| 91娇喘视频| 国产精品亚洲专区一区| 国产91成人| 久久久久88色偷偷| 亚洲91精品视频| 国产精品网曝门免费视频| 国产精品乱偷免费视频| 国产成人高清亚洲一区久久| 无码综合天天久久综合网| 国产第一福利影院| 天堂久久久久久中文字幕| 人妻丰满熟妇αv无码| 熟女成人国产精品视频| 国产成人欧美| 成人福利在线视频免费观看| 久草视频精品| 综合成人国产| 国产偷国产偷在线高清| 午夜日b视频| 日韩成人在线一区二区| 久久天天躁狠狠躁夜夜躁| 亚洲婷婷六月| 日本成人精品视频| 久久天天躁狠狠躁夜夜2020一| 人妻中文久热无码丝袜| 国产精品女在线观看| 自拍欧美亚洲| 中文毛片无遮挡播放免费| 精品超清无码视频在线观看| 狠狠色综合久久狠狠色综合| 在线日韩日本国产亚洲| 91啪在线| 国产91小视频在线观看| 国产自在自线午夜精品视频| 高h视频在线| 欧美成人影院亚洲综合图| 亚洲男人的天堂久久香蕉网| 国产色婷婷| 国产色爱av资源综合区| 人妻精品久久久无码区色视| 老熟妇喷水一区二区三区| 亚洲男人天堂网址| 最新国语自产精品视频在| 国产微拍一区二区三区四区| 在线va视频| 国产欧美精品一区二区| 亚洲男人的天堂视频| 亚洲人成网址| 亚洲综合精品香蕉久久网| 色爽网免费视频|