.. include:: ../disclaimer-zh_CN.rst :Original: :ref:`Documentation/process/4.Coding.rst <development_coding>` :Translator: Alex Shi <alex.shi@linux.alibaba.com> .. _cn_development_coding: 使代ç æ£ç¡® ====================== è½ç¶å¯¹äºä¸ä¸ªåå®çãé¢å社åºç设计è¿ç¨æå¾å¤è¯è¦è¯´ï¼ä½æ¯ä»»ä½å æ ¸å¼å项ç®ç è¯æé½å¨çæç代ç ä¸ãå®æ¯å°ç±å ¶ä»å¼å人åæ£æ¥å¹¶å并ï¼æä¸å并ï¼å°ä¸»çº¿æ ä¸ ç代ç ãæ以è¿æ®µä»£ç çè´¨éå³å®äºé¡¹ç®çæç»æåã æ¬èå°æ£æ¥ç¼ç è¿ç¨ãæ们å°ä»å æ ¸å¼å人ååºéçå ç§æ¹å¼å¼å§ãç¶åéç¹å°è½¬ç§» å°æ£ç¡®çäºæ åå¯ä»¥å¸®å©è¿ä¸ªä»»å¡çå·¥å ·ä¸ã é·é± ---- ç¼ç é£æ ¼ ******** å æ ¸é¿æ以æ¥é½æä¸ç§æ åçç¼ç é£æ ¼ï¼å¦ :ref:`Documentation/translations/zh_CN/process/coding-style.rst <cn_codingstyle>` ä¸æè¿°ãå¨å¤§é¨åæ¶é´éï¼è¯¥æ件ä¸æè¿°çæ¿ç被认为è³å¤æ¯å»ºè®®æ§çãå æ¤ï¼å æ ¸ ä¸åå¨å¤§éä¸ç¬¦åç¼ç é£æ ¼ååç代ç ã代ç çåå¨ä¼ç»å æ ¸å¼å人å带æ¥ä¸¤ä¸ªç¬ç« çå±å®³ã é¦å ï¼è¦ç¸ä¿¡å æ ¸ç¼ç æ å并ä¸éè¦ï¼ä¹ä¸å¼ºå¶æ§è¡ãäºå®ä¸ï¼å¦æ没ææç §æ å对代 ç è¿è¡ç¼ç ï¼é£ä¹åå æ ¸æ·»å æ°ä»£ç æ¯é常å°é¾çï¼è®¸å¤å¼å人åçè³ä¼å¨å®¡æ¥ä»£ç ä¹ åè¦æ±å¯¹ä»£ç è¿è¡éæ°æ ¼å¼åãä¸ä¸ªä¸å æ ¸ä¸æ ·å¤§ç代ç åºéè¦ä¸äºç»ä¸ç代ç ï¼ä»¥ä½¿ å¼å人åè½å¤å¿«éçè§£å ¶ä¸çä»»ä½é¨åãæ以已ç»æ²¡æ空é´æ¥åæ¾å¥æªçæ ¼å¼å代ç äºã å¶å°ï¼å æ ¸çç¼ç é£æ ¼ä¼ä¸é主ç强å¶é£æ ¼åçå²çªãå¨è¿ç§æ åµä¸ï¼å æ ¸çé£æ ¼å¿ é¡» å¨ä»£ç å并ä¹åè·èãå°ä»£ç æ¾å ¥å æ ¸æå³ç以å¤ç§æ¹å¼æ¾å¼ä¸å®ç¨åº¦çæ§å¶æââå æ¬ æ§å¶ä»£ç çæ ¼å¼åæ¹å¼ã å¦ä¸ä¸ªé·é±æ¯åå®å·²ç»å¨å æ ¸ä¸ç代ç è¿«åéè¦ç¼ç æ ·å¼çä¿®å¤ãå¼å人åå¯è½ä¼å¼å§ çæéæ°æ ¼å¼åè¡¥ä¸ï¼ä½ä¸ºçæè¿ç¨çä¸ç§æ¹å¼ï¼æè ä½ä¸ºå°å ¶å称åå ¥å æ ¸åæ´æ¥å¿ çä¸ç§æ¹å¼ï¼æè 两è å ¼èæä¹ãä½æ¯çº¯ç¼ç é£æ ¼çä¿®å¤è¢«å¼å社åºè§ä¸ºåªé³ï¼å®ä»¬å¾ å¾åå°å·éãå æ¤ï¼æ好é¿å 使ç¨è¿ç§ç±»åçè¡¥ä¸ãç±äºå ¶ä»åå ï¼å¨å¤çä¸æ®µä»£ç ç åæ¶ä¿®å¤å®çæ ·å¼æ¯å¾èªç¶çï¼ä½æ¯ç¼ç æ ·å¼çæ´æ¹ä¸åºè¯¥ä» 为äºæ´æ¹èè¿è¡ã ç¼ç é£æ ¼çææ¡£ä¹ä¸åºè¯¥è¢«è§ä¸ºç»å¯¹çæ³å¾ï¼è¿æ¯æ°¸è¿ä¸ä¼è¢«è¿åçãå¦ææä¸ä¸ªå¾å¥½ ççç±å对è¿ç§æ ·å¼ï¼ä¾å¦ï¼å¦ææå为éå80åéå¶çè¡ï¼é£ä¹å®çå¯è¯»æ§å°±ä¼å¤§å¤§ éä½ï¼ï¼é£ä¹å°±è¿æ ·åã 请注æï¼æ¨è¿å¯ä»¥ä½¿ç¨ ``clang-format`` å·¥å ·æ¥å¸®å©æ¨å¤çè¿äºè§åï¼èªå¨éæ°æ ¼å¼ åé¨å代ç ï¼å¹¶æ¥çå®æ´çæ件ï¼ä»¥åç°ç¼ç æ ·å¼é误ãæ¼åé误åå¯è½çæ¹è¿ãå®è¿ å¯ä»¥æ¹ä¾¿å°è¿è¡æåºï¼å æ¬å¯¹é½åé/å®ãåæµææ¬åå ¶ä»ç±»ä¼¼ä»»å¡ãæå ³è¯¦ç»ä¿¡æ¯ï¼è¯· åé æ件 :ref:`Documentation/process/clang-format.rst <clangformat>` æ½è±¡å± ****** 计ç®æºç§å¦æææå¦ç以çµæ´»æ§åä¿¡æ¯éèçåä¹å¹¿æ³ä½¿ç¨æ½è±¡å±ãå½ç¶ï¼å æ ¸å¹¿æ³ å°ä½¿ç¨äºæ½è±¡ï¼ä»»ä½æ¶åæ°ç¾ä¸è¡ä»£ç ç项ç®é½ä¸è½åå°è¿ä¸ç¹å¹¶åæ´»ä¸æ¥ãä½ç»éª 表æï¼è¿åº¦æè¿æ©çæ½è±¡å¯è½åè¿æ©çä¼åä¸æ ·æ害ãæ½è±¡åºç¨äºæéç级å«ï¼ ä¸è¦è¿åº¦ã å¨ä¸ä¸ªç®åç级å«ä¸ï¼èèä¸ä¸ªå½æ°çåæ°ï¼è¯¥åæ°æ»æ¯ç±ææè°ç¨æ¹ä½ä¸ºé¶ä¼ éã æ们å¯ä»¥ä¿çè¿ä¸ªè®ºç¹: 以é²æ人æç»éè¦ä½¿ç¨å®æä¾çé¢å¤çµæ´»æ§ãä¸è¿ï¼å°é£æ¶ï¼ å®ç°è¿ä¸ªé¢å¤åæ°ç代ç å¾æå¯è½ä»¥æç§ä»æªè¢«æ³¨æå°çå¾®å¦æ¹å¼è¢«ç ´åââå 为å®ä» æªè¢«ä½¿ç¨è¿ãæè ï¼å½éè¦é¢å¤ççµæ´»æ§æ¶ï¼å®ä¸ä¼ä»¥ç¬¦åç¨åºåæ©æææçæ¹å¼æ¥ è¿æ ·åãå æ ¸å¼å人åé常ä¼æ交补ä¸æ¥å é¤æªä½¿ç¨çåæ°ï¼ä¸è¬æ¥è¯´ï¼é¦å ä¸åºè¯¥ æ·»å è¿äºåæ°ã éè硬件访é®çæ½è±¡å±ââé常å 许大éç驱å¨ç¨åºå¨å¤ä¸ªæä½ç³»ç»ä¸ä½¿ç¨ââå°¤å ¶ä¸å 欢è¿ãè¿æ ·çå±ä½¿ä»£ç åå¾æ¨¡ç³ï¼å¯è½ä¼é ææ§è½æ失ï¼å®ä»¬ä¸å±äºLinuxå æ ¸ã å¦ä¸æ¹é¢ï¼å¦ææ¨åç°èªå·±ä»å¦ä¸ä¸ªå æ ¸åç³»ç»å¤å¶äºå¤§éç代ç ï¼é£ä¹ç°å¨æ¯æ¶å é®ä¸ä¸ï¼äºå®ä¸ï¼å°è¿äºä»£ç ä¸çä¸äºæåå°åç¬çåºä¸ï¼æè å¨æ´é«çå±æ¬¡ä¸å®ç° è¿äºåè½æ¯å¦ææä¹ãå¨æ´ä¸ªå æ ¸ä¸å¤å¶ç¸åç代ç 没æä»·å¼ã #ifdef åé¢å¤ç *************** Cé¢å¤çå¨ä¼¼ä¹ç»ä¸äºCç¨åºå带æ¥äºå¼ºå¤§ç诱æï¼ä»ä»¬è®¤ä¸ºå®æ¯ä¸ç§ææå°å°å¤§éçµ æ´»æ§ç¼ç å°æºæ件ä¸çæ¹æ³ãä½æ¯é¢å¤çå¨ä¸æ¯Cï¼å¤§é使ç¨å®ä¼å¯¼è´ä»£ç å¯¹å ¶ä»äººæ¥ 说æ´é¾è¯»åï¼å¯¹ç¼è¯å¨æ¥è¯´æ´é¾æ£æ¥æ£ç¡®æ§ã大éçé¢å¤çå¨å ä¹æ»æ¯ä»£ç éè¦ä¸äº æ¸ çå·¥ä½çæ å¿ã 使ç¨ifdefçæ¡ä»¶ç¼è¯å®é ä¸æ¯ä¸ä¸ªå¼ºå¤§çåè½ï¼å®å¨å æ ¸ä¸ä½¿ç¨ãä½æ¯å¾å°æ人å¸æ çå°ä»£ç 被大éå°æä¸ifdefåãä½ä¸ºä¸è¬è§åï¼ifdefç使ç¨åºå°½å¯è½éå¶å¨å¤´æ件 ä¸ãææ¡ä»¶ç¼è¯ç代ç å¯ä»¥éå¶å½æ°ï¼å¦æ代ç ä¸åå¨ï¼è¿äºå½æ°å°±ä¼åæ空çãç¶å ç¼è¯å¨å°ææå°ä¼å对空å½æ°çè°ç¨ãç»ææ¯ä»£ç æ´å æ¸ æ°ï¼æ´å®¹æç解ã Cé¢å¤çå¨å®åå¨è®¸å¤å±é©ï¼å æ¬å¯è½å¯¹å ·æå¯ä½ç¨ä¸æ²¡æç±»åå®å ¨æ§ç表达å¼è¿è¡å¤ éè¯ä¼°ãå¦ææ¨è¯å¾å®ä¹å®ï¼è¯·èèå建ä¸ä¸ªå èå½æ°ãç»æç¸åç代ç ï¼ä½æ¯å è å½æ°æ´å®¹æ读åï¼ä¸ä¼å¤æ¬¡è®¡ç®å ¶åæ°ï¼å¹¶ä¸å 许ç¼è¯å¨å¯¹åæ°åè¿åå¼æ§è¡ç±»åæ£æ¥ã å èå½æ° ******** ä¸è¿ï¼å èå½æ°æ¬èº«ä¹åå¨é£é©ãç¨åºåå¯ä»¥å¾å¿äºé¿å å½æ°è°ç¨åç¨å èå½æ°å¡«å æº æ件æåºæçæçãç¶èï¼è¿äºåè½å®é ä¸ä¼éä½æ§è½ãå 为å®ä»¬ç代ç å¨æ¯ä¸ªè°ç¨ç« ç¹é½è¢«å¤å¶ï¼æ以å®ä»¬æç»ä¼å¢å ç¼è¯å æ ¸ç大å°ãåè¿æ¥ï¼è¿ä¼å¯¹å¤çå¨çå åç¼å é æååï¼ä»è大大éä½æ§è¡é度ãé常ï¼å èå½æ°åºè¯¥é常å°ï¼èä¸ç¸å¯¹è¾å°ãæ¯ç«ï¼ å½æ°è°ç¨çææ¬å¹¶ä¸é«ï¼å¤§éå èå½æ°çå建æ¯è¿æ©ä¼åçå ¸åä¾åã ä¸è¬æ¥è¯´ï¼å æ ¸ç¨åºåä¼å¿½ç¥ç¼åææï¼è¿ä¼å¸¦æ¥å±é©ãå¨å¼å§çæ°æ®ç»æ课ç¨ä¸ï¼ç» å ¸çæ¶é´/空é´æè¡¡é常ä¸éç¨äºå½ä»£ç¡¬ä»¶ã空é´å°±æ¯æ¶é´ï¼å 为ä¸ä¸ªå¤§çç¨åºæ¯ä¸ä¸ª æ´ç´§åçç¨åºè¿è¡å¾æ ¢ã æè¿çç¼è¯å¨å¨å³å®ä¸ä¸ªç»å®å½æ°æ¯å¦åºè¯¥è¢«å èæ¹é¢æ®æ¼çè¶æ¥è¶ç§¯æçè§è²ã å æ¤ï¼âinlineâå ³é®åçèªç±æ¾ç½®å¯è½ä¸ä» ä» æ¯è¿åº¦çï¼å®ä¹å¯è½æ¯æ å ³çã é ** 2006å¹´5æï¼âdeviceescapeâç½ç»å æ å¨GPLä¸åå¸ï¼å¹¶è¢«çº³å ¥ä¸»çº¿å æ ¸ãè¿æ¯ä¸ä¸ªå 欢è¿çæ¶æ¯ï¼å¯¹Linuxä¸æ 线ç½ç»çæ¯æå å ¶é被认为æ¯ä¸åæ ¼çï¼èdeviceescape å æ æä¾äºä¿®å¤è¿ç§æ åµçæ¿è¯ºãç¶èï¼ç´å°2007å¹´6æï¼2.6.22ï¼ï¼è¿æ®µä»£ç æç æ£è¿å ¥ä¸»çº¿ãåçäºä»ä¹ï¼ è¿æ®µä»£ç æ¾ç¤ºäºè®¸å¤éé¨é 车ç迹象ãä½ä¸ä¸ªç¹å«å¤§çé®é¢æ¯ï¼å®å¹¶ä¸æ¯è®¾è®¡ç¨äºå¤ å¤çå¨ç³»ç»ãå¨å并è¿ä¸ªç½ç»å æ ï¼ç°å¨ç§°ä¸ºmac80211ï¼ä¹åï¼éè¦å¯¹å ¶è¿è¡ä¸ä¸ªé æ¹æ¡çæ¹é ã æ¾ç»ï¼Linuxå æ ¸ä»£ç å¯ä»¥å¨ä¸èèå¤å¤çå¨ç³»ç»æ带æ¥ç并åæ§é®é¢çæ åµä¸è¿è¡ å¼åãç¶èï¼ç°å¨ï¼è¿ä¸ªæ件æ¯åå¨åæ ¸ç¬è®°æ¬çµèä¸çãå³ä½¿å¨åå¤çå¨ç³»ç»ä¸ï¼ 为æé«ååºè½åæåçå·¥ä½ä¹ä¼æé«å æ ¸å ç并åæ§æ°´å¹³ãç¼åå æ ¸ä»£ç èä¸èèé çæ¥åå·²ç»è¿å»å¾é¿äºã å¯ä»¥ç±å¤ä¸ªçº¿ç¨å¹¶å访é®çä»»ä½èµæºï¼æ°æ®ç»æã硬件å¯åå¨çï¼å¿ é¡»ç±éä¿æ¤ãæ° ç代ç åºè¯¥è®°ä½è¿ä¸è¦æ±ï¼äºåæ¹è£ éæ¯ä¸é¡¹ç¸å½å°é¾çä»»å¡ãå æ ¸å¼å人ååºè¯¥è± æ¶é´å åäºè§£å¯ç¨çéåè¯ï¼ä»¥ä¾¿ä¸ºä½ä¸éæ©æ£ç¡®çå·¥å ·ãæ¾ç¤ºå¯¹å¹¶åæ§ç¼ºä¹å ³æ³¨ç 代ç è¿å ¥ä¸»çº¿å°å¾å°é¾ã åå½ **** æåä¸ä¸ªå¼å¾ä¸æçå±é©æ¯ï¼å®å¯è½ä¼å¼èµ·æ¹åï¼è¿å¯è½ä¼å¸¦æ¥å¾å¤§çæ¹è¿ï¼ï¼ä»è 导è´ç°æç¨æ·çæäºä¸è¥¿ä¸æãè¿ç§åå被称为âåå½âï¼åå½å·²ç»æ为主线å æ ¸æä¸ å欢è¿çãé¤å°æ°ä¾å¤æ åµå¤ï¼å¦æåå½ä¸è½åæ¶ä¿®æ£ï¼ä¼å¯¼è´åå½çååå°è¢«åæ¶ã æ好é¦å é¿å åå½ã 人们常常äºè®ºï¼å¦æåå½è®©æ´å¤äººå¯ä»¥å·¥ä½ï¼è¿è¶ è¿äº§çé®é¢ï¼é£ä¹åå½æ¯åççã å¦æå®ç ´åçä¸ä¸ªç³»ç»å´ä¸ºå个系ç»å¸¦æ¥æ°çåè½ï¼ä¸ºä»ä¹ä¸è¿è¡æ´æ¹å¢ï¼2007å¹´7æï¼ Linus对è¿ä¸ªé®é¢ç»åºäºæä½³çæ¡: :: æ以æ们ä¸ä¼éè¿å¼å ¥æ°é®é¢æ¥ä¿®å¤é误ãé£æ ·çè°è¨å¾ç¯çï¼æ²¡æ人ç¥é ä½ æ¯å¦ççæè¿å±ãæ¯åè¿ä¸¤æ¥ï¼åéä¸æ¥ï¼è¿æ¯ååä¸æ¥ï¼åå两æ¥ï¼ ï¼http://lwn.net/articles/243460/ï¼ ä¸ç§ç¹å«ä¸å欢è¿çåå½ç±»åæ¯ç¨æ·ç©ºé´ABIçä»»ä½ååãä¸æ¦æ¥å£è¢«å¯¼åºå°ç¨æ·ç©ºé´ï¼ å°±å¿ é¡»æ éæå°æ¯æå®ãè¿ä¸äºå®ä½¿å¾ç¨æ·ç©ºé´æ¥å£çå建ç¹å«å ·ææææ§ï¼å 为å®ä»¬ ä¸è½ä»¥ä¸å ¼å®¹çæ¹å¼è¿è¡æ´æ¹ï¼æä»¥å¿ é¡»ç¬¬ä¸æ¬¡æ£ç¡®å°è¿è¡æ´æ¹ãå æ¤ï¼ç¨æ·ç©ºé´çé¢ æ»æ¯éè¦å¤§éçæèãæ¸ æ°çææ¡£å广æ³ç审æ¥ã 代ç æ£æ¥å·¥å · ------------ è³å°ç®åï¼ç¼åæ é误代ç ä»ç¶æ¯æ们ä¸å¾å°äººè½è¾¾å°ççæ³ç¶æãä¸è¿ï¼æ们å¸æå çæ¯ï¼å¨ä»£ç è¿å ¥ä¸»çº¿å æ ¸ä¹åï¼å°½å¯è½å¤å°æè·å¹¶ä¿®å¤è¿äºé误ã为æ¤ï¼å æ ¸å¼å人 åå·²ç»ç»è£ äºä¸ç³»å令人å°è±¡æ·±å»çå·¥å ·ï¼å¯ä»¥èªå¨æè·åç§åæ ·ç模ç³é®é¢ã计ç®æº åç°çä»»ä½é®é¢é½æ¯ä¸ä¸ªä»¥åä¸ä¼å°æ°ç¨æ·çé®é¢ï¼å æ¤ï¼åªè¦æå¯è½ï¼å°±åºè¯¥ä½¿ç¨ èªå¨åå·¥å ·ã 第ä¸æ¥åªæ¯æ³¨æç¼è¯å¨äº§ççè¦åãå½ä»£çæ¬çGCCå¯ä»¥æ£æµï¼å¹¶è¦åï¼å¤§éæ½å¨é误ã é常ï¼è¿äºè¦åé½æåçæ£çé®é¢ãæ交以ä¾å®¡é ç代ç é常ä¸ä¼äº§çä»»ä½ç¼è¯å¨è¦åã å¨æ¶é¤è¦åæ¶ï¼æ³¨æäºè§£çæ£çåå ï¼å¹¶å°½éé¿å âä¿®å¤âï¼ä½¿è¦åæ¶å¤±èä¸è§£å³å ¶åå ã 请注æï¼å¹¶éææç¼è¯å¨è¦åé½é»è®¤å¯ç¨ã使ç¨âmake EXTRA_CFLAGS=-Wâæ建å æ ¸ä»¥ è·å¾å®æ´éåã å æ ¸æä¾äºå 个é ç½®é项ï¼å¯ä»¥æå¼è°è¯åè½ï¼å¤§å¤æ°é ç½®é项ä½äºâkernel hackingâ åèåä¸ã对äºä»»ä½ç¨äºå¼åææµè¯ç®ççå æ ¸ï¼é½åºè¯¥å¯ç¨å ¶ä¸å 个é项ãç¹å«æ¯ï¼ æ¨åºè¯¥æå¼ï¼ - å¯ç¨ ENABLE_MUST_CHECK and FRAME_WARN 以è·å¾ä¸ç»é¢å¤çè¦åï¼ä»¥è§£å³ä½¿ç¨ä¸ æ¨è使ç¨çæ¥å£æ忽ç¥å½æ°çéè¦è¿åå¼çé®é¢ãè¿äºè¦åçæçè¾åºå¯è½æ¯åé¿ çï¼ä½æ¨ä¸å¿ æ å¿æ¥èªå æ ¸å ¶ä»é¨åçè¦åã - DEBUG_OBJECTS å°æ·»å 代ç ï¼ä»¥è·è¸ªå æ ¸å建çåç§å¯¹è±¡ççåæï¼å¹¶å¨åºç°é®é¢æ¶ ååºè¦åãå¦æè¦æ·»å å建ï¼å导åºï¼èªå·±çå¤æ对象çåç³»ç»ï¼è¯·èèæ·»å 对对象 è°è¯åºç¡ç»æçæ¯æã - DEBUG_SLAB å¯ä»¥åç°åç§å ååé å使ç¨é误ï¼å®åºè¯¥ç¨äºå¤§å¤æ°å¼åå æ ¸ã - DEBUG_SPINLOCK, DEBUG_ATOMIC_SLEEP and DEBUG_MUTEXES ä¼åç°è®¸å¤å¸¸è§ç éå®é误. è¿æå¾å¤å ¶ä»è°è¯é项ï¼å ¶ä¸ä¸äºå°å¨ä¸é¢è®¨è®ºãå ¶ä¸ä¸äºå ·ææ¾èçæ§è½å½±åï¼ä¸åº ä¸ç´ä½¿ç¨ãä½æ¯ï¼å¨å¦ä¹ å¯ç¨é项ä¸è±è´¹çä¸äºæ¶é´å¯è½ä¼å¨çæå å¾å°å¤æ¬¡åæ¥ã å ¶ä¸ä¸ä¸ªè¾éçè°è¯å·¥å ·æ¯éå®æ£æ¥å¨æâlockdepâãè¯¥å·¥å ·å°è·è¸ªç³»ç»ä¸æ¯ä¸ªé ï¼spinlockæmutexï¼çè·ååéæ¾ãè·åéçç¸å¯¹é¡ºåºãå½åä¸æç¯å¢ççãç¶åï¼ å®å¯ä»¥ç¡®ä¿æ»æ¯ä»¥ç¸åç顺åºè·åéï¼ç¸åçä¸æå设éç¨äºæææ åµï¼ççãæ¢å¥è¯ 说ï¼lockdepå¯ä»¥æ¾å°è®¸å¤åºæ¯ï¼å¨è¿äºåºæ¯ä¸ï¼ç³»ç»å¾å°ä¼æ»éãå¨é¨ç½²çç³»ç»ä¸ï¼ è¿ç§é®é¢å¯è½ä¼å¾çè¦ï¼å¯¹äºå¼å人ååç¨æ·èè¨ï¼ï¼LockDepå 许æå以èªå¨æ¹å¼ åç°é®é¢ãå ·æä»»ä½ç±»åçéæ®ééå®ç代ç å¨æ交å å«ååºå¨å¯ç¨lockdepçæ åµ ä¸è¿è¡ã ä½ä¸ºä¸ä¸ªå¤å¥çå æ ¸ç¨åºåï¼æ¯«æ çé®ï¼æ¨å°æ£æ¥ä»»ä½å¯è½å¤±è´¥çæä½ï¼å¦å ååé ï¼ çè¿åç¶æãç¶èï¼äºå®ä¸ï¼æç»çæ éæ¢å¤è·¯å¾å¯è½å®å ¨æ²¡æç»è¿æµè¯ãæªæµè¯ç 代ç å¾å¾ä¼è¢«ç ´åï¼å¦æææè¿äºé误å¤çè·¯å¾é½è¢«æ§è¡äºå 次ï¼é£ä¹æ¨å¯è½å¯¹ä»£ç æ´æä¿¡å¿ã å æ ¸æä¾äºä¸ä¸ªå¯ä»¥åå°è¿ä¸ç¹çéè¯¯æ³¨å ¥æ¡æ¶ï¼ç¹å«æ¯å¨æ¶åå ååé çæ åµä¸ã å¯ç¨æ éæ³¨å ¥åï¼å ååé çå¯é ç½®ç¾åæ¯å°å¤±è´¥ï¼è¿äºå¤±è´¥å¯ä»¥éå¶å¨ç¹å®ç代ç èå´å ãå¨å¯ç¨äºæ éæ³¨å ¥çæ åµä¸è¿è¡ï¼ç¨åºåå¯ä»¥çå°å½æ åµæ¶åæ¶ä»£ç å¦ä½å åºãæå ³å¦ä½ä½¿ç¨æ¤å·¥å ·ç详ç»ä¿¡æ¯ï¼è¯·åé Documentation/fault-injection/fault-injection.rstã 使ç¨âsparseâéæåæå·¥å ·å¯ä»¥åç°å ¶ä»ç±»åçé误ã对äºsparseï¼å¯ä»¥è¦åç¨åºå ç¨æ·ç©ºé´åå æ ¸ç©ºé´å°åä¹é´çæ··æ·ãbig endianåsmall endianæ°éçæ··åãå¨é è¦ä¸ç»ä½æ å¿çå°æ¹ä¼ éæ´æ°å¼ççãsparseå¿ é¡»åç¬å®è£ (å¦ææ¨çååæå¡å¨æ²¡ æå°å ¶æå ï¼å¯ä»¥å¨ https://sparse.wiki.kernel.org/index.php/Main_page)æ¾å°, ç¶åå¯ä»¥éè¿å¨makeå½ä»¤ä¸æ·»å âC=1âå¨ä»£ç ä¸è¿è¡å®ã âCoccinelleâå·¥å · :ref:`http://coccinelle.lip6.fr/ <devtools_coccinelle>` è½å¤åç°åç§æ½å¨çç¼ç é®é¢ï¼å®è¿å¯ä»¥ä¸ºè¿äºé®é¢æåºä¿®å¤æ¹æ¡ãå¨ scripts/coccinelleç®å½ä¸å·²ç»æå äºç¸å½å¤çå æ ¸âè¯ä¹è¡¥ä¸âï¼è¿è¡ âmake coccicheckâå°è¿è¡è¿äºè¯ä¹è¡¥ä¸å¹¶æ¥ååç°çä»»ä½é®é¢ãæå ³è¯¦ç»ä¿¡æ¯ï¼è¯·åé :ref:`Documentation/dev-tools/coccinelle.rst <devtools_coccinelle>` å ¶ä»ç±»åçå¯ç§»æ¤æ§é误æ好éè¿ä¸ºå ¶ä»ä½ç³»ç»æç¼è¯ä»£ç æ¥åç°ãå¦æ没æS/390ç³»ç» æBlackfinå¼åæ¿ï¼æ¨ä»ç¶å¯ä»¥æ§è¡ç¼è¯æ¥éª¤ãå¯ä»¥å¨ä»¥ä¸ä½ç½®æ¾å°ä¸ç»ç¨äºx86ç³»ç»ç 大å交åç¼è¯å¨ï¼ http://www.kernel.org/pub/tools/crosstool/ è±ä¸äºæ¶é´å®è£ å使ç¨è¿äºç¼è¯å¨å°æå©äºé¿å 以åçå°´å°¬ã ææ¡£ ---- ææ¡£é常æ¯å æ ¸å¼åè§åæ´ä¸ºä¾å¤ãå³ä¾¿å¦æ¤ï¼è¶³å¤çææ¡£å°æå©äºç®åå°æ°ä»£ç å并 å°å æ ¸ä¸çè¿ç¨ï¼ä½¿å ¶ä»å¼å人åççæ´»æ´è½»æ¾ï¼å¹¶å¯¹æ¨çç¨æ·ææ帮å©ãå¨è®¸å¤æ åµ ä¸ï¼æ件çæ·»å å·²åºæ¬ä¸æ为强å¶æ§çã ä»»ä½è¡¥ä¸ç第ä¸ä¸ªææ¡£æ¯å ¶å ³èçåæ´æ¥å¿ãæ¥å¿æ¡ç®åºè¯¥æè¿°æ£å¨è§£å³çé®é¢ãè§£å³ æ¹æ¡çå½¢å¼ãå¤çè¡¥ä¸ç人åã对æ§è½çä»»ä½ç¸å ³å½±åï¼ä»¥åç解补ä¸å¯è½éè¦çä»»ä½ å ¶ä»å 容ãç¡®ä¿changelog说æäºä¸ºä»ä¹è¡¥ä¸å¼å¾åºç¨ï¼å¤§éå¼å人åæªè½æä¾è¿äºä¿¡æ¯ã ä»»ä½æ·»å æ°ç¨æ·ç©ºé´çé¢ç代ç ï¼å æ¬æ°çsysfsæ/procæ件ï¼é½åºè¯¥å å«è¯¥çé¢ç ææ¡£ï¼è¯¥æ档使ç¨æ·ç©ºé´å¼å人åè½å¤ç¥éä»ä»¬å¨ä½¿ç¨ä»ä¹ã请åé Documentation/ABI/READMEï¼äºè§£å¦ä½æ ¼å¼åæ¤æ档以åéè¦æä¾åªäºä¿¡æ¯ã æ件 :ref:`Documentation/admin-guide/kernel-parameters.rst <kernelparameters>` æè¿°äºå æ ¸çææå¼å¯¼æ¶é´åæ°ãä»»ä½æ·»å æ°åæ°çè¡¥ä¸é½åºè¯¥å该æ件添å éå½ç æ¡ç®ã ä»»ä½æ°çé ç½®é项é½å¿ é¡»éæ帮å©ææ¬ï¼å¸®å©ææ¬æ¸ æ¥å°è§£éäºè¿äºé项以åç¨æ·å¯è½ å¸æä½æ¶éæ©å®ä»¬ã 许å¤åç³»ç»çå é¨APIä¿¡æ¯éè¿ä¸é¨æ ¼å¼åç注éè¿è¡è®°å½ï¼è¿äºæ³¨éå¯ä»¥éè¿ âkernel-docâèæ¬ä»¥å¤ç§æ¹å¼æååæ ¼å¼åãå¦ææ¨å¨å ·ækerneldoc注éçåç³»ç»ä¸ å·¥ä½ï¼ååºè¯¥ç»´æ¤å®ä»¬ï¼å¹¶æ ¹æ®éè¦ä¸ºå¤é¨å¯ç¨çåè½æ·»å å®ä»¬ãå³ä½¿å¨æ²¡æå¦æ¤è®°å½ çé¢åä¸ï¼ä¸ºå°æ¥æ·»å kerneldoc注éä¹æ²¡æåå¤ï¼å®é ä¸ï¼è¿å¯¹äºåå¼å§å¼åå æ ¸ç人 æ¥è¯´æ¯ä¸ä¸ªæç¨çæ´»å¨ãè¿äºæ³¨éçæ ¼å¼ä»¥åå¦ä½å建kerneldoc模æ¿çä¸äºä¿¡æ¯å¯ä»¥å¨ :ref:`Documentation/doc-guide/ <doc_guide>` ä¸æ¾å°ã ä»»ä½é 读大éç°æå æ ¸ä»£ç ç人é½ä¼æ³¨æå°ï¼æ³¨éç缺失å¾å¾æ¯æå¼å¾æ³¨æçãåä¸æ¬¡ï¼ 对æ°ä»£ç çæææ¯è¿å»æ´é«ï¼å并æªæ³¨éç代ç å°æ´å å°é¾ãè¿å°±æ¯è¯´ï¼äººä»¬å ä¹ä¸å¸æ ç¨è¯è¨æ³¨é代ç ã代ç æ¬èº«åºè¯¥æ¯å¯è¯»çï¼æ³¨é解éäºæ´å¾®å¦çæ¹é¢ã æäºäºæ åºè¯¥æ»æ¯è¢«æ³¨éã使ç¨å åå±éæ¶ï¼åºéä¸ä¸è¡æåï¼è§£é为ä»ä¹éè¦è®¾ç½®å å å±éãæ°æ®ç»æçéå®è§åé常éè¦å¨æ个å°æ¹è§£éãä¸è¬æ¥è¯´ï¼ä¸»è¦æ°æ®ç»æéè¦å ¨é¢ çææ¡£ãåºè¯¥æåºåç¬ä»£ç ä½ä¹é´ä¸ææ¾çä¾èµæ§ãä»»ä½å¯è½è¯±ä½¿ä»£ç çé¨äººè¿è¡é误ç âæ¸ çâçäºæ é½éè¦ä¸ä¸ªæ³¨éæ¥è¯´æ为ä»ä¹è¦è¿æ ·åãççã å é¨APIæ´æ¹ ----------- å æ ¸æä¾ç»ç¨æ·ç©ºé´çäºè¿å¶æ¥å£ä¸è½è¢«ç ´åï¼é¤éå¨æ严éçæ åµä¸ãç¸åï¼å æ ¸ç å é¨ç¼ç¨æ¥å£æ¯é«åº¦æµå¨çï¼å½éè¦æ¶å¯ä»¥æ´æ¹ãå¦æä½ åç°èªå·±ä¸å¾ä¸å¤çä¸ä¸ªå æ ¸ APIï¼æè ä» ä» å 为å®ä¸æ»¡è¶³ä½ çéæ±èä¸ä½¿ç¨ç¹å®çåè½ï¼è¿å¯è½æ¯APIéè¦æ¹åçä¸ ä¸ªæ å¿ãä½ä¸ºå æ ¸å¼å人åï¼æ¨ææè¿è¡æ¤ç±»æ´æ¹ã å½ç¶, å¯ä»¥è¿è¡APIæ´æ¹ï¼ä½å®ä»¬å¿ é¡»æ¯åççãå æ¤ï¼ä»»ä½è¿è¡å é¨APIæ´æ¹çè¡¥ä¸é½ åºè¯¥é带ä¸ä¸ªå ³äºæ´æ¹å 容åå¿ è¦åå çæè¿°ãè¿ç§ååä¹åºè¯¥å解æä¸ä¸ªåç¬çè¡¥ä¸ï¼ èä¸æ¯åå¨ä¸ä¸ªæ´å¤§çè¡¥ä¸ä¸ã å¦ä¸ä¸ªè¦ç¹æ¯ï¼æ´æ¹å é¨APIçå¼å人åé常è¦è´è´£ä¿®å¤å æ ¸æ ä¸è¢«æ´æ¹ç ´åçä»»ä½ä»£ç ã 对äºä¸ä¸ªå¹¿æ³ä½¿ç¨çå½æ°ï¼è¿ä¸ªèè´£å¯ä»¥å¯¼è´æç¾ä¸åçååï¼å ¶ä¸è®¸å¤ååå¯è½ä¸å ¶ä» å¼å人åæ£å¨åçå·¥ä½ç¸å²çªãä¸ç¨è¯´ï¼è¿å¯è½æ¯ä¸é¡¹å¤§å·¥ä½ï¼æ以æ好确ä¿çç±æ¯ å¯é çã请注æï¼coccinelleå·¥å ·å¯ä»¥å¸®å©è¿è¡å¹¿æ³çAPIæ´æ¹ã å¨è¿è¡ä¸å ¼å®¹çAPIæ´æ¹æ¶ï¼åºå°½å¯è½ç¡®ä¿ç¼è¯å¨æè·æªæ´æ°ç代ç ãè¿å°å¸®å©æ¨ç¡®ä¿æ¾ å°è¯¥æ¥å£çæ å ç¨å¤ãå®è¿å°è¦åå¼å人åæ å¤ä»£ç åå¨ä»ä»¬éè¦ååºçæ´æ¹ãæ¯ææ å¤ ä»£ç ä¸æ¯å æ ¸å¼å人åéè¦æ å¿çäºæ ï¼ä½æ¯æ们ä¹ä¸å¿ 使æ å¤å¼å人åççæ´»æä¸å¿ è¦ çå°é¾ã