Chinese translated version of Documentation/stable_api_nonsense.txt If you have any comment or update to the content, please contact the original document maintainer directly. However, if you have problem communicating in English you can also ask the Chinese maintainer for help. Contact the Chinese maintainer, if this translation is outdated or there is problem with translation. Maintainer: Greg Kroah-Hartman <greg@kroah.com> Chinese maintainer: TripleX Chung <zhongyu@18mail.cn> --------------------------------------------------------------------- Documentation/stable_api_nonsense.txt çš„ä¸æ–‡ç¿»è¯‘ 如果想评论或更新本文的内容,请直接è”ç³»åŽŸæ–‡æ¡£çš„ç»´æŠ¤è€…ã€‚å¦‚æžœä½ ä½¿ç”¨è‹±æ–‡ 交æµæœ‰å›°éš¾çš„è¯ï¼Œä¹Ÿå¯ä»¥å‘ä¸æ–‡ç‰ˆç»´æŠ¤è€…求助。如果本翻译更新ä¸åŠæ—¶æˆ–者翻 译å˜åœ¨é—®é¢˜ï¼Œè¯·è”ç³»ä¸æ–‡ç‰ˆç»´æŠ¤è€…。 英文版维护者: Greg Kroah-Hartman <greg@kroah.com> ä¸æ–‡ç‰ˆç»´æŠ¤è€…: 钟宇 TripleX Chung <zhongyu@18mail.cn> ä¸æ–‡ç‰ˆç¿»è¯‘者: 钟宇 TripleX Chung <zhongyu@18mail.cn> ä¸æ–‡ç‰ˆæ ¡è¯‘者: æŽé˜³ Li Yang <leoli@freescale.com> 以下为æ£æ–‡ --------------------------------------------------------------------- 写作本文档的目的,是为了解释为什么Linuxæ—¢æ²¡æœ‰äºŒè¿›åˆ¶å†…æ ¸æŽ¥å£ï¼Œä¹Ÿæ²¡æœ‰ç¨³å®š çš„å†…æ ¸æŽ¥å£ã€‚è¿™é‡Œæ‰€è¯´çš„å†…æ ¸æŽ¥å£ï¼Œæ˜¯æŒ‡å†…æ ¸é‡Œçš„æŽ¥å£ï¼Œè€Œä¸æ˜¯å†…æ ¸å’Œç”¨æˆ·ç©ºé—´ 的接å£ã€‚å†…æ ¸åˆ°ç”¨æˆ·ç©ºé—´çš„æŽ¥å£ï¼Œæ˜¯æ供给应用程åºä½¿ç”¨çš„系统调用,系统调用 在历å²ä¸Šå‡ 乎没有过å˜åŒ–,将æ¥ä¹Ÿä¸ä¼šæœ‰å˜åŒ–。我有一些è€åº”用程åºæ˜¯åœ¨0.9版本 æˆ–è€…æ›´æ—©ç‰ˆæœ¬çš„å†…æ ¸ä¸Šç¼–è¯‘çš„ï¼Œåœ¨ä½¿ç”¨2.6ç‰ˆæœ¬å†…æ ¸çš„Linuxå‘布上ä¾ç„¶ç”¨å¾—很好 。用户和应用程åºä½œè€…å¯ä»¥å°†è¿™ä¸ªæŽ¥å£çœ‹æˆæ˜¯ç¨³å®šçš„。 æ‰§è¡Œçº²è¦ -------- ä½ ä¹Ÿè®¸ä»¥ä¸ºè‡ªå·±æƒ³è¦ç¨³å®šçš„å†…æ ¸æŽ¥å£ï¼Œä½†æ˜¯ä½ ä¸æ¸…æ¥šä½ è¦çš„实际上ä¸æ˜¯å®ƒã€‚ä½ éœ€ è¦çš„其实是稳定的驱动程åºï¼Œè€Œä½ åªæœ‰å°†é©±åŠ¨ç¨‹åºæ”¾åˆ°å…¬ç‰ˆå†…æ ¸çš„æºä»£ç æ ‘é‡Œï¼Œ æ‰æœ‰å¯èƒ½è¾¾åˆ°è¿™ä¸ªç›®çš„ã€‚è€Œä¸”è¿™æ ·åšè¿˜æœ‰å¾ˆå¤šå…¶å®ƒå¥½å¤„,æ£æ˜¯å› 为这些好处使得 Linux能æˆä¸ºå¼ºå£®ï¼Œç¨³å®šï¼Œæˆç†Ÿçš„æ“ä½œç³»ç»Ÿï¼Œè¿™ä¹Ÿæ˜¯ä½ æœ€å¼€å§‹é€‰æ‹©Linuxçš„åŽŸå› ã€‚ 入门 ----- åªæœ‰é‚£äº›å†™é©±åŠ¨ç¨‹åºçš„“怪人â€æ‰ä¼šæ‹…å¿ƒå†…æ ¸æŽ¥å£çš„改å˜ï¼Œå¯¹å¹¿å¤§ç”¨æˆ·æ¥è¯´ï¼Œæ—¢ 看ä¸åˆ°å†…æ ¸æŽ¥å£ï¼Œä¹Ÿä¸éœ€è¦åŽ»å…³å¿ƒå®ƒã€‚ 首先,我ä¸æ‰“算讨论关于任何éžGPL许å¯çš„å†…æ ¸é©±åŠ¨çš„æ³•å¾‹é—®é¢˜ï¼Œè¿™äº›éžGPLè®¸å¯ çš„é©±åŠ¨ç¨‹åºåŒ…括ä¸å…¬å¼€æºä»£ç ,éšè—æºä»£ç ,二进制或者是用æºä»£ç 包装,或者 是其它任何形å¼çš„ä¸èƒ½ä»¥GPL许å¯å…¬å¼€æºä»£ç 的驱动程åºã€‚如果有法律问题,请咨 询律师,我åªæ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œæ‰€ä»¥æˆ‘åªæ‰“算探讨技术问题(ä¸æ˜¯å°çœ‹æ³•å¾‹é—®é¢˜ï¼Œ 法律问题很实际,并且需è¦ä¸€ç›´å…³æ³¨ï¼‰ã€‚ 既然åªè°ˆæŠ€æœ¯é—®é¢˜ï¼Œæˆ‘们就有了下é¢ä¸¤ä¸ªä¸»é¢˜ï¼šäºŒè¿›åˆ¶å†…æ ¸æŽ¥å£å’Œç¨³å®šçš„å†…æ ¸æº ä»£ç 接å£ã€‚这两个问题是互相关è”的,让我们先解决掉二进制接å£çš„问题。 äºŒè¿›åˆ¶å†…æ ¸æŽ¥å£ -------------- å‡å¦‚æˆ‘ä»¬æœ‰ä¸€ä¸ªç¨³å®šçš„å†…æ ¸æºä»£ç 接å£ï¼Œé‚£ä¹ˆè‡ªç„¶è€Œç„¶çš„,我们就拥有了稳定的 二进制接å£ï¼Œæ˜¯è¿™æ ·çš„å—?错。让我们看看关于Linuxå†…æ ¸çš„å‡ ç‚¹äº‹å®žï¼š - å–决于所用的C编译器的版本,ä¸åŒçš„å†…æ ¸æ•°æ®ç»“构里的结构体的对é½æ–¹ å¼ä¼šæœ‰å·®åˆ«ï¼Œä»£ç ä¸ä¸åŒå‡½æ•°çš„表现形å¼ä¹Ÿä¸ä¸€æ ·ï¼ˆå‡½æ•°æ˜¯ä¸æ˜¯è¢«inlineç¼–è¯‘å– å†³äºŽç¼–è¯‘å™¨è¡Œä¸ºï¼‰ã€‚ä¸åŒçš„函数的表现形å¼å¹¶ä¸é‡è¦ï¼Œä½†æ˜¯æ•°æ®ç»“æž„å†…éƒ¨çš„å¯¹é½ æ–¹å¼å¾ˆå…³é”®ã€‚ - å–å†³äºŽå†…æ ¸çš„é…置选项,ä¸åŒçš„é€‰é¡¹ä¼šè®©å†…æ ¸çš„å¾ˆå¤šä¸œè¥¿å‘生改å˜ï¼š - åŒä¸€ä¸ªç»“构体å¯èƒ½åŒ…å«ä¸åŒçš„æˆå‘˜å˜é‡ - 有的函数å¯èƒ½æ ¹æœ¬ä¸ä¼šè¢«å®žçŽ°ï¼ˆæ¯”如编译的时候没有选择SMPæ”¯æŒ ï¼Œä¸€äº›é”函数就会被定义æˆç©ºå‡½æ•°ï¼‰ã€‚ - å†…æ ¸ä½¿ç”¨çš„å†…å˜ä¼šä»¥ä¸åŒçš„æ–¹å¼å¯¹é½ï¼Œè¿™å–决于ä¸åŒçš„å†…æ ¸é…置选 项。 - Linuxå¯ä»¥åœ¨å¾ˆå¤šçš„ä¸åŒä½“系结构的处ç†å™¨ä¸Šè¿è¡Œã€‚在æŸä¸ªä½“系结构上编 译好的二进制驱动程åºï¼Œä¸å¯èƒ½åœ¨å¦å¤–一个体系结构上æ£ç¡®çš„è¿è¡Œã€‚ å¯¹äºŽä¸€ä¸ªç‰¹å®šçš„å†…æ ¸ï¼Œæ»¡è¶³è¿™äº›æ¡ä»¶å¹¶ä¸éš¾ï¼Œä½¿ç”¨åŒä¸€ä¸ªC编译器和åŒæ ·çš„å†…æ ¸é… ç½®é€‰é¡¹æ¥ç¼–译驱动程åºæ¨¡å—å°±å¯ä»¥äº†ã€‚这对于给一个特定Linuxå‘布的特定版本æ 供驱动程åºï¼Œæ˜¯å®Œå…¨å¯ä»¥æ»¡è¶³éœ€æ±‚çš„ã€‚ä½†æ˜¯å¦‚æžœä½ è¦ç»™ä¸åŒå‘布的ä¸åŒç‰ˆæœ¬éƒ½å‘ 布一个驱动程åºï¼Œå°±éœ€è¦åœ¨æ¯ä¸ªå‘布上用ä¸åŒçš„å†…æ ¸è®¾ç½®å‚æ•°éƒ½ç¼–è¯‘ä¸€æ¬¡å†…æ ¸ï¼Œ è¿™ç®€ç›´è·Ÿå™©æ¢¦ä¸€æ ·ã€‚è€Œä¸”è¿˜è¦æ³¨æ„到,æ¯ä¸ªLinuxå‘布还æä¾›ä¸åŒçš„Linuxå†…æ ¸ï¼Œ è¿™äº›å†…æ ¸éƒ½é’ˆå¯¹ä¸åŒçš„硬件类型进行了优化(有很多ç§ä¸åŒçš„处ç†å™¨ï¼Œè¿˜æœ‰ä¸åŒ çš„å†…æ ¸è®¾ç½®é€‰é¡¹ï¼‰ã€‚æ‰€ä»¥æ¯å‘布一次驱动程åºï¼Œéƒ½éœ€è¦æ供很多ä¸åŒç‰ˆæœ¬çš„å†…æ ¸ 模å—。 ç›¸ä¿¡æˆ‘ï¼Œå¦‚æžœä½ çœŸçš„è¦é‡‡å–è¿™ç§å‘布方å¼ï¼Œä¸€å®šä¼šæ…¢æ…¢ç–¯æŽ‰ï¼Œæˆ‘很久以å‰å°±æœ‰è¿‡ 深刻的教è®... ç¨³å®šçš„å†…æ ¸æºä»£ç æŽ¥å£ -------------------- 如果有人ä¸å°†ä»–çš„å†…æ ¸é©±åŠ¨ç¨‹åºï¼Œæ”¾å…¥å…¬ç‰ˆå†…æ ¸çš„æºä»£ç æ ‘ï¼Œè€Œåˆæƒ³è®©é©±åŠ¨ç¨‹åº 一直ä¿æŒåœ¨æœ€æ–°çš„å†…æ ¸ä¸å¯ç”¨ï¼Œé‚£ä¹ˆè¿™ä¸ªè¯é¢˜å°†ä¼šå˜å¾—没完没了。 å†…æ ¸å¼€å‘是æŒç»è€Œä¸”快节å¥çš„,从æ¥éƒ½ä¸ä¼šæ…¢ä¸‹æ¥ã€‚å†…æ ¸å¼€å‘人员在当å‰æŽ¥å£ä¸ 找到bug,或者找到更好的实现方å¼ã€‚一旦å‘现这些,他们就很快会去修改当å‰çš„ 接å£ã€‚修改接å£æ„味ç€ï¼Œå‡½æ•°åå¯èƒ½ä¼šæ”¹å˜ï¼Œç»“构体å¯èƒ½è¢«æ‰©å……æˆ–è€…åˆ å‡ï¼Œå‡½æ•° çš„å‚数也å¯èƒ½å‘生改å˜ã€‚一旦接å£è¢«ä¿®æ”¹ï¼Œå†…æ ¸ä¸ä½¿ç”¨è¿™äº›æŽ¥å£çš„地方需è¦åŒæ—¶ ä¿®æ£ï¼Œè¿™æ ·æ‰èƒ½ä¿è¯æ‰€æœ‰çš„东西继ç»å·¥ä½œã€‚ 举一个例åï¼Œå†…æ ¸çš„USB驱动程åºæŽ¥å£åœ¨USBå系统的整个生命周期ä¸ï¼Œè‡³å°‘ç»åŽ† 了三次é‡å†™ã€‚这些é‡å†™è§£å†³ä»¥ä¸‹é—®é¢˜ï¼š - 把数æ®æµä»ŽåŒæ¥æ¨¡å¼æ”¹æˆéžåŒæ¥æ¨¡å¼ï¼Œè¿™ä¸ªæ”¹åŠ¨å‡å°‘了一些驱动程åºçš„ å¤æ‚度,æ高了所有USB驱动程åºçš„åžåçŽ‡ï¼Œè¿™æ ·å‡ ä¹Žæ‰€æœ‰çš„USB设备都能以最大 速率工作了。 - 修改了USBæ ¸å¿ƒä»£ç ä¸ä¸ºUSB驱动分é…æ•°æ®åŒ…内å˜çš„æ–¹å¼ï¼Œæ‰€æœ‰çš„驱动都 需è¦æ供更多的å‚æ•°ç»™USBæ ¸å¿ƒï¼Œä»¥ä¿®æ£äº†å¾ˆå¤šå·²ç»è¢«è®°å½•åœ¨æ¡ˆçš„æ»é”。 这和一些å°é—æºä»£ç çš„æ“作系统形æˆé²œæ˜Žçš„对比,在那些æ“作系统上,ä¸å¾—ä¸é¢ 外的维护旧的USB接å£ã€‚这导致了一个å¯èƒ½æ€§ï¼Œæ–°çš„å¼€å‘者ä¾ç„¶ä¼šä¸å°å¿ƒä½¿ç”¨æ—§çš„ 接å£ï¼Œä»¥ä¸æ°å½“çš„æ–¹å¼ç¼–写代ç ,进而影å“到æ“作系统的稳定性。 在上é¢çš„例åä¸ï¼Œæ‰€æœ‰çš„å¼€å‘者都åŒæ„这些é‡è¦çš„æ”¹åŠ¨ï¼Œåœ¨è¿™æ ·çš„æƒ…å†µä¸‹ä¿®æ”¹ä»£ 价很低。如果Linuxä¿æŒä¸€ä¸ªç¨³å®šçš„å†…æ ¸æºä»£ç 接å£ï¼Œé‚£ä¹ˆå°±å¾—åˆ›å»ºä¸€ä¸ªæ–°çš„æŽ¥å£ ï¼›æ—§çš„ï¼Œæœ‰é—®é¢˜çš„æŽ¥å£å¿…须一直维护,给Linux USBå¼€å‘者带æ¥é¢å¤–的工作。既然 所有的Linux USB驱动的作者都是利用自己的时间工作,那么è¦æ±‚他们去åšæ¯«æ— æ„ ä¹‰çš„å…è´¹é¢å¤–工作,是ä¸å¯èƒ½çš„。 安全问题对Linuxæ¥è¯´å分é‡è¦ã€‚一个安全问题被å‘现,就会在çŸæ—¶é—´å†…得到修 æ£ã€‚在很多情况下,这将导致Linuxå†…æ ¸ä¸çš„一些接å£è¢«é‡å†™ï¼Œä»¥ä»Žæ ¹æœ¬ä¸Šé¿å…安 全问题。一旦接å£è¢«é‡å†™ï¼Œæ‰€æœ‰ä½¿ç”¨è¿™äº›æŽ¥å£çš„驱动程åºï¼Œå¿…é¡»åŒæ—¶å¾—到修æ£ï¼Œ 以确定安全问题已ç»å¾—到修å¤å¹¶ä¸”ä¸å¯èƒ½åœ¨æœªæ¥è¿˜æœ‰åŒæ ·çš„å®‰å…¨é—®é¢˜ã€‚å¦‚æžœå†…æ ¸ 内部接å£ä¸å…许改å˜ï¼Œé‚£ä¹ˆå°±ä¸å¯èƒ½ä¿®å¤è¿™æ ·çš„安全问题,也ä¸å¯èƒ½ç¡®è®¤è¿™æ ·çš„ 安全问题以åŽä¸ä¼šå‘生。 å¼€å‘者一直在清ç†å†…æ ¸æŽ¥å£ã€‚如果一个接å£æ²¡æœ‰äººåœ¨ä½¿ç”¨äº†ï¼Œå®ƒå°±ä¼šè¢«åˆ 除。这 æ ·å¯ä»¥ç¡®ä¿å†…æ ¸å°½å¯èƒ½çš„å°ï¼Œè€Œä¸”所有潜在的接å£éƒ½ä¼šå¾—到尽å¯èƒ½å®Œæ•´çš„测试 (没有人使用的接å£æ˜¯ä¸å¯èƒ½å¾—到良好的测试的)。 è¦åšä»€ä¹ˆ ------- å¦‚æžœä½ å†™äº†ä¸€ä¸ªLinuxå†…æ ¸é©±åŠ¨ï¼Œä½†æ˜¯å®ƒè¿˜ä¸åœ¨Linuxæºä»£ç æ ‘é‡Œï¼Œä½œä¸ºä¸€ä¸ªå¼€å‘ è€…ï¼Œä½ åº”è¯¥æ€Žä¹ˆåšï¼Ÿä¸ºæ¯ä¸ªå‘布的æ¯ä¸ªç‰ˆæœ¬æ供一个二进制驱动,那简直是一个 噩梦,è¦è·Ÿä¸Šæ°¸è¿œå¤„于å˜åŒ–之ä¸çš„å†…æ ¸æŽ¥å£ï¼Œä¹Ÿæ˜¯ä¸€ä»¶è¾›è‹¦æ´»ã€‚ 很简å•ï¼Œè®©ä½ çš„é©±åŠ¨è¿›å…¥å†…æ ¸æºä»£ç æ ‘ï¼ˆè¦è®°å¾—我们在谈论的是以GPL许å¯å‘è¡Œ çš„é©±åŠ¨ï¼Œå¦‚æžœä½ çš„ä»£ç ä¸ç¬¦åˆGPL,那么ç¥ä½ 好è¿ï¼Œä½ åªèƒ½è‡ªå·±è§£å†³è¿™ä¸ªé—®é¢˜äº†ï¼Œ ä½ è¿™ä¸ªå¸è¡€é¬¼<把Andrewå’ŒLinus对å¸è¡€é¬¼çš„定义链接到这里>ï¼‰ã€‚å½“ä½ çš„ä»£ç åŠ å…¥ å…¬ç‰ˆå†…æ ¸æºä»£ç æ ‘ä¹‹åŽï¼Œå¦‚æžœä¸€ä¸ªå†…æ ¸æŽ¥å£æ”¹å˜ï¼Œä½ 的驱动会直接被修改接å£çš„ 那个人修改。ä¿è¯ä½ 的驱动永远都å¯ä»¥ç¼–è¯‘é€šè¿‡ï¼Œå¹¶ä¸”ä¸€ç›´å·¥ä½œï¼Œä½ å‡ ä¹Žä¸éœ€è¦ åšä»€ä¹ˆäº‹æƒ…。 æŠŠé©±åŠ¨æ”¾åˆ°å†…æ ¸æºä»£ç æ ‘é‡Œä¼šæœ‰å¾ˆå¤šçš„å¥½å¤„ï¼š - 驱动的质é‡ä¼šæå‡ï¼Œè€Œç»´æŠ¤æˆæœ¬ï¼ˆå¯¹åŽŸå§‹ä½œè€…æ¥è¯´ï¼‰ä¼šä¸‹é™ã€‚ - å…¶ä»–äººä¼šç»™é©±åŠ¨æ·»åŠ æ–°ç‰¹æ€§ã€‚ - 其他人会找到驱动ä¸çš„bug并修å¤ã€‚ - 其他人会在驱动ä¸æ‰¾åˆ°æ€§èƒ½ä¼˜åŒ–的机会。 - 当外部的接å£çš„改å˜éœ€è¦ä¿®æ”¹é©±åŠ¨ç¨‹åºçš„æ—¶å€™ï¼Œå…¶ä»–äººä¼šä¿®æ”¹é©±åŠ¨ç¨‹åº ã€‚ - ä¸éœ€è¦è”系任何å‘行商,这个驱动会自动的éšç€æ‰€æœ‰çš„Linuxå‘å¸ƒä¸€èµ·å‘ å¸ƒã€‚ 和别的æ“作系统相比,Linux为更多ä¸åŒçš„设备æ供现æˆçš„é©±åŠ¨ï¼Œè€Œä¸”èƒ½åœ¨æ›´å¤šä¸ åŒä½“系结构的处ç†å™¨ä¸Šæ”¯æŒè¿™äº›è®¾å¤‡ã€‚这个ç»è¿‡è€ƒéªŒçš„å¼€å‘模å¼ï¼Œå¿…然是错ä¸äº† çš„ :) ------------- æ„Ÿè°¢ Randy Dunlap, Andrew Morton, David Brownell, Hanna Linder, Robert Love, and Nishanth Aravamudan 对于本文档早期版本的评审和建议。 英文版维护者: Greg Kroah-Hartman <greg@kroah.com>