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