uboot分析之Makefile(一)

牢騷:

    嵌入式行業當中,大都以做產品和解決方案居多。對於做產品的公司,BSP相關的工作相對少些甚至沒有直接讓方案公司來搞定。其實底層工作是還可以細分的,比如BSP和內核驅動。過來的人都清楚,底層工作有模式,但是不像應用開發有太多的套路,沒有一個明確的梯形上升空間,總之下面出了問題,都是你的事。由於基於產品爲目的開發比比皆是,使得大家忽略的uboot的功效。其實uboot也是一個博大精深的領地。最近要開發一個項目,從硬件一點一點開始,其中涉及大量BSP內容,正好再從頭整理一遍,回顧一下當年的初心從走路開始,廢話不多說,下面go:

一、版本的選擇:

下載地址:ftp://ftp.denx.de/pub/u-boot/

    並不是越新的越好,新版本和老闆可能對於你的cpu和board內容都是一樣的,增加的僅僅是新的cpu和評估板。我個人認爲還有一個 比較關鍵的就是“目錄結構”的改變。不僅僅是把文件調換的位置,而是新生一些文件將共性的東西抽象再一起,這個我們稍後以及在今後的連載中(我會強迫自己連載)詳細的說。如今的uboot雖然邏輯功能沒變但已經不是韋老師的那個時代(韋東山老師,業界大牛人現在依然活躍,當年一邊工作一邊學習老師的視頻,得到了魚也學到了漁)。我選用的版本是u-boot-2013.10.tar.bz2 沒有具體的原因,公司的服務器上出現概率最高的版本,想必很多同事都弄過,便於交流而已。硬件用ARM Cortex A8。

二、Makefile分析


    目錄展開入上圖。

1、版本號

VERSION = 2013      //主版本號
PATCHLEVEL = 10     //補丁的等級
SUBLEVEL =          //次版本號
EXTRAVERSION =		//附加的信息,可以自己根據需要DIY
ifneq "$(SUBLEVEL)" "" //判斷SUBLEVEL是否不爲空
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
else
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
endif

其中要生成的版本號由U_BOOT_VERSION= 表示

TIMESTAMP_FILE = $(obj)include/generated/timestamp_autogenerated.h
VERSION_FILE = $(obj)include/generated/version_autogenerated.h
這兩行是在編譯的時候生成的現在去目錄找是看不到的。
2、兩個很重要的變量HOSTARCH HOSTOS

HOSTARCH := $(shell uname -m | \
	sed -e s/i.86/x86/ \
	    -e s/sun4u/sparc64/ \
	    -e s/arm.*/arm/ \
	    -e s/sa110/arm/ \
	    -e s/ppc64/powerpc/ \
	    -e s/ppc/powerpc/ \
	    -e s/macppc/powerpc/\
	    -e s/sh.*/sh/)

HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
	    sed -e 's/\(cygwin\).*/cygwin/')

export	HOSTARCH HOSTOS

HOSTARCH 的獲得看起來貌似有些複雜靜下心仔細看:

首先啓用了一個shell命令 uname -m 獲得本地計算機的體系結構,後面還有兩個關鍵點 一個 “|” 管道,還有一個sed字符串替換命令。

實現了用後面的字符串替換前面的字符串實現體系結構命名統一。例:-e s/arm.*/arm/ \  -e s/sa110/arm/ \ 都是替換成“arm”

HOSTOS 得到主機的操作系統 uname -s 得到的是 Linux,自己可以嘗試一下。

這兩個環境變量主要是得到本地環境的操作系統cpu的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章