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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

uboot源码——主Makefile分析

發(fā)布時(shí)間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uboot源码——主Makefile分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下內(nèi)容源于朱有鵬嵌入式課程的學(xué)習(xí),如有侵權(quán),請(qǐng)告知?jiǎng)h除。


一、配置編譯初體驗(yàn)

1、uboot來(lái)源于官方(uboot官網(wǎng)下載),或者SoC官方(研發(fā)s5pv210芯片的公司推出的開發(fā)板,SMDKV210),或者具體的開發(fā)板的官方(深圳市九鼎科技,X210)。

  • 這里以針對(duì)x210開發(fā)板移植好的uboot進(jìn)行配置、編譯和分析。

2、步驟

  • 將源碼解壓在適當(dāng)?shù)哪夸浵?#xff1b;
  • 配置,即在uboot的根目錄下執(zhí)行make ?x210_sd_config
  • 編譯,即在uboot的根目錄下執(zhí)行make(或者make -j2,或者make -s,前者多線程編譯,后者靜默編譯)。


二、uboot的源目錄分析

1、包括文件、文件夾。

2、主要的文件有uboot根目錄下的mkconfig,Makefile,前者負(fù)責(zé)uboot的編譯,后者負(fù)責(zé)編譯。

3、主要的文件夾有board,cpu、common、include等。board文件夾中每個(gè)子文件夾表示一個(gè)開發(fā)板。cpu文件夾中每個(gè)子文件夾都是一個(gè)SoC系列。



三、uboot的配置分析

1、配置,即確定所使用的文件夾、文件的路徑。

2、總結(jié)

(1)在uboot的根目錄下執(zhí)行make ?x210_sd_config時(shí),x210_sd_config是目標(biāo),在主Makefile中有如下代碼:

x210_sd_config : unconfig@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk
  • 調(diào)用MKCONFIG所表示的腳本,即uboot根目錄下的mkconfig腳本
  • 該腳本接收6個(gè)參數(shù),分別是x210_sd,arm,s5pc11x,x210,samsung,s5pc110;
  • $(@:_config=)表示匹配后面帶有_config的參數(shù),并取除去_config的部分,即取x210_sd。

(2)在mkconfig腳本(見博客http://blog.csdn.net/oqqhutu12345678/article/details/73166954)

  • 創(chuàng)建符號(hào)鏈接;
  • 創(chuàng)建include/config.mk文件注意這里的config.mk不是根目錄下的config.mk文件;
  • 創(chuàng)建include/config.h文件

(3)創(chuàng)建include/config.mk文件是為了讓主Makefile在第133行包含。(見四7)

(4)include/config.h文件中,僅有一行代碼:#include<configs/x210_sd.h>

  • 這里的configs是include文件夾里的一個(gè)子文件夾;
  • configs下的每個(gè)文件對(duì)應(yīng)一個(gè)開發(fā)板的頭文件,它是一些宏定義配置文件,是移植時(shí)最主要的文件。
  • 其中x210_sd.h被用來(lái)生成autoconfig.mk文件。
  • autoconfig.mk文件被主Makefile引入,指導(dǎo)整個(gè)編譯過(guò)程,此文件中的宏會(huì)影響uboot中的大部分.C文件中的一些條件編譯的選擇,從而實(shí)現(xiàn)最終的可移植性。

四、uboot的主Makefile分析

1、uboot的版本號(hào)(24~29行)

VERSION = 1 PATCHLEVEL = 3 SUBLEVEL = 4 EXTRAVERSION = U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) VERSION_FILE = $(obj)include/version_autogenerated.h

2、(1)export ? HOSTARCH ?HOSTOS,HOSTARCH 、 HOSTOS分別表示主機(jī)的CPU架構(gòu)和操作系統(tǒng);

? ? ? (2) ?| ?表示管道?


3、靜默編譯:make -s

  • -s表示參數(shù),silent執(zhí)行(50~54行)

4、2種編譯管理方法(78~123行)

(1)原地編譯:編譯得到的文件和源文件在同一個(gè)目錄下,簡(jiǎn)單但是會(huì)污染源目錄;

(2)單獨(dú)文件夾輸出的編譯:設(shè)置一個(gè)輸出目錄,承載編譯輸出結(jié)果。

(3)默認(rèn)原地編譯。

(4)指定具體的輸出目錄方法

  • a、編譯時(shí),用make O=輸出目錄;
  • b、或者先export BUILD_DIR=輸出目錄,然后編譯時(shí)直接make。

5、OBJTREE,SRCTREE,TOPDIR

  • 三者分別表示編譯后,.o文件存放的目錄的根目錄( \root\uboot\ ),源碼目錄的根目錄(\root\uboot\),頂層目錄。原地編譯時(shí),前者和中者目錄是相等的。

6、MKCONFIG(101行):是Makefile中定義的一個(gè)變量,值為源碼根目錄下的mkconfig,而mkconfig是一個(gè)腳本。


7、$(obj)include/config.mk(主Makefile中的133行)

  • include/config.mk文件是在配置階段生成的,見本文的三2(2)。 此文件的內(nèi)容如下:

ARCH = arm CPU = s5pc11x BOARD = x210 VENDOR = samsung SOC = s5pc110

  • 配置值來(lái)自主Makefile第2589行的配置項(xiàng)里的傳參;
  • 在主Makefile中的134行將這些變量export出來(lái)作為環(huán)境變量。

8、ARCH和CROSS_COMPILE(主Makefile中的136~182行)

  • 這兩個(gè)是環(huán)境變量;
  • ARCH定義為當(dāng)前編譯的目標(biāo)的CPU架構(gòu),在這里是ARM;
  • CROSS_COMPILE定義交叉編譯工具的前綴;


---------------------------------------------根目錄下的config.mk文件-----------------------------------------------------------------

見博客http://blog.csdn.net/oqqhutu12345678/article/details/73167054

9、include $(TOPDIR)/config.mk(主Makefile中的185行)

  • 這是根目錄下的config.mk文件,不是include/config.mk

10、編譯工具定義(根目錄下的config.mk文件中的94~107行)

AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld CC = $(CROSS_COMPILE)gcc CPP = $(CC) -E AR = $(CROSS_COMPILE)ar NM = $(CROSS_COMPILE)nm LDR = $(CROSS_COMPILE)ldr STRIP = $(CROSS_COMPILE)strip OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump RANLIB = $(CROSS_COMPILE)RANLIB

11、包含開發(fā)板配置項(xiàng)目(根目錄下的config.mk文件中的112行)

(1)代碼為

sinclude $(OBJTREE)/include/autoconf.mk(2)autoconf.mk是在配置中自動(dòng)生成的,參見三2(4),它是一些宏,指導(dǎo)編譯進(jìn)行方向。

(3)原料是include/configs/x210_sb.h,include/configs下的每個(gè)頭文件對(duì)應(yīng)一個(gè)開發(fā)板。


12、鏈接腳本(根目錄下的config.mk文件中的142~149行)

(1)如果定義了CONFIG_NAND_U_BOOT,則鏈接腳本是u-boot-nand.lds,沒有定義則鏈接腳本為u-boot.lds。

  • uboot的最終鏈接地址是在Makefile中用-Ttext xxxx的形式來(lái)指定,好像和鏈接鏈接腳本沒有多大的關(guān)聯(lián)?

(2)實(shí)際在board\samsung\x210下的u-boot.lds。見博文http://blog.csdn.net/oqqhutu12345678/article/details/73166096


13、TEXT_BASE(在根目錄下的config.mk中的156~158行):為整個(gè)uboot鏈接時(shí)指定鏈接地址。


14、自動(dòng)推導(dǎo)規(guī)則(在根目錄下的config.mk中的239~256行)。

-------------------------------------------------------------------------------------------------------------------------------------------------


15、在主Makefile中,第291行出現(xiàn)了整個(gè)Makefile的第一個(gè)目標(biāo)ALL,其實(shí)我們make時(shí),就是make ALL。



綜上所述,整個(gè)配置和編譯過(guò)程涉及的文件主要有:

主目錄下的Makefile文件

根目錄下的config.mk文件(被主Makefile文件調(diào)用)

根目錄下的mkconfig文件(配置階段的配置腳本)。


總結(jié)

以上是生活随笔為你收集整理的uboot源码——主Makefile分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。