歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> 包你能學會的技術:Linux內核入門集

包你能學會的技術:Linux內核入門集

日期:2017/2/28 16:33:20   编辑:Linux內核

  這年頭,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內核源代碼的版本號要一致,內核和補丁版本號不一致時,強制應用補丁會引起意想不到的後果。

  內核源代碼樹介紹

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


目錄 描述 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的基礎。

Copyright © Linux教程網 All Rights Reserved