Linux內核剖析(四)爲arm內核構建源碼樹

前面說到要作linux底層開發或者編寫Linux的驅動,必須創建內核源碼樹,以前咱們提到過在本機上構建源碼樹—-Linux內核剖析(三),其創建的源碼樹是針對i686平臺的,可是我麼嵌入式系統用的是arm平臺,這就須要咱們爲arm板交叉構建一份板子可用的內核源碼樹。linux

首先下載與你嵌入式系統平臺版本號一致的linux內核,個人版本爲2.6.35,固然若是你使用的是以前作好的板子,那麼內核源碼可能已經有了
咱們解壓縮咱們的內核源碼,並進入到內核源碼的根目錄markdown

tar -jxvf linux-2.6.35.tar.bz2 cd linux-2.6.35

 

而後執行make mrproper 命令,該命令確保源代碼目錄下沒有不正確的.o文件以及文件的互相依賴。ide

由於我是爲arm平臺編譯內核,須要用到交叉編譯工具(可從ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain站點下載)。工具

清理垃圾文件(非必須)


Linux下面去編譯項目以前,通常常會用make mrproper去先刪除以前編譯所生成的文件和配置文件,備份文件等,其中,mrproper和distclean,clean之間的區別,Linux內核源碼根目錄下面的makefile中,有很清晰的解釋:ui

help:
 @echo  'Cleaning targets:' @echo ' clean - Remove most generated files but keep the config and' @echo ' enough build support to build external modules' @echo ' mrproper - Remove all generated files + config + various backup files' @echo ' distclean - mrproper + remove editor backup and patch files'

mrproper究竟是什麼意思呢?爲何起了個這麼個看起來如此詭異的名字。this

在英文wiki對Mr. Clean的解釋提到了此點;spa

http://en.wikipedia.org/wiki/Mr._Clean.net

"make mrproper" is a command in the Linux kernel build system, used to "clean up" all files from past builds and restore the build directory to its original clean state. The reason "make mrproper" is used instead of "make mrclean" is because Linus Torvalds, the father of Linux, was familiar with the name "Mr. Proper" as this is the brand widely known in Europe."

 

總的來講,就是:首先,咱們要知道的是make mrproper想要作的事情是,清理舊的編譯生成的文件及其餘配置等文件,因此,至關於Clean,即咱們在現實世界中用清潔劑去清潔衛生,清理舊的,再也不須要的,髒東西。而現實世界中,保潔(P&G)公司的,有一個清潔產品方面的品牌,在美國叫作Mr.Clean,在歐洲叫作Mr.Proper,因此編譯以前的清理舊東西的命令,原先是用的make mrclean,即make Mr.Clean。只是後來被Linux之父Linus Torvalds改爲了make mrproper,即make Mr.Proper。因此,如今就變成了用make mrproper來清理以前的東西了。rest

看幫助能夠發現刪除的文件範圍從小到大依次爲:code

make clean < make mrproper < make distclean

 

查看源碼目錄樹的頂層目錄下的Makefile求證, 能夠發現, 執行make mrproper, 會先執行make clean, 執行make distclean以前, 會先執行make mrproper。

再回到make help的結果:

make clean      刪除大多數的編譯生成文件, 可是會保留內核的配置文件.config, 還有足夠的編譯支持來創建擴展模塊
make mrproper   刪除全部的編譯生成文件, 還有內核配置文件, 再加上各類備份文件,因此幾乎只在第一次執行內核編譯前才用這條命令
make distclean  mrproper刪除的文件, 加上編輯備份文件和一些補丁文件。

修改makefile


配置內核以前還要修改內核最上層目錄下的Makefile(linux-2.6.35/Makefile)
把文件中的ARCH ?= $(SUBARCH) 改成 ARCH =arm
CROSS_COMPILE ?= 改成CROSS_COMPILE =arm-linux-

這裏寫圖片描述

配置內核config


接着就是配置內核,可使用下面命令中的一個:

make config(基於文本的最爲傳統的配置界面,不推薦使用) make menuconfig(基於文本菜單的配置界面, 字符終端下推薦使用) make xconfig(基於圖形窗口模式的配置界面,Xwindow下推薦使用,要求QT被安裝) make gconfig(要求GTK+被安裝) make oldconfig(若是隻想在原來內核配置的基礎上修改一些小地方,會省去很多麻煩) make defconfig (使用源碼中默認的config配置)

目的都是生成一個.config文件,

注意:使用make menuconfig 須要安裝ncurses( sudo apt-get install ncurses-dev)

注意:若是要用make xconfig,則要先安裝libqt3-compat-headers( sudo apt-get install libqt3-compat-headers)

其中,make xconfig的界面最爲友好,若是你可使用Xwindow,你就用這個好了,這個比較方便,也好設置。若是你不能使用Xwindow,那麼就使用make

menuconfig好了。界面雖然比上面一個差點,總比make config的要好多了。 選擇相應的配置時,有三種選擇,它們分別表明的含義以下:

一直覺得make oldconfig的做用是將利用當前的.config覆蓋defconfig,從而使下次運行make config/menuconfig時的缺省設置成爲當前.config的設置,今天發現是個錯誤,須要澄清:

  1. 若是.config不存在,運行make config/menuconfig時的缺省設置由固化在各個Kconfig文件中各項目的缺省值決定。

  2. 若是.config存在,運行make config/menuconfig時的缺省設置便是當前.config的設置,若對設置進行了修改,.config將被更新。

  3. arch/arm/defconfig是一個缺省的配置文件,make defconfig時會根據這個文件生成當前的.config。

  4. arch/arm/configs文件夾中有許多命名爲xxx_defconfig的配置文件,若是運行make xxx_defconfig,當前.config文件會由xxx_defconfig文件生成。

  5. make oldconfig的做用是備份當前.config文件爲.config.old,如若make config/menuconfig設置不當可用於恢復先前的.config。

配置內容可參考相關文獻。

編譯內核鏡像


第三步:配置過內核以後,就能夠進行編譯了。執行如下命令中的一種:

make (生成一個壓縮的內核影像) make bzImage(生成一個使用gzip壓縮的內核)

這裏寫圖片描述

安裝內核模塊


執行make modules(編譯在內核配置時選中的模塊)在此過程當中可能會遇到某些模塊不能編譯經過,把相應模塊去除再執行make modules_install 安裝內核

安裝的內核在/lib/modules/2.6.35裏。

至此,針對arm平臺的內核樹安裝完成。

內核最上層的makefile在內核編譯過程當中起了決定性的做用,在編譯過程當中遇到的許多問題均可以在裏面獲得解決的思路,但願你們多看看。

相關文章
相關標籤/搜索