資料介紹
[摘要] 由于Linux的獨(dú)特優(yōu)勢(shì),使越來(lái)越多的企業(yè)和科研機(jī)構(gòu)把目光轉(zhuǎn)向Linux的開(kāi)發(fā)和研究上。目前Linux最新的穩(wěn)定內(nèi)核版本為2.6.17,但是當(dāng)今絕大部分對(duì)于Linux Makefile的介紹文章都是基于2.4內(nèi)核的,可以說(shuō)關(guān)于2.6內(nèi)核Makefile相關(guān)的文章鳳毛麟角,筆者抽時(shí)間完成了這篇分析文章,讓讀者迅速熟悉Linux最新Makefile體系,從而加深對(duì)內(nèi)核的理解,同時(shí)也希望能對(duì)Linux在公司的推廣起到一定的推動(dòng)作用,算是拋磚引玉吧!
1 Makefile組織層次
Linux的Make體系由如下幾部分組成:
? 頂層Makefile
頂層Makefile通過(guò)讀取配置文件,遞歸編譯內(nèi)核代碼樹(shù)的相關(guān)目錄,從而產(chǎn)生兩個(gè)重要的目標(biāo)文件:vmlinux和模塊。
? 內(nèi)核相關(guān)Makefile
位于arch/$(ARCH) 目錄下,為頂層Makefile提供與具體硬件體協(xié)結(jié)構(gòu)相關(guān)的信息。
? 公共編譯規(guī)則定義文件。
包括Makefile.build 、Makefile.clean、Makefile.lib、Makefile.host等文件組成。這些文件位于scripts目錄中,定義了編譯需要的公共的規(guī)則和定義。
? 內(nèi)核配置文件 .config
通過(guò)調(diào)用make menuconfig或者make xconfig命令,用戶可以選擇需要的配置來(lái)生成期望的目標(biāo)文件。
? 其他Makefile
主要為整個(gè)Makefile體系提供各自模塊的目標(biāo)文件定義,上層Makefile根據(jù)它所定義的目標(biāo)來(lái)完成各自模塊的編譯。
2 Makefile的使用
在編譯內(nèi)核之前,用戶必須首先完成必要的配置。Linux內(nèi)核提供了數(shù)不勝數(shù)的功能,支持眾多的硬件體系結(jié)構(gòu),這就需要用戶對(duì)將要生成的內(nèi)核進(jìn)行裁減。內(nèi)核提供了多種不同的工具來(lái)簡(jiǎn)化內(nèi)核的配置,最簡(jiǎn)單的一種是字符界面下命令行工具:
make config
這個(gè)工具會(huì)依次遍歷內(nèi)核所有的配置項(xiàng),要求用戶進(jìn)行逐項(xiàng)的選擇配置。這個(gè)工具會(huì)耗費(fèi)用戶太多時(shí)間,除非萬(wàn)不得以(你的編譯主機(jī)不支持其他配置工具)一般不建議使用。
用戶還可以使用利用ncurse庫(kù)編制的圖形界面工具,這就是大名鼎鼎的:
make menuconfig
相信以前對(duì)2.4內(nèi)核比較熟悉的用戶一定不會(huì)陌生。當(dāng)然在2.6內(nèi)核中提供了更漂亮和方便的基于X11的圖形配置工具:
make xconfig
當(dāng)用戶使用這個(gè)工具對(duì)Linux內(nèi)核進(jìn)行配置時(shí),界面下方會(huì)出現(xiàn)這個(gè)配置項(xiàng)相關(guān)的幫助信息和簡(jiǎn)單描述,當(dāng)你對(duì)內(nèi)核配置選項(xiàng)不太熟悉時(shí),建議你使用這個(gè)工具來(lái)進(jìn)行內(nèi)核配置。
當(dāng)用戶完成配置后,配置工具會(huì)自動(dòng)生成.config文件,它被保存在內(nèi)核代碼樹(shù)的根目錄下。用戶可以很容易找到它,當(dāng)然用戶也可以直接對(duì)這個(gè)文件進(jìn)行簡(jiǎn)單的修改。但是當(dāng)你修改過(guò)配置文件之后,你必須通過(guò)下面的命令來(lái)驗(yàn)證和更新配置:
make oldconfig
跟2.4版本的不同之處在于,用戶不需要顯示的調(diào)用make dep命令來(lái)生成依賴(lài)文件,內(nèi)核會(huì)自動(dòng)維護(hù)代碼間的依賴(lài)關(guān)系。
當(dāng)一切工作完成以后,用戶只需要簡(jiǎn)單鍵入make,剩下所有的工作makefile就會(huì)自動(dòng)替你完成了。
3 Makefile編譯流程
當(dāng)用戶使用Linux的Makefile編譯內(nèi)核版本時(shí),Makefile的編譯流程如下:
? 使用命令行或者圖形界面配置工具,對(duì)內(nèi)核進(jìn)行裁減,生成.config配置文件
? 保存內(nèi)核版本信息到 include/linux/version.h
? 產(chǎn)生符號(hào)鏈接 include/asm,指向?qū)嶋H目錄 include/asm-$(ARCH)
? 為最終目標(biāo)文件的生成進(jìn)行必要的準(zhǔn)備工作
? 遞歸進(jìn)入 /init 、/core、 /drivers、 /net、 /lib等目錄和其中的子目錄來(lái)編譯生成所有的目標(biāo)文件
? 鏈接上述過(guò)程產(chǎn)生的目標(biāo)文件生成vmlinux,vmlinux存放在內(nèi)核代碼樹(shù)的根目錄下
? 最后根據(jù) arch/$(ARCH)/Makefile文件定義的后期編譯的處理規(guī)則建立最終的映象bootimage,包括創(chuàng)建引導(dǎo)記錄、準(zhǔn)備initrd映象和相關(guān)處理
4 Makefile關(guān)鍵規(guī)則和定義描述
1) 目標(biāo)定義
目標(biāo)定義是Makefile文件的核心部分,目標(biāo)定義通知Makefile需要生成哪些目標(biāo)文件、如何根據(jù)特殊的編譯選項(xiàng)鏈接目標(biāo)文件,同時(shí)控制哪些子目錄要遞歸進(jìn)入進(jìn)行編譯。
這個(gè)例子Makefile文件位于/fs/ext2目錄 :
#
# Makefile for the linux ext2-filesystem routines.
#
obj-$(CONFIG_EXT2_FS) += ext2.o
ext2-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
ioctl.o namei.o super.o symlink.o
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o
ext2-$(CONFIG_EXT2_FS_POSIX_ACL) += acl.o
ext2-$(CONFIG_EXT2_FS_SECURITY) += xattr_security.o
ext2-$(CONFIG_EXT2_FS_XIP) += xip.o
這表示與ext2相關(guān)的目標(biāo)文件由 ext2-y定義的文件列表組成,其中ext2-$(*)是由內(nèi)核配置文件.config中的配置項(xiàng)決定,最終Makefile會(huì)在這個(gè)目錄下統(tǒng)一生成一個(gè)目標(biāo)文件ext2.o(由obj-$(CONFIG_EXT2_FS)決定)。其中obj-y表示為生成vmlinux文件所需要的目標(biāo)文件集合,具體的文件依賴(lài)于內(nèi)核配置。
Makefile會(huì)編譯所有的$(obj-y)中定義的文件,然后調(diào)用鏈接器將這些文件鏈接到built-in.o文件中。最終built-in.o文件通過(guò)頂層Makefile鏈接到vmlinux中。值得注意的是$(obj-y)的文件順序很重要。列表文件可以重復(fù),文件第一次出現(xiàn)時(shí)將會(huì)鏈接到built-in.o中,后來(lái)出現(xiàn)的同名文件將會(huì)被忽略。文件順序直接決定了他們被調(diào)用的順序,這一點(diǎn)讀者需要特別注意。
讀者可能會(huì)在某些Makefile中發(fā)現(xiàn)lib-y定義,所有包含在lib-y定義中的目標(biāo)文件都將會(huì)被編譯到該目錄下一個(gè)統(tǒng)一的庫(kù)文件中。值得注意的是lib-y定義一般被限制在 lib 和arch/$(ARCH)/lib 目錄中。
體系makefile文件和頂層makefile文件共同定義了如何建立vmlinux文件的規(guī)則。
$(head-y) 列舉首先鏈接到vmlinux的對(duì)象文件。
$(libs-y) 列舉了能夠找到lib.a文件的目錄。
其余的變量列舉了能夠找到內(nèi)嵌對(duì)象文件的目錄。
$(init-y) 列舉的對(duì)象位于$(head-y)對(duì)象之后。
然后是如下位置順序:
$(core-y), $(libs-y), $(drivers-y) 和 $(net-y)。
頂層makefile定義了所有通用目錄,arch/$(ARCH)/Makefile文件只需增加體系相關(guān)的目錄。
1 Makefile組織層次
Linux的Make體系由如下幾部分組成:
? 頂層Makefile
頂層Makefile通過(guò)讀取配置文件,遞歸編譯內(nèi)核代碼樹(shù)的相關(guān)目錄,從而產(chǎn)生兩個(gè)重要的目標(biāo)文件:vmlinux和模塊。
? 內(nèi)核相關(guān)Makefile
位于arch/$(ARCH) 目錄下,為頂層Makefile提供與具體硬件體協(xié)結(jié)構(gòu)相關(guān)的信息。
? 公共編譯規(guī)則定義文件。
包括Makefile.build 、Makefile.clean、Makefile.lib、Makefile.host等文件組成。這些文件位于scripts目錄中,定義了編譯需要的公共的規(guī)則和定義。
? 內(nèi)核配置文件 .config
通過(guò)調(diào)用make menuconfig或者make xconfig命令,用戶可以選擇需要的配置來(lái)生成期望的目標(biāo)文件。
? 其他Makefile
主要為整個(gè)Makefile體系提供各自模塊的目標(biāo)文件定義,上層Makefile根據(jù)它所定義的目標(biāo)來(lái)完成各自模塊的編譯。
2 Makefile的使用
在編譯內(nèi)核之前,用戶必須首先完成必要的配置。Linux內(nèi)核提供了數(shù)不勝數(shù)的功能,支持眾多的硬件體系結(jié)構(gòu),這就需要用戶對(duì)將要生成的內(nèi)核進(jìn)行裁減。內(nèi)核提供了多種不同的工具來(lái)簡(jiǎn)化內(nèi)核的配置,最簡(jiǎn)單的一種是字符界面下命令行工具:
make config
這個(gè)工具會(huì)依次遍歷內(nèi)核所有的配置項(xiàng),要求用戶進(jìn)行逐項(xiàng)的選擇配置。這個(gè)工具會(huì)耗費(fèi)用戶太多時(shí)間,除非萬(wàn)不得以(你的編譯主機(jī)不支持其他配置工具)一般不建議使用。
用戶還可以使用利用ncurse庫(kù)編制的圖形界面工具,這就是大名鼎鼎的:
make menuconfig
相信以前對(duì)2.4內(nèi)核比較熟悉的用戶一定不會(huì)陌生。當(dāng)然在2.6內(nèi)核中提供了更漂亮和方便的基于X11的圖形配置工具:
make xconfig
當(dāng)用戶使用這個(gè)工具對(duì)Linux內(nèi)核進(jìn)行配置時(shí),界面下方會(huì)出現(xiàn)這個(gè)配置項(xiàng)相關(guān)的幫助信息和簡(jiǎn)單描述,當(dāng)你對(duì)內(nèi)核配置選項(xiàng)不太熟悉時(shí),建議你使用這個(gè)工具來(lái)進(jìn)行內(nèi)核配置。
當(dāng)用戶完成配置后,配置工具會(huì)自動(dòng)生成.config文件,它被保存在內(nèi)核代碼樹(shù)的根目錄下。用戶可以很容易找到它,當(dāng)然用戶也可以直接對(duì)這個(gè)文件進(jìn)行簡(jiǎn)單的修改。但是當(dāng)你修改過(guò)配置文件之后,你必須通過(guò)下面的命令來(lái)驗(yàn)證和更新配置:
make oldconfig
跟2.4版本的不同之處在于,用戶不需要顯示的調(diào)用make dep命令來(lái)生成依賴(lài)文件,內(nèi)核會(huì)自動(dòng)維護(hù)代碼間的依賴(lài)關(guān)系。
當(dāng)一切工作完成以后,用戶只需要簡(jiǎn)單鍵入make,剩下所有的工作makefile就會(huì)自動(dòng)替你完成了。
3 Makefile編譯流程
當(dāng)用戶使用Linux的Makefile編譯內(nèi)核版本時(shí),Makefile的編譯流程如下:
? 使用命令行或者圖形界面配置工具,對(duì)內(nèi)核進(jìn)行裁減,生成.config配置文件
? 保存內(nèi)核版本信息到 include/linux/version.h
? 產(chǎn)生符號(hào)鏈接 include/asm,指向?qū)嶋H目錄 include/asm-$(ARCH)
? 為最終目標(biāo)文件的生成進(jìn)行必要的準(zhǔn)備工作
? 遞歸進(jìn)入 /init 、/core、 /drivers、 /net、 /lib等目錄和其中的子目錄來(lái)編譯生成所有的目標(biāo)文件
? 鏈接上述過(guò)程產(chǎn)生的目標(biāo)文件生成vmlinux,vmlinux存放在內(nèi)核代碼樹(shù)的根目錄下
? 最后根據(jù) arch/$(ARCH)/Makefile文件定義的后期編譯的處理規(guī)則建立最終的映象bootimage,包括創(chuàng)建引導(dǎo)記錄、準(zhǔn)備initrd映象和相關(guān)處理
4 Makefile關(guān)鍵規(guī)則和定義描述
1) 目標(biāo)定義
目標(biāo)定義是Makefile文件的核心部分,目標(biāo)定義通知Makefile需要生成哪些目標(biāo)文件、如何根據(jù)特殊的編譯選項(xiàng)鏈接目標(biāo)文件,同時(shí)控制哪些子目錄要遞歸進(jìn)入進(jìn)行編譯。
這個(gè)例子Makefile文件位于/fs/ext2目錄 :
#
# Makefile for the linux ext2-filesystem routines.
#
obj-$(CONFIG_EXT2_FS) += ext2.o
ext2-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
ioctl.o namei.o super.o symlink.o
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o
ext2-$(CONFIG_EXT2_FS_POSIX_ACL) += acl.o
ext2-$(CONFIG_EXT2_FS_SECURITY) += xattr_security.o
ext2-$(CONFIG_EXT2_FS_XIP) += xip.o
這表示與ext2相關(guān)的目標(biāo)文件由 ext2-y定義的文件列表組成,其中ext2-$(*)是由內(nèi)核配置文件.config中的配置項(xiàng)決定,最終Makefile會(huì)在這個(gè)目錄下統(tǒng)一生成一個(gè)目標(biāo)文件ext2.o(由obj-$(CONFIG_EXT2_FS)決定)。其中obj-y表示為生成vmlinux文件所需要的目標(biāo)文件集合,具體的文件依賴(lài)于內(nèi)核配置。
Makefile會(huì)編譯所有的$(obj-y)中定義的文件,然后調(diào)用鏈接器將這些文件鏈接到built-in.o文件中。最終built-in.o文件通過(guò)頂層Makefile鏈接到vmlinux中。值得注意的是$(obj-y)的文件順序很重要。列表文件可以重復(fù),文件第一次出現(xiàn)時(shí)將會(huì)鏈接到built-in.o中,后來(lái)出現(xiàn)的同名文件將會(huì)被忽略。文件順序直接決定了他們被調(diào)用的順序,這一點(diǎn)讀者需要特別注意。
讀者可能會(huì)在某些Makefile中發(fā)現(xiàn)lib-y定義,所有包含在lib-y定義中的目標(biāo)文件都將會(huì)被編譯到該目錄下一個(gè)統(tǒng)一的庫(kù)文件中。值得注意的是lib-y定義一般被限制在 lib 和arch/$(ARCH)/lib 目錄中。
體系makefile文件和頂層makefile文件共同定義了如何建立vmlinux文件的規(guī)則。
$(head-y) 列舉首先鏈接到vmlinux的對(duì)象文件。
$(libs-y) 列舉了能夠找到lib.a文件的目錄。
其余的變量列舉了能夠找到內(nèi)嵌對(duì)象文件的目錄。
$(init-y) 列舉的對(duì)象位于$(head-y)對(duì)象之后。
然后是如下位置順序:
$(core-y), $(libs-y), $(drivers-y) 和 $(net-y)。
頂層makefile定義了所有通用目錄,arch/$(ARCH)/Makefile文件只需增加體系相關(guān)的目錄。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式LINUX系統(tǒng)內(nèi)核和內(nèi)核模塊調(diào)試
- Linux內(nèi)核GPIO操作函數(shù)的詳解分析 28次下載
- LINUX內(nèi)核源代碼情景分析下冊(cè)PDF電子書(shū)免費(fèi)下載 98次下載
- Linux最新2.6內(nèi)核的Makefile體系詳細(xì)資料分析 0次下載
- Linux操作系統(tǒng)分析與實(shí)踐PDF電子書(shū)免費(fèi)下載 15次下載
- linux內(nèi)核入門(mén)教材之linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)第二版中文版免費(fèi)下載 0次下載
- 在Linux 2.6內(nèi)核下編譯可以加載的內(nèi)核模塊解析 0次下載
- 基于OMAP的PDA的Linux 2.6移植 Linux 2.6 Porting to PDA based on OMAP 6次下載
- 基于Linux 2.6內(nèi)核Makefile分析 0次下載
- Linux內(nèi)核Makefile文件 14次下載
- linux2.6內(nèi)核設(shè)備驅(qū)動(dòng)模型精華 20次下載
- linux內(nèi)核啟動(dòng)內(nèi)核解壓過(guò)程分析 1次下載
- 編譯Linux2.6內(nèi)核并添加一個(gè)系統(tǒng)調(diào)用 46次下載
- μClinux-kernel-2.6芯片級(jí)移植分析與實(shí)現(xiàn)
- Linux 2.6進(jìn)程調(diào)度
- 獲取Linux內(nèi)核源碼的方法 514次閱讀
- Linux內(nèi)核自解壓過(guò)程分析 691次閱讀
- 三個(gè)Makefile模板分享 812次閱讀
- Linux 下的make 工具和 Makefile 859次閱讀
- Linux:QEMU調(diào)試內(nèi)核的步驟 3040次閱讀
- 深入linux內(nèi)核架構(gòu) Linux內(nèi)核架構(gòu)分析解讀 3604次閱讀
- Linux 5.4.1內(nèi)核已經(jīng)發(fā)布你期待使用嗎 3193次閱讀
- 一文詳解Linux內(nèi)核測(cè)試現(xiàn)狀 3091次閱讀
- Linux關(guān)于Makefile的用法介紹 1841次閱讀
- Linux內(nèi)核與Android的關(guān)系 4504次閱讀
- 基于Linux2.6內(nèi)核的實(shí)時(shí)性增強(qiáng)方案設(shè)計(jì) 930次閱讀
- 嵌入式系統(tǒng)Kconfig .config Makefile的聯(lián)系和區(qū)別 5517次閱讀
- Linux內(nèi)核地址映射模型與Linux內(nèi)核高端內(nèi)存詳解 3397次閱讀
- PowerPC平臺(tái)Linux的移植(二) 1194次閱讀
- Linux內(nèi)核開(kāi)發(fā)工具介紹 4641次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多