日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析

發布時間:2023/12/9 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Uboot 所用版本 u-boot-2013.01

? ? ? u-boot-2013.01 中有上千文件,要想了解對于某款開發板,使用哪些文件、哪些文件首先執行、可執行文件占用內存的情況,最好的方法就是閱讀它的Makefile。


根據頂層Readme文件的說明:


可以知道如果使用開發板board/<board_name>,就先執行“make <board_name>_config”命令進行配置,然后執行“make all”,?就可以生成如下3個文件:

U-Boot.bin:二進制可執行文件,它就是可以直接燒入eMMC中的文件。

U-Boot?: ELF格式的可執行文件。

U-Boot.srec : 摩托羅拉格式的可執行文件。

? ? ? ? 對于Exynos4412開發板,這里用的其實是Fs4412,執行“make fs4412_config"、“make all"后生成的u-boot-fs4412.bin可以燒入eMMC中執行。


一、U-Boot 配置過程

1、在頂層Makefile中可以看到如下代碼:


假定在u-boot-2013.01的根目錄下編譯,則其中的MKCONFIG 就是根目錄下的mkconfig文件(mkconfig是shell腳本文件)

%_config是GUNmake語法層,表示的是所有以".config"結尾的文件。$(@:_config=)的結果就是將“fs4412"中的“——config”去掉,結果為fs4412。


MKCONFIG 就是執行mkconfig。

所以 “make fs4412_config"實際上就是執行如下命令:

./mkconfig fs4412 arm armv7 fs4412 samsung exynos


2、mkconfig 的作用

前面已經提到,mkconfig就是一shell腳本, 具體作用如下:

a -- 解析boards.cfg fs4412相關數據


這是我們自行添加的.確定開發板名稱BOARD_NAME。


b -- 針對平臺作了一系列鏈接,創建到平臺、開發板相關的頭文件的鏈接。



c --創建頂層Makefile包含的文件 include/ config.mk


inlucde / config.mk 內容如下:



d -- 創建開發板相關的頭文件inlucde/config.h


Include/config.h導出結果如下:



? ? ? U-Boot 還沒有類似Linux一樣的可視化配置界面(比如使用 make menuconfig 來配置),要手動修改配置文件 inlucde/config/<board_name>.h 來裁剪、設置U-Boot.

配置文件中有以下兩類宏。

1) 一類是選項(Options),前綴為“CONFIG”它們用于選擇CPU、SOC、開發板類型,設置系統時鐘、選擇設備驅動等。



2)另一類是參數(Setting),前綴為“CFG_”,它們用于設置malloc緩沖池的大小、U-Boot 下載文件時的默認加載地址、Flash的起始地址等。


uboot 執行通過宏來判斷:宏在頭文件中定義。

#ifdef CONFIG_TEST
run_test();
#endif

某頭文件

#define CONFIG_TEST

可以這樣認為,“CONFIG_”除了設置一些參數外,主要用來設置U-Boot的功能、選擇使用文件中的哪一部分;而“CFG_”用來 設置更細節的參數。


二、U-Boot 的編譯、鏈接過程

?配uboot 編譯通過Makefile來判斷:

obj-y += xx.o xx.o ?在編譯時,只編譯obj-y

? ? ? ? obj-$(CONFIG_XX) = xx.o xx.o 如果CONFIG_XX為y,則此文件會被編譯進u-boot.bin置完后,執行“make all” 即可編譯:

找第一個目標all:




上面代碼是對u-boot進行格式轉換,變成二進制bin格式之后,再加一些校驗與4412開如平臺加密信息。

依賴u-boot:



先總結一下U-Boot 的編譯流程:

a -- 首先編譯 cpu /$(CPU)/start.S,對于不同的CPU,還可能編譯 cpu/$(CPU)下的其他文件;

b -- 然后,對于平臺/開發板相關的每個目錄、每個通用目錄都使用它們個字的Makefile生成相應的庫;

c -- 將a、b 步驟生成的.o .a文件按照 board / $(BOARDDIR)/config.mk文件中指定的代碼段起始地址、board/$(BOARDDIR)/config.mk文件中指定的代碼段起始地址、board/$(BOARDDIR)/U-Boot.lds鏈接腳本進行鏈接。

d -- 第c步得到的是ELF格式的U-Boot,后面的Makefile還會將它轉換成二進制格式、S-Record格式。

總結

以上是生活随笔為你收集整理的Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。