這年頭,Linux成了一個時髦詞。自诩對電腦玩的精通的學生和IT人士們,沒有哪個不在自己的電腦上安裝一、兩個Linux,並自覺趕上了時髦。然而,在Ubuntu或SUSE的論壇中,經常有這樣的對話:
“你學Linux學了這麼久,都學到了什麼?”
“哦,我現在Linux的安裝、升級、桌面美化都很熟練!你看我這是最新版的Ubuntu,桌面很漂亮吧!”
“……”
Linux社區中有一句名言:如果你進入你的操作系統不知道該做什麼,那最好還是關掉電腦,一定有更重要的事等著你去做。說真的,如果對Linux命令不熟練,真的不能算是學過Linux。然而另一方面,Linux內核雖然是一般用戶可學可不學的內容,但可以說卻是Linux操作系統中最好玩的部分。尤其對於開發者而言,Linux內核開發絕對是最理想的磨練場所。51CTO編輯一直認為,國外之所以IT技術大拿林立,和他們從小接觸類UNIX系統、把玩內核開發是脫不了關系的。
下面是Linux內核開發者Robert Love寫的一篇入門文章,號稱“包教會”,推薦對Linux內核開發感興趣的學生、Linux愛好者、開發者以及系統管理員們一定不要錯過。當然,雖然標題說是包教會,你可能需要一定的Linux命令以及C語言的基礎。
以下是正文內容:
Linux內核一直都被視為學習Linux最難的一塊,相信大家也一定看過不少關於內核的文章,但扪心自問,你現在究竟掌握了多少?本文將從零開始介紹被視為高深的Linux內核,內容涉及內核源代碼的下載,編譯,安裝,以及內核開發相關的內容。
如何獲取Linux內核源代碼
下載Linux內核當然要去官方網站了,網站提供了兩種文件下載,一種是完整的Linux內核,另一種是內核增量補丁,它們都是tar歸檔壓縮包。除非你有特別的原因需要使用舊版本的Linux內核,否則你應該總是升級到最新版本。
使用Git
由Linus領頭的內核開發隊伍從幾年前就開始使用Git版本控制系統管理Linux內核了(參考閱讀:什麼是Git?),而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內核源代碼的版本號要一致,內核和補丁版本號不一致時,強制應用補丁會引起意想不到的後果。
內核源代碼樹介紹
內核源代碼樹分為許多目錄,它們下面又包含許多子目錄,源代碼樹的頂級目錄及其描述參見下表。
在源代碼樹的根目錄下還有很多文件需要說明,COPYING是內核許可描述文件(即GNU GPL v2),CREDITS是參與Linux內核的開發人員名單,MAINTAINERS列出了維護各個子系統和驅動的個人,Makefile是內核Makefile的基礎。