當前位置:編程學習大全網 - 源碼下載 - 如何參與linux 內核開發

如何參與linux 內核開發

如何參與Linux內核開發

---------------------

這是壹篇將如何參與Linux內核開發的相關問題壹網打盡的終極秘笈。它將指導妳

成為壹名Linux內核開發者,並且學會如何同Linux內核開發社區合作。它盡可能不

包括任何關於內核編程的技術細節,但會給妳指引壹條獲得這些知識的正確途徑。

如果這篇文章中的任何內容不再適用,請給文末列出的文件維護者發送補丁。

入門

----

妳想了解如何成為壹名Linux內核開發者?或者老板吩咐妳“給這個設備寫個Linux

驅動程序”?這篇文章的目的就是教會妳達成這些目標的全部訣竅,它將描述妳需

要經過的流程以及給出如何同內核社區合作的壹些提示。它還將試圖解釋內核社區

為何這樣運作。

Linux內核大部分是由C語言寫成的,壹些體系結構相關的代碼用到了匯編語言。要

參與內核開發,妳必須精通C語言。除非妳想為某個架構開發底層代碼,否則妳並

不需要了解(任何體系結構的)匯編語言。下面列舉的書籍雖然不能替代紮實的C

語言教育和多年的開發經驗,但如果需要的話,做為參考還是不錯的:

- "The C Programming Language" by Kernighan and Ritchie [Prentice Hall]

《C程序設計語言(第2版·新版)》(徐寶文 李誌 譯)[機械工業出版社]

- "Practical C Programming" by Steve Oualline [O'Reilly]

《實用C語言編程(第三版)》(郭大海 譯)[中國電力出版社]

- "C: A Reference Manual" by Harbison and Steele [Prentice Hall]

《C語言參考手冊(原書第5版)》(邱仲潘 等譯)[機械工業出版社]

Linux內核使用GNU C和GNU工具鏈開發。雖然它遵循ISO C89標準,但也用到了壹些

標準中沒有定義的擴展。內核是自給自足的C環境,不依賴於標準C庫的支持,所以

並不支持C標準中的部分定義。比如long long類型的大數除法和浮點運算就不允許

使用。有時候確實很難弄清楚內核對工具鏈的要求和它所使用的擴展,不幸的是目

前還沒有明確的參考資料可以解釋它們。請查閱gcc信息頁(使用“info gcc”命令

顯示)獲得壹些這方面信息。

請記住妳是在學習怎麽和已經存在的開發社區打交道。它由壹群形形色色的人組成,

他們對代碼、風格和過程有著很高的標準。這些標準是在長期實踐中總結出來的,

適應於地理上分散的大型開發團隊。它們已經被很好得整理成檔,建議妳在開發

之前盡可能多的學習這些標準,而不要期望別人來適應妳或者妳公司的行為方式。

法律問題

--------

Linux內核源代碼都是在GPL(通用公***許可證)的保護下發布的。要了解這種許可

的細節請查看源代碼主目錄下的COPYING文件。如果妳對它還有更深入問題請聯系

律師,而不要在Linux內核郵件組上提問。因為郵件組裏的人並不是律師,不要期

望他們的話有法律效力。

對於GPL的常見問題和解答,請訪問以下鏈接:

,以向手冊頁(manpages)

的維護者解釋這些變化。

以下是內核代碼中需要閱讀的文檔:

README

文件簡要介紹了Linux內核的背景,並且描述了如何配置和編譯內核。內核的

新用戶應該從這裏開始。

Documentation/Changes

文件給出了用來編譯和使用內核所需要的最小軟件包列表。

Documentation/CodingStyle

描述Linux內核的代碼風格和理由。所有新代碼需要遵守這篇文檔中定義的規

範。大多數維護者只會接收符合規定的補丁,很多人也只會幫忙檢查符合風格

的代碼。

Documentation/SubmittingPatches

Documentation/SubmittingDrivers

這兩份文檔明確描述如何創建和發送補丁,其中包括(但不僅限於):

- 郵件內容

- 郵件格式

- 選擇收件人

遵守這些規定並不能保證提交成功(因為所有補丁需要通過嚴格的內容和風格

審查),但是忽視他們幾乎就意味著失敗。

其他關於如何正確地生成補丁的優秀文檔包括:

"The Perfect Patch"

/mailman/listinfo/kernel-mentors

在真正動手修改內核代碼之前,理解要修改的代碼如何運作是必需的。要達到這個

目的,沒什麽辦法比直接讀代碼更有效了(大多數花招都會有相應的註釋),而且

壹些特制的工具還可以提供幫助。例如,“Linux代碼交叉引用”項目就是壹個值得

特別推薦的幫助工具,它將源代碼顯示在有編目和索引的網頁上。其中壹個更新及

時的內核源碼庫,可以通過以下地址訪問:

>

git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git

- 塊設備開發源碼樹, Jens Axboe <axboe@suse.de>

git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git

- DRM開發源碼樹, Dave Airlie <airlied@linux.ie>

git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git

- ia64開發源碼樹, Tony Luck <tony.luck@intel.com>

git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git

- ieee1394開發源碼樹, Jody McIntyre <scjody@modernduck.com>

git.kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git

- infiniband開發源碼樹, Roland Dreier <rolandd@cisco.com>

git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git

- libata開發源碼樹, Jeff Garzik <jgarzik@pobox.com>

git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git

- 網絡驅動程序開發源碼樹, Jeff Garzik <jgarzik@pobox.com>

git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git

- pcmcia開發源碼樹, Dominik Brodowski <linux@dominikbrodowski.net>

git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git

- SCSI開發源碼樹, James Bottomley <James.Bottomley@SteelEye.com>

git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git

使用quilt管理的補丁集:

- USB, PCI, 驅動程序核心和I2C, Greg Kroah-Hartman <gregkh@suse.de>

kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/

- x86-64, 部分i386, Andi Kleen <ak@suse.de>

ftp.firstfloor.org:/pub/ak/x86_64/quilt/

其他內核源碼樹可以在/netiquette/

當有很多人回復妳的郵件時,郵件的抄送列表會變得很長。請不要將任何人從抄送

列表中刪除,除非妳有足夠的理由這麽做。也不要只回復到郵件列表。請習慣於同

壹封郵件接收兩次(壹封來自發送者壹封來自郵件列表),而不要試圖通過添加壹

些奇特的郵件頭來解決這個問題,人們不會喜歡的。

記住保留妳所回復內容的上下文和源頭。在妳回復郵件的頂部保留“某某某說到……”

這幾行。將妳的評論加在被引用的段落之間而不要放在郵件的頂部。

如果妳在郵件中附帶補丁,請確認它們是可以直接閱讀的純文本(如

Documentation/SubmittingPatches文檔中所述)。內核開發者們不希望遇到附件

或者被壓縮了的補丁。只有這樣才能保證他們可以直接評論妳的每行代碼。請確保

妳使用的郵件發送程序不會修改空格和制表符。壹個防範性的測試方法是先將郵件

發送給自己,然後自己嘗試是否可以順利地打上收到的補丁。如果測試不成功,請

調整或者更換妳的郵件發送程序直到它正確工作為止。

總而言之,請尊重其他的郵件列表訂閱者。

  • 上一篇:高手幫解答下股票的口訣
  • 下一篇:原碼反碼補碼計算口訣
  • copyright 2024編程學習大全網