1 .. SPDX-License-Identifier: GPL-2.0 2 3 .. _tw_stable_api_nonsense: 4 5 .. include:: ../disclaimer-zh_TW.rst 6 7 :Original: :ref:`Documentation/process/stable- 8 <stable_api_nonsense>` 9 10 譯者:: 11 12 中文版維護者: 鍾宇 TripleX < 13 中文版翻譯者: 鍾宇 TripleX < 14 中文版校譯者: 李陽 Li Yang < 15 胡皓文 Hu Haowen <2023 16 17 Linux 內核驅動接口 18 ================== 19 20 寫作本文檔的目的,是爲了解釋爲 21 的內核接口。這裏所說的內核接口 22 的接口。內核到用戶空間的接口, 23 在歷史上幾乎沒有過變化,將來也 24 或者更早版本的內核上編譯的,在 25 。用戶和應用程序作者可以將這個 26 27 28 執行綱要 29 -------- 30 31 你也許以爲自己想要穩定的內核接 32 要的其實是穩定的驅動程序,而你 33 纔有可能達到這個目的。而且這樣 34 Linux能成爲強壯,穩定,成熟的操 35 36 37 入門 38 ----- 39 40 只有那些寫驅動程序的“怪人”纔 41 看不到內核接口,也不需要去關心 42 43 首先,我不打算討論關於任何非GPL 44 的驅動程序包括不公開源代碼,隱 45 是其它任何形式的不能以GPL許可公 46 詢律師,我只是一個程序員,所以 47 法律問題很實際,並且需要一直關 48 49 既然只談技術問題,我們就有了下 50 代碼接口。這兩個問題是互相關聯 51 52 53 二進制內核接口 54 -------------- 55 假如我們有一個穩定的內核源代碼 56 二進制接口,是這樣的嗎?錯。讓 57 58 - 取決於所用的C編譯器的版本, 59 式會有差別,代碼中不同函數 60 編譯取決於編譯器行爲)。不 61 結構內部的對齊方式很關鍵。 62 63 - 取決於內核的配置選項,不同 64 65 - 同一個結構體可能包含不同 66 - 有的函數可能根本不會被實 67 一些鎖函數就會被定義成空 68 - 內核使用的內存會以不同的 69 項。 70 71 - Linux可以在很多的不同體系結 72 譯好的二進制驅動程序,不可 73 74 對於一個特定的內核,滿足這些條 75 置選項來編譯驅動程序模塊就可以 76 供驅動程序,是完全可以滿足需求 77 佈一個驅動程序,就需要在每個發 78 這簡直跟噩夢一樣。而且還要注意 79 這些內核都針對不同的硬件類型進 80 的內核設置選項)。所以每發佈一 81 模塊。 82 83 相信我,如果你真的要採取這種發 84 深刻的教訓... 85 86 87 穩定的內核源代碼接口 88 -------------------- 89 90 如果有人不將他的內核驅動程序, 91 一直保持在最新的內核中可用,那 92 內核開發是持續而且快節奏的,從 93 找到bug,或者找到更好的實現方式 94 接口。修改接口意味着,函數名可 95 的參數也可能發生改變。一旦接口 96 修正,這樣才能保證所有的東西繼 97 98 舉一個例子,內核的USB驅動程序接 99 了三次重寫。這些重寫解決以下問 100 101 - 把數據流從同步模式改成非同 102 複雜度,提高了所有USB驅動程 103 能以最大速率工作了。 104 - 修改了USB核心代碼中爲USB驅動 105 需要提供更多的參數給USB核心 106 107 這和一些封閉源代碼的操作系統形 108 外的維護舊的USB接口。這導致了一 109 接口,以不恰當的方式編寫代碼, 110 在上面的例子中,所有的開發者都 111 價很低。如果Linux保持一個穩定的 112 ;舊的,有問題的接口必須一直維 113 所有的Linux USB驅動的作者都是利用 114 義的免費額外工作,是不可能的。 115 安全問題對Linux來說十分重要。一 116 正。在很多情況下,這將導致Linux 117 全問題。一旦接口被重寫,所有使 118 以確定安全問題已經得到修復並且 119 內部接口不允許改變,那麼就不可 120 安全問題以後不會發生。 121 開發者一直在清理內核接口。如果 122 樣可以確保內核儘可能的小,而且 123 (沒有人使用的接口是不可能得到 124 125 126 要做什麼 127 -------- 128 129 如果你寫了一個Linux內核驅動,但 130 者,你應該怎麼做?爲每個發佈的 131 噩夢,要跟上永遠處於變化之中的 132 很簡單,讓你的驅動進入內核源代 133 的驅動,如果你的代碼不符合GPL, 134 你這個吸血鬼<把Andrew和Linus對吸血 135 公版內核源代碼樹之後,如果一個 136 那個人修改。保證你的驅動永遠都 137 做什麼事情。 138 139 把驅動放到內核源代碼樹裏會有很 140 141 - 驅動的質量會提升,而維護成 142 - 其他人會給驅動添加新特性。 143 - 其他人會找到驅動中的bug並修 144 - 其他人會在驅動中找到性能優 145 - 當外部的接口的改變需要修改 146 - 不需要聯繫任何發行商,這個 147 布。 148 149 和別的操作系統相比,Linux爲更多 150 同體繫結構的處理器上支持這些設 151 的 :) 152 153 感謝 154 ---- 155 感謝 Randy Dunlap, Andrew Morton, David Brow 156 Robert Love, and Nishanth Aravamudan 對於本 157 158 英文版維護者: Greg Kroah-Hartman <greg@ 159
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.