u-boot分析之Makefile結構分析
我們分析一個檔案的時候,想知道它是什麼結構?是怎麼連結的,最好的方法就是分析它的makefile檔案。
之前說過u-boot配置、編譯;
為什麼知道先配置後編譯?原始碼中有個readme檔案;
先從makefile檔案中分析一下配置過程;
執行make的時候,就相當執行這條命令:
我們先在Makefile檔案中搜索一下 MKCONFIG看一下是什麼東西?
從上可以看出,在原始檔的目錄下面有一個mkconfig檔案;
我們執行配置命令的時候,就相當執行這條指令碼命令:
接著需要開啟mkconfig檔案分析。mkconfig檔案程式碼如下:
#!/bin/sh -e
# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
#
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <[email protected]>
#
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
#分析傳入的引數裡面有沒有 "--",“-a”等
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done
#判斷BOARD_NAME有沒有定義,如果沒有則為:$1,其中$1為傳入的第一個引數,依次類推
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
#判斷引數的個數,不合條件就退出
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1
#列印這一句話
echo "Configuring for ${BOARD_NAME} board..."
#
# Create link to architecture specific headers
#
#如果這兩個不相等,可以看一下makefile檔案,這兩個是從makefile裡面來的
if [ "$SRCTREE" != "$OBJTREE" ] ; then
mkdir -p ${OBJTREE}/include
mkdir -p ${OBJTREE}/include2
cd ${OBJTREE}/include2
rm -f asm
ln -s ${SRCTREE}/include/asm-$2 asm
LNPREFIX="../../include2/asm/"
cd ../include
rm -rf asm-$2
rm -f asm
mkdir asm-$2
ln -s asm-$2 asm
else
#程式進入這裡分支
cd ./include
rm -f asm
#建立一個asm的連結檔案,它指向asm-;配置的時候臨時生成指向某一個架構,如果為i386架構,則為asm-i386
ln -s asm-$2 asm
fi
rm -f asm-$2/arch
#如果第六個引數為NULL或者為空
if [ -z "$6" -o "$6" = "NULL" ] ; then
ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
#我們這裡執行這個分支
#建立一個連結檔案,指向${LNPREFIX}arch-$6,其中$6為傳進來的引數
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi
if [ "$2" = "arm" ] ; then
rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi
#
# Create include file for Make
#
#新建一個config.mk檔案,> 表示新建
echo "ARCH = $2" > config.mk
#在config.mk追加, >> 表示追加
echo "CPU = $3" >> config.mk
echo "BOARD = $4" >> config.mk
#判斷第5個引數,追加 VENDOR = xx
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
#判斷第6個引數,追加 SOC = xx
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
#
# Create board specific header file
#
if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
#把以下內容追加到config.h檔案中去
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h
#其中 #include <configs/$1.h> 就是生成的配置檔案
exit 0
配置過程分析完畢;
接著分析一下編譯過程,在makefile檔案裡面,有如下程式碼:
include $(OBJTREE)/include/config.mk
這裡的config.mk就是上面配置生成的配置檔案,這就將配置與編譯結合起來了;
繼續往下檢視makefile檔案
#########################################################################
# U-Boot objects....order is important (i.e. start must be first)
OBJS = cpu/$(CPU)/start.o
把所有編譯好了的檔案打包一個.a庫
LIBS += net/libnet.a
LIBS += disk/libdisk.a
LIBS += rtc/librtc.a
LIBS += dtt/libdtt.a
LIBS += drivers/libdrivers.a
LIBS += drivers/nand/libnand.a
LIBS += drivers/nand_legacy/libnand_legacy.a
LIBS += drivers/sk98lin/libsk98lin.a
LIBS += post/libpost.a post/cpu/libcpu.a
ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)
all: $(ALL)
$(obj)u-boot.hex: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O ihex $< [email protected]
$(obj)u-boot.srec: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O srec $< [email protected]
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< [email protected]
$(obj)u-boot.img: $(obj)u-boot.bin
./tools/mkimage -A $(ARCH) -T firmware -C none \
-a $(TEXT_BASE) -e 0 \
-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \
-d $< [email protected]
$(obj)u-boot.dis: $(obj)u-boot
$(OBJDUMP) -d $< > [email protected]
$(obj)u-boot: depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
-Map u-boot.map -o u-boot
生成了u-boot.bin檔案,生成的依賴於u-boot,…..
相關推薦
u-boot啟動之Makefile結構分析
先進行配置命令: make smdk2410_config 在Makefile檔案中: smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24
“第09課第2節 u-boot分析之Makefile結構分析”之學習筆記
--start-group lib_generic/libgeneric.a board/100ask24x0/lib100ask24x0.a cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a l
09課02節 u-boot-1.1.6分析之Makefile結構分析
我們配置時 是make 100ask24x0_config 這條命令到底幹了什麼?現在分析一下 開啟原始碼目錄樹頂層的makefile 就相當於執行這條命令 @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL
u-boot分析之Makefile結構分析
我們分析一個檔案的時候,想知道它是什麼結構?是怎麼連結的,最好的方法就是分析它的makefile檔案。 之前說過u-boot配置、編譯; 為什麼知道先配置後編譯?原始碼中有個readme檔案; 先從makefile檔案中分析一下配置過程; 執行mak
linux-2.6.22.6內核啟動分析之Makefile文件
all pts machine bootp ipc 找到 當前目錄 比較 查找 學習目標 分析Makefile文件,了解內核中的哪些文件被編譯,如何被編譯,連接時順序如何確定! Linux內核源碼中包含很多的Makefile文件,這些Makefile文件又包含其它
STL原始碼分析之pair結構體
前言 前面在分析set, RB-tree都有在insert實現中出現pair, 下節分析map的時候更會經常出現pair, 所以打算在之前先對pair有個認識. pair是一個有兩個變數的結構體, 即誰都可以直接呼叫它的變數, 畢竟struct預設許可權都是public, 將兩個
u-boot sdfuse命令燒錄分析----從SD卡載入核心
在u-boot移植過程中,由於u-boot燒錄在SD卡中,因此老是載入核心失敗,是什麼原因呢?在載入核心的列印資訊中有這樣類似的資訊: reading kernel.. 1120, 10240 MMC read: dev # 1, block # 112
U-boot根目錄下的mkconfig分析
原文地址:http://blog.csdn.net/qq_28992301/article/details/51812103 U-boot根目錄下的mkconfig分析 此檔案位於uboot原始碼的根目錄下,是原始碼自帶的shell指令碼檔案,主要功能是建立符號連結以及一些標
JVM之記憶體結構分析
JVM在執行Java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。這些區域都有各自的用途,以及建立和銷燬的時間,有的區域隨著虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。JVM所管理的記憶體主要包括程式計數器、Java虛擬機器棧、本地方法棧
react-native之專案結構分析
前言 庖丁為文惠君解牛,手之所觸,肩之所倚,足之所履,膝之所踦,砉然響然,奏刀騞然,莫不中音。合於桑林之舞,乃中經首之會。 熟悉專案的結構,是開發的基本也是技術提升的一個重要途徑,現總結下自己對react-native專案結構的分析與理解。 正
【imx6ul】U-Boot 2016.03執行過程分析-ARM Cortex-A7
uboot組織架構正在朝著linux架構方向發展,不同版本稍有不同,一下以U-Boot 2016.03為例。分析入口:以u-boot.lds(其決定了各個段的排布方式)開始:1、u-boot.lds://設定輸出檔案大小端格式 OUTPUT_FORMAT("elf32-lit
U-boot初始化階段流程分析
U-boot的初始化主要分為兩個階段 第一階段:主要是SOC內部的初始化,板級的初始化比較少,所以移植的修改量比較小。此階段由組合語言編寫,程式碼主體分佈在start.S和lowlevel_init.S中。 其中start.S作為主幹,其主要流程為: 注:
Springboot原始碼分析之專案結構
摘要: 無論是從IDEA還是其他的SDS開發工具亦或是https://start.spring.io/ 進行解壓,我們都會得到同樣的一個pom.xml檔案 xml <?xml version="1.0" encoding="UTF-8"?> <project xm
JFinal源碼 分析之 Core包分析
代碼 types nmap null 可能 tool oca 開發 rep ActionHandler.java 這個類繼承了上面 說的Handler類,首先我們 上 幾個屬性 ,下面幾個 屬性我們 需要 關心哪些東西 呢?首先 是ActionMapping和Rend
【kubernetes/k8s原始碼分析】kubelet原始碼分析之cdvisor原始碼分析
資料流 UnsecuredDependencies -> run 1. cadvisor.New初始化 if kubeDeps.CAdvisorInterface == nil { imageFsInfoProvider := cadv
統計分析之單因素分析、多因素分析(多指標聯合分析)與ROC曲線的繪製——附SPSS操作指南
Q1.什麼是單因素分析和多因素分析? 單因素分析(monofactor analysis)是指在一個時間點上對某一變數的分析。目的在於描述事實。 多因素分析亦稱“多因素指數體系
Loadrunner測試結果分析之資料過濾分析
測試方法:按照“一般日間聯機交易和預約轉賬測試模型”規定的交易和配比,採用vu等比壓力梯度遞增方式施壓,壓力增長直至出現系統瓶頸或資源超過安全範圍為止。 其他的測試策略可以參考:http://blog.51cto.com/372550/2068876而在綜合性混合場景進行壓力測試下,如果通過loadru
U-boot移植之配置及編譯詳解 1
1.Uboot 的配置過程主要涉及四個檔案: uboot/makefile uboot/mkconfig uboot/config.mk uboot/board/samsung/smdkc110/u-boot.lds 2
Android7.0原始碼分析之Binder——Client分析
Binder Client分析,咋一看,就那麼四個關鍵方法:getService()、addService()、checkService()、listServices()。四個方法原理都差不多,以下僅
3D分析之可見性分析工具
ArcGIS 通過分析功能面的視域來確定不同區域中的可見性。 視域的計算:如果僅有一個觀測點,則為可從觀測點看到的單元賦值 1,為無法從觀測點看到的所有單元賦值 0。 1. Construct