您好,登錄后才能下訂單哦!
這篇文章主要介紹“Linux內(nèi)核源代碼編程的規(guī)范有哪些”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Linux內(nèi)核源代碼編程的規(guī)范有哪些”文章能幫助大家解決問題。
任何一行超過八十列寬度的語句都應(yīng)該拆分成多個行,除非超過八十列的部分可以提高可讀性且不會隱藏信息。但是,千萬不要把用戶可見的字符串,比如 printk
的信息,拆分成多行,因為這樣會導(dǎo)致使用 grep
的時候找不到這些信息。
c語言里的if
,do
, while
, for
語句都會使用到大括號,內(nèi)核代碼傾向于把左括號放在行末,把右括號放在行首,并且大括號和前面的語句,以及if
和后面的語句,都保留一個空格。
這個還是單獨列出來說明一下吧,因為內(nèi)核代碼里用到空格的地方太多了。
Linux
內(nèi)核風(fēng)格的空格主要用在一些關(guān)鍵字上,即在關(guān)鍵字之后添一個空格。值得關(guān)注的例外是一些長得像函數(shù)的關(guān)鍵字,比如:sizeof
, typeof
, alignof
, attribute
,在 Linux
中,這些關(guān)鍵字的使用都會帶上一對括號,比如sizeof(int)
。
所以在下面這些關(guān)鍵字后面需要添加一個空格:
if, switch, case, for, do, while
但是, sizeof
, typeof
, alignof
, attribute
之后則不需要添加空格:
s = sizeof(struct file);
在聲明指針或者返回值為指針的函數(shù)時,星號的位置應(yīng)該緊靠著變量名或函數(shù)名,而不是類型名,例如:
char linux_banner; unsigned long long memparse(char ptr, char *retptr); char match_strdup(substring_t *s);
在二元操作符和三元操作符周圍添加一個空格,例如:
= + - < > * / % | & ^ <= >= == != ? :
但是不要在一元操作符之后添加空格:
& * + - ~ ! sizeof typeof alignof attribute defined
C
是一種簡潔粗曠的語言,因此,你的命名也應(yīng)該是簡潔的。linux
內(nèi)核里的變量定義應(yīng)該盡可能簡單,在不產(chǎn)生歧義的情況下,越簡單越好??梢杂孟聞澗€,但是絕對不推薦使用大寫字母。所以,內(nèi)核里的變量和函數(shù)定義不要使用駝峰命名法。
函數(shù)應(yīng)該短小精悍,一個函數(shù)只干一件事。幾百行代碼組成一個函數(shù)是不被推薦的。
關(guān)鍵函數(shù)的前面最好留有注釋。
多行注釋推薦格式如下:
/*
To support ISA shared interrupts, we need to have one interrupt
handler that ensures that the IRQ line has been deasserted
before returning. Failing to do this will result in the IRQ
line being stuck active, and, since ISA irqs are edge triggered,
no more IRQs will be seen. */
所謂函數(shù)自注釋,就是從你的函數(shù)名就可以猜到你要干什么,比如內(nèi)核的:
wait_event(), wait_event_interruptible(), wait_event_interruptible_timeout()等。
注意,寫代碼不只是寫給現(xiàn)在的自己,也是寫給以后的自己,也是寫給其他人看的。如果你回看你一年前寫的代碼都很陌生,那說明你的代碼規(guī)范是有問題的。
編寫好的調(diào)試信息是一項巨大的挑戰(zhàn),一旦你完成了,這些信息會對遠程調(diào)試產(chǎn)生巨大幫助
很多子系統(tǒng)在對應(yīng)的 makefile
里都有 Kconfig
調(diào)試選項來打開 -DDEBUG
,或者是在文件里定義宏 #define DEBUG
。當(dāng)調(diào)試信息可以被無條件打印,或者說已經(jīng)編譯了和調(diào)試有關(guān)的 #ifdef
段,那么 printk
(KERN_DEBUG ...) 就可以用來打印調(diào)試信息。
Inline
關(guān)鍵字會讓編譯器將指定的函數(shù)體插入并取代每一處調(diào)用該函數(shù)的地方(上下文),從而節(jié)省了每次調(diào)用函數(shù)帶來的額外時間開支。然而,inline
關(guān)鍵字的泛濫,會使內(nèi)核變大,從而使整個系統(tǒng)運行速度變慢,因為大內(nèi)核會占用更多的CPU高速緩存,同時會導(dǎo)致可用內(nèi)存頁緩存減少。想象一下,一次頁緩存未命中就會導(dǎo)致一次磁盤尋址,這至少耗費5毫秒。5毫秒足夠CPU運行很多很多的指令。
關(guān)于“Linux內(nèi)核源代碼編程的規(guī)范有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。