歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

Linux內核入門

Linux內核入門 收藏
如何獲取Linux內核源代碼

下載Linux內核當然要去http://www.kernel.org/了,網站提供了兩種文件下載,一種是完整的Linux內核,另一種是內核增量補丁,它們都是tar歸檔壓縮包。除非你有特別的原因需要使用舊版本的Linux內核,否則你應該總是升級到最新版本。

使用Git

由Linus領頭的內核開發隊伍從幾年前就開始使用Git版本控制系統管理Linux內核了,而Git項目本身也是由Linus創建的,它和傳統的CVS不一樣,Git是分布式的,因此它的用法和工作流程很多開發人員可能會感到很陌生,但我強烈建議使用Git下載和管理Linux內核源代碼。

你可以使用下面的Git命令獲取Linus內核代碼樹的最新“推送”版本:
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

然後使用下面的命令將你的代碼樹與Linus的代碼樹最新狀態同步:
$ git pull

安裝內核源代碼

內核包有GNU zip(gzip)和bzip2格式。Bzip2是默認和首選格式,因為它的壓縮比通常比gzip更好,bzip2格式的Linux內核包一般采用linux-x.y.z.tar.bz2形式的文件名,這裡的x.y.z是內核源代碼的具體版本號,下載到源代碼包後,解壓和抽取就很簡單了,如果你下載的是bzip2包,運行:
$ tar xvjf linux-x.y.z.tar.bz2

如果你下載的是gzip包,則運行:
$ tar xvzf linux-x.y.z.tar.gz

無論執行上面哪一個命令,最後都會將源代碼解壓和抽取到linux-x.y.z目錄下,如果你使用Git下載和管理內核源代碼,你不需要下載tar包,只需要運行git clone命令,它就會自動下載和解壓。

內核源代碼通常都會安裝到/usr/src/linux下,但在開發的時候最好不要使用這個源代碼樹,因為針對你的C庫編譯的內核版本通常也鏈接到這裡的。

應用補丁

Linux內核開發人員會將自己的修改做成補丁與其它人員分享,而且補丁是增量的,增量補丁是從一個內核樹移動到另一個內核樹的有效方法,不用下載完整的內核包就可以升級內核,不僅可節省帶寬,也節省了內核升級時間,應用補丁之前先進入內核源代碼樹所在目錄,然後運行:
$ patch –p1 < ../patch-x.y.z

注意,補丁包也有明確的版本號,這裡的版本號與Linux內核源代碼的版本號要一致,內核和補丁版本號不一致時,強制應用補丁會引起意想不到的後果。

內核源代碼樹介紹

內核源代碼樹分為許多目錄,它們下面又包含許多子目錄,源代碼樹的頂級目錄及其描述參見下表。

目錄                                                    描述
arch                                            特定架構的源代碼
block                                         塊I/O層
crypto                                       加密API
Documentation                      內核源代碼文檔
drivers                                     設備驅動
firmware                                  使用某個驅動需要的設備固件
fs                                               VFS和獨立文件系統
include                                    內核頭
init                                           內核啟動和初始化
ipc                                           進程間通信
kernel                                     核心子系統,如調度器
lib                                            助手例行程序
mm                                         內存管理子系統和VM
net                                          網絡子系統
samples                                 示例,示范代碼
scripts                                   用於生成內核的腳本
security                                Linux安全模塊
sound                                   聲音子系統
usr                                         早期的用戶空間代碼(叫做initramfs)
tools                                     輔助Linux開發的工具
virt                                         虛擬化基礎設施

在源代碼樹的根目錄下還有很多文件需要說明,COPYING是內核許可描述文件(即GNU GPL v2),CREDITS是參與Linux內核的開發人員名單,MAINTAINERS列出了維護各個子系統和驅動的個人,Makefile是內核Makefile的基礎。

生成內核

生成內核其實很簡單,甚至比編譯和安裝其它系統級組件,glibc還要簡單,從2.6版本開始,Linux內核引入了一個新的配置和生成系統,它使生產內核的操作變得更加簡單了。

配置內核

既然已經拿到內核源代碼,那我們在開始編譯前就可以根據需要自行配置和定制,可以編譯你指定的功能和想要的驅動,配置內核是生成內核必須的一步,因為內核提供了大量的功能,支持各種不同的硬件,有很多都需要配置,內核配置是由配置選項控制的,配置選項都有CONFIG前綴,例如,對稱多處理(SMP)是由CONFIG_SMP配置選項配置的,如果設置了這個選項,SMP就被啟用了,反之則被禁用,配置選項可以確定會生成哪個文件,也可以通過預處理指令操控代碼。

配置選項可以控制生成過程要麼是布爾型,要麼是三態型,布爾型就是“是”或“否”,大部分內核配置選項都屬於布爾型,如CONFIG_PREEMPT,而三態型則在“是”和“否”的基礎上,又增加一個“模塊”選項,模塊選項表示配置選項被設置了,但最後會編譯成模塊,而不是直接編譯進內核,模塊可以理解為可獨立動態載入的對象,一般來說,驅動配置通常都是三態型。

配置選項也可以是字符串或整數,這樣的選項不會控制生成過程,指定的值由內核源代碼訪問預處理宏時使用,例如,可以為某個配置選項指定靜態分配數組的大小。

Copyright © Linux教程網 All Rights Reserved