mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 15:22:21 -04:00
docs/zh_TW: replace 接口 with 介面 in stable-api-nonsense.rst
In Taiwan's standard terminology, as defined by the National Academy for Educational Research (NAER) term bank (https://terms.naer.edu.tw/), the correct Traditional Chinese translation for "interface" is "介面", not "接口" (which is used in Simplified Chinese/Mainland China). Update the zh_TW translation of stable-api-nonsense.rst to use the proper Taiwanese terminology. Signed-off-by: panzhipop <kipp455187@gmail.com> Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn> Signed-off-by: Alex Shi <alexs@kernel.org>
This commit is contained in:
@@ -14,21 +14,21 @@
|
||||
中文版校譯者: 李陽 Li Yang <leoyang.li@nxp.com>
|
||||
胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn>
|
||||
|
||||
Linux 內核驅動接口
|
||||
Linux 內核驅動介面
|
||||
==================
|
||||
|
||||
寫作本文檔的目的,是爲了解釋爲什麼Linux既沒有二進制內核接口,也沒有穩定
|
||||
的內核接口。這裏所說的內核接口,是指內核裏的接口,而不是內核和用戶空間
|
||||
的接口。內核到用戶空間的接口,是提供給應用程序使用的系統調用,系統調用
|
||||
寫作本文檔的目的,是爲了解釋爲什麼Linux既沒有二進制內核介面,也沒有穩定
|
||||
的內核介面。這裏所說的內核介面,是指內核裏的介面,而不是內核和用戶空間
|
||||
的介面。內核到用戶空間的介面,是提供給應用程序使用的系統調用,系統調用
|
||||
在歷史上幾乎沒有過變化,將來也不會有變化。我有一些老應用程序是在0.9版本
|
||||
或者更早版本的內核上編譯的,在使用2.6版本內核的Linux發佈上依然用得很好
|
||||
。用戶和應用程序作者可以將這個接口看成是穩定的。
|
||||
。用戶和應用程序作者可以將這個介面看成是穩定的。
|
||||
|
||||
|
||||
執行綱要
|
||||
--------
|
||||
|
||||
你也許以爲自己想要穩定的內核接口,但是你不清楚你要的實際上不是它。你需
|
||||
你也許以爲自己想要穩定的內核介面,但是你不清楚你要的實際上不是它。你需
|
||||
要的其實是穩定的驅動程序,而你只有將驅動程序放到公版內核的源代碼樹裏,
|
||||
纔有可能達到這個目的。而且這樣做還有很多其它好處,正是因爲這些好處使得
|
||||
Linux能成爲強壯,穩定,成熟的操作系統,這也是你最開始選擇Linux的原因。
|
||||
@@ -37,8 +37,8 @@ Linux能成爲強壯,穩定,成熟的操作系統,這也是你最開始選
|
||||
入門
|
||||
-----
|
||||
|
||||
只有那些寫驅動程序的“怪人”纔會擔心內核接口的改變,對廣大用戶來說,既
|
||||
看不到內核接口,也不需要去關心它。
|
||||
只有那些寫驅動程序的“怪人”纔會擔心內核介面的改變,對廣大用戶來說,既
|
||||
看不到內核介面,也不需要去關心它。
|
||||
|
||||
首先,我不打算討論關於任何非GPL許可的內核驅動的法律問題,這些非GPL許可
|
||||
的驅動程序包括不公開源代碼,隱藏源代碼,二進制或者是用源代碼包裝,或者
|
||||
@@ -46,14 +46,14 @@ Linux能成爲強壯,穩定,成熟的操作系統,這也是你最開始選
|
||||
詢律師,我只是一個程序員,所以我只打算探討技術問題(不是小看法律問題,
|
||||
法律問題很實際,並且需要一直關注)。
|
||||
|
||||
既然只談技術問題,我們就有了下面兩個主題:二進制內核接口和穩定的內核源
|
||||
代碼接口。這兩個問題是互相關聯的,讓我們先解決掉二進制接口的問題。
|
||||
既然只談技術問題,我們就有了下面兩個主題:二進制內核介面和穩定的內核源
|
||||
代碼介面。這兩個問題是互相關聯的,讓我們先解決掉二進制介面的問題。
|
||||
|
||||
|
||||
二進制內核接口
|
||||
二進制內核介面
|
||||
--------------
|
||||
假如我們有一個穩定的內核源代碼接口,那麼自然而然的,我們就擁有了穩定的
|
||||
二進制接口,是這樣的嗎?錯。讓我們看看關於Linux內核的幾點事實:
|
||||
假如我們有一個穩定的內核源代碼介面,那麼自然而然的,我們就擁有了穩定的
|
||||
二進制介面,是這樣的嗎?錯。讓我們看看關於Linux內核的幾點事實:
|
||||
|
||||
- 取決於所用的C編譯器的版本,不同的內核數據結構裏的結構體的對齊方
|
||||
式會有差別,代碼中不同函數的表現形式也不一樣(函數是不是被inline
|
||||
@@ -84,18 +84,18 @@ Linux能成爲強壯,穩定,成熟的操作系統,這也是你最開始選
|
||||
深刻的教訓...
|
||||
|
||||
|
||||
穩定的內核源代碼接口
|
||||
穩定的內核源代碼介面
|
||||
--------------------
|
||||
|
||||
如果有人不將他的內核驅動程序,放入公版內核的源代碼樹,而又想讓驅動程序
|
||||
一直保持在最新的內核中可用,那麼這個話題將會變得沒完沒了。
|
||||
內核開發是持續而且快節奏的,從來都不會慢下來。內核開發人員在當前接口中
|
||||
內核開發是持續而且快節奏的,從來都不會慢下來。內核開發人員在當前介面中
|
||||
找到bug,或者找到更好的實現方式。一旦發現這些,他們就很快會去修改當前的
|
||||
接口。修改接口意味着,函數名可能會改變,結構體可能被擴充或者刪減,函數
|
||||
的參數也可能發生改變。一旦接口被修改,內核中使用這些接口的地方需要同時
|
||||
介面。修改介面意味着,函數名可能會改變,結構體可能被擴充或者刪減,函數
|
||||
的參數也可能發生改變。一旦介面被修改,內核中使用這些介面的地方需要同時
|
||||
修正,這樣才能保證所有的東西繼續工作。
|
||||
|
||||
舉一個例子,內核的USB驅動程序接口在USB子系統的整個生命週期中,至少經歷
|
||||
舉一個例子,內核的USB驅動程序介面在USB子系統的整個生命週期中,至少經歷
|
||||
了三次重寫。這些重寫解決以下問題:
|
||||
|
||||
- 把數據流從同步模式改成非同步模式,這個改動減少了一些驅動程序的
|
||||
@@ -105,22 +105,22 @@ Linux能成爲強壯,穩定,成熟的操作系統,這也是你最開始選
|
||||
需要提供更多的參數給USB核心,以修正了很多已經被記錄在案的死鎖。
|
||||
|
||||
這和一些封閉源代碼的操作系統形成鮮明的對比,在那些操作系統上,不得不額
|
||||
外的維護舊的USB接口。這導致了一個可能性,新的開發者依然會不小心使用舊的
|
||||
接口,以不恰當的方式編寫代碼,進而影響到操作系統的穩定性。
|
||||
外的維護舊的USB介面。這導致了一個可能性,新的開發者依然會不小心使用舊的
|
||||
介面,以不恰當的方式編寫代碼,進而影響到操作系統的穩定性。
|
||||
在上面的例子中,所有的開發者都同意這些重要的改動,在這樣的情況下修改代
|
||||
價很低。如果Linux保持一個穩定的內核源代碼接口,那麼就得創建一個新的接口
|
||||
;舊的,有問題的接口必須一直維護,給Linux USB開發者帶來額外的工作。既然
|
||||
價很低。如果Linux保持一個穩定的內核源代碼介面,那麼就得創建一個新的介面
|
||||
;舊的,有問題的介面必須一直維護,給Linux USB開發者帶來額外的工作。既然
|
||||
所有的Linux USB驅動的作者都是利用自己的時間工作,那麼要求他們去做毫無意
|
||||
義的免費額外工作,是不可能的。
|
||||
安全問題對Linux來說十分重要。一個安全問題被發現,就會在短時間內得到修
|
||||
正。在很多情況下,這將導致Linux內核中的一些接口被重寫,以從根本上避免安
|
||||
全問題。一旦接口被重寫,所有使用這些接口的驅動程序,必須同時得到修正,
|
||||
正。在很多情況下,這將導致Linux內核中的一些介面被重寫,以從根本上避免安
|
||||
全問題。一旦介面被重寫,所有使用這些介面的驅動程序,必須同時得到修正,
|
||||
以確定安全問題已經得到修復並且不可能在未來還有同樣的安全問題。如果內核
|
||||
內部接口不允許改變,那麼就不可能修復這樣的安全問題,也不可能確認這樣的
|
||||
內部介面不允許改變,那麼就不可能修復這樣的安全問題,也不可能確認這樣的
|
||||
安全問題以後不會發生。
|
||||
開發者一直在清理內核接口。如果一個接口沒有人在使用了,它就會被刪除。這
|
||||
樣可以確保內核儘可能的小,而且所有潛在的接口都會得到儘可能完整的測試
|
||||
(沒有人使用的接口是不可能得到良好的測試的)。
|
||||
開發者一直在清理內核介面。如果一個介面沒有人在使用了,它就會被刪除。這
|
||||
樣可以確保內核儘可能的小,而且所有潛在的介面都會得到儘可能完整的測試
|
||||
(沒有人使用的介面是不可能得到良好的測試的)。
|
||||
|
||||
|
||||
要做什麼
|
||||
@@ -128,11 +128,11 @@ Linux能成爲強壯,穩定,成熟的操作系統,這也是你最開始選
|
||||
|
||||
如果你寫了一個Linux內核驅動,但是它還不在Linux源代碼樹裏,作爲一個開發
|
||||
者,你應該怎麼做?爲每個發佈的每個版本提供一個二進制驅動,那簡直是一個
|
||||
噩夢,要跟上永遠處於變化之中的內核接口,也是一件辛苦活。
|
||||
噩夢,要跟上永遠處於變化之中的內核介面,也是一件辛苦活。
|
||||
很簡單,讓你的驅動進入內核源代碼樹(要記得我們在談論的是以GPL許可發行
|
||||
的驅動,如果你的代碼不符合GPL,那麼祝你好運,你只能自己解決這個問題了,
|
||||
你這個吸血鬼<把Andrew和Linus對吸血鬼的定義鏈接到這裏>)。當你的代碼加入
|
||||
公版內核源代碼樹之後,如果一個內核接口改變,你的驅動會直接被修改接口的
|
||||
公版內核源代碼樹之後,如果一個內核介面改變,你的驅動會直接被修改介面的
|
||||
那個人修改。保證你的驅動永遠都可以編譯通過,並且一直工作,你幾乎不需要
|
||||
做什麼事情。
|
||||
|
||||
@@ -142,7 +142,7 @@ Linux能成爲強壯,穩定,成熟的操作系統,這也是你最開始選
|
||||
- 其他人會給驅動添加新特性。
|
||||
- 其他人會找到驅動中的bug並修復。
|
||||
- 其他人會在驅動中找到性能優化的機會。
|
||||
- 當外部的接口的改變需要修改驅動程序的時候,其他人會修改驅動程序
|
||||
- 當外部的介面的改變需要修改驅動程序的時候,其他人會修改驅動程序
|
||||
- 不需要聯繫任何發行商,這個驅動會自動的隨着所有的Linux發佈一起發
|
||||
布。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user