~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_TW/process/stable-api-nonsense.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/translations/zh_TW/process/stable-api-nonsense.rst (Version linux-6.12-rc7) and /Documentation/translations/zh_TW/process/stable-api-nonsense.rst (Version linux-4.10.17)


  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                                                   
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php