新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > u-boot的Makefile分析

        u-boot的Makefile分析

        作者: 時間:2018-09-11 來源:網絡 收藏

        U-BOOT是一個LINUX下的工程,在編譯之前必須已經安裝對應體系結構的交叉編譯環境,這里只針對ARM,編譯器系列軟件為arm-linux-*。

        本文引用地址:http://www.104case.com/article/201809/388885.htm

        U-BOOT的下載地址: http://sourceforge.net/projects/
        我下載的是1.1.6版本,一開始在FTP上下載了一個次新版,結果編譯失敗。1.1.6是沒問題的。

        源碼結構

        解壓就可以得到全部源程序。在頂層目錄下有18個子目錄,分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規則,可以分為3類。
        第1類目錄與處理器體系結構或者開發板硬件直接相關;
        第2類目錄是一些通用的函數或者驅動程序;
        第3類目錄是u-boot的應用程序、工具或者文檔。

        u-boot的源碼頂層目錄說明

        目 錄 特 性 解 釋 說 明
        board 平臺依賴 存放電路板相關的目錄文件,
        例如:RPXlite(mpc8xx)、
        smdk2410(arm920t)、
        sc520_cdp(x86) 等目錄

        cpu 平臺依賴 存放CPU相關的目錄文件
        例如:mpc8xx、ppc4xx、
        arm720t、arm920t、 xscale、i386等目錄

        lib_ppc 平臺依賴 存放對PowerPC體系結構通用的文件,
        主要用于實現PowerPC平臺通用的函數

        lib_arm 平臺依賴 存放對ARM體系結構通用的文件,
        主要用于實現ARM平臺通用的函數

        lib_i386 平臺依賴 存放對X86體系結構通用的文件,
        主要用于實現X86平臺通用的函數

        include 通用 頭文件和開發板配置文件,
        所有開發板的配置文件都在configs目錄下

        common 通用 通用的多功能函數實現
        lib_generic 通用 通用庫函數的實現
        net  通用 存放網絡的程序
        fs  通用 存放文件系統的程序
        post  通用 存放上電自檢程序
        drivers   通用 通用的設備驅動程序,主要有以太網接口的驅動
        disk   通用 硬盤接口程序
        rtc   通用 RTC的驅動程序
        dtt   通用 數字溫度測量器或者傳感器的驅動
        examples 應用例程 一些獨立運行的應用程序的例子,例如helloworld
        tools   工具 存放制作S-Record或者u-boot格式的映像等工具,
        例如mkimage

        doc   文檔 開發使用文檔

        u-boot的源代碼包含對幾十種處理器、數百種開發板的支持。可是對于特定的開發板,配置編譯過程只需要其中部分程序。這里具體以S3C2410 arm920t處理器為例,具體S3C2410處理器和開發板所依賴的程序,以及u-boot的通用函數和工具。

        編譯

        以smdk_2410板為例,編譯的過程分兩部:

        # make smdk2410_config
        # make

        頂層

        要了解一個LINUX工程的結構必須看懂,尤其是頂層的,沒辦法,UNIX世界就是這么無奈,什么東西都用文檔去管理、配置。首先在這方面我是個新手,時間所限只粗淺地看了一些規則。

        以smdk_2410為例,順序Makefile大致的流程及結構如下:

        1) Makefile中定義了源碼及生成的目標文件存放的目錄,目標文件存放目錄BUILD_DIR可以通過make O=dir 指定。如果沒有指定,則設定為源碼頂層目錄。一般編譯的時候不指定輸出目錄,則BUILD_DIR為空。其它目錄變量定義如下:

        #OBJTREE和LNDIR為存放生成文件的目錄,TOPDIR與SRCTREE為源碼所在目錄
        OBJTREE:= $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
        SRCTREE:= $(CURDIR)
        TOPDIR:= $(SRCTREE)
        LNDIR:= $(OBJTREE)
        exportTOPDIR SRCTREE OBJTREE

        2)定義變量MKCONFIG:這個變量指向一個腳本,即頂層目錄的mkconfig。

        MKCONFIG:= $(SRCTREE)/mkconfig
        export MKCONFIG

        在編譯U-BOOT之前,先要執行

        # make smdk2410_config

        smdk2410_config是Makefile的一個目標,定義如下:

        smdk2410_config:unconfig
        @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

        unconfig::
        @rm -f $(obj)include/config.h $(obj)include/config.mk
        $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp

        顯然,執行# make smdk2410_config時,先執行unconfig目標,注意不指定輸出目標時,obj,src變量均為空,unconfig下面的命令清理上一次執行make *_config時生成的頭文件和makefile的包含文件。主要是include/config.h 和include/config.mk文件。

        然后才執行命令

        @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
        MKCONFIG 是頂層目錄下的mkcofig腳本文件,后面五個是傳入的參數。

        對于smdk2410_config而言,mkconfig主要做三件事:

        在include文件夾下建立相應的文件(夾)軟連接,

        #如果是ARM體系將執行以下操作:
        #ln -s asm-arm asm

        #ln -s arch-s3c24x0 asm-arm/arch
        #ln -s proc-armv asm-arm/proc

        生成Makefile包含文件include/config.mk,內容很簡單,定義了四個變量:

        ARCH = arm
        CPU = arm920t
        BOARD = smdk2410
        SOC = s3c24x0

        生成include/config.h頭文件,只有一行:

        /* Automatically generated - do not edit */
        #include config/smdk2410.h


        上一頁 1 2 3 下一頁

        關鍵詞: Makefile u-boot 分析

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 浮山县| 浦城县| 大埔区| 武夷山市| 清远市| 宁阳县| 青龙| 嘉善县| 静宁县| 榆树市| 青海省| 漳平市| 江北区| 罗定市| 威信县| 宁河县| 隆化县| 盐山县| 白银市| 苗栗县| 怀仁县| 称多县| 元谋县| 喜德县| 仪征市| 土默特左旗| 三河市| 蓝田县| 固镇县| 邯郸县| 巨野县| 博野县| 柳江县| 文山县| 奉化市| 清远市| 拜城县| 靖州| 舒兰市| 汝阳县| 濮阳县|