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加入嵌入式視覺聯盟
主站蜘蛛池模板: 波多野结衣一级毛片| 91精品国产丝袜| 欧美三級片黃色三級片黃色1| 白丝美女办公室高潮喷水视频| 国产成人精品一区二区三区| 免费人成黄页在线观看国产| 777午夜精品电影免费看| 日韩美毛片| 性喷潮久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ麻豆| 亚洲另类国产欧美一区二区| 亚洲AV色香蕉一区二区| 国产国产人成免费视频77777| 国产精品999在线| 福利在线免费视频| 91 九色视频丝袜| 亚洲狼网站狼狼鲁亚洲下载| 无码福利日韩神码福利片| 无码内射在线| 中文字幕资源站| 日韩毛片免费| 国产亚洲精品va在线| 亚洲欧美人成电影在线观看| 亚洲成人一区二区| 一级一级特黄女人精品毛片| 国产第一页屁屁影院| 国产日韩丝袜一二三区| 亚洲中文字幕无码爆乳| 日韩精品成人在线| 亚洲综合第一区| 亚州AV秘 一区二区三区 | 国产a网站| 男人天堂伊人网| 亚洲精品视频在线观看视频| 国产精品永久不卡免费视频| 国产丰满大乳无码免费播放| 国产亚洲精品97在线观看| 四虎国产精品永久一区| 亚洲视频免费在线看| 国产制服丝袜91在线| 国产在线欧美| 91久久精品国产| 中文字幕66页| 喷潮白浆直流在线播放| 四虎国产在线观看| 最新无码专区超级碰碰碰| 无码日韩人妻精品久久蜜桃| 99re精彩视频| 免费中文字幕在在线不卡| 国产簧片免费在线播放| 特级毛片免费视频| 精品亚洲国产成人AV| 久久久久国产精品熟女影院| 国产91蝌蚪窝| 色综合五月| 91精品国产91欠久久久久| 成人噜噜噜视频在线观看| 黄色不卡视频| 国产精品成人第一区| 久久成人18免费| 无码一区中文字幕| 成人毛片免费在线观看| 亚洲黄色视频在线观看一区| 国产精品福利导航| 免费在线播放毛片| 国产精鲁鲁网在线视频| 国产人成在线观看| 亚洲福利一区二区三区| 国产丝袜91| 国产丝袜第一页| 在线国产欧美| 青青青视频91在线 | 国产激情无码一区二区APP| 亚洲欧洲一区二区三区| 波多野结衣一区二区三区88| 亚洲经典在线中文字幕| 国产精品美人久久久久久AV| 2018日日摸夜夜添狠狠躁| 2021天堂在线亚洲精品专区| 麻豆精品视频在线原创| 在线观看免费黄色网址| 亚洲第一综合天堂另类专|