最近在向Linux內核提交一些驅動程序,在提交的過程當中,發現本身的代碼離Linux內核的coding style要求仍是差不少。當初本身對內核文檔裏的CodingStyle一文只是粗略的瀏覽,真正寫代碼的時候在不少細節上會照顧不周。不過, 在不遵照規則的程序員隊伍裏,我並非孤獨的。若是去看drivers/staging下的代碼,就會發現不少驅動程序都沒有嚴格遵照內核的coding style,並且在不少驅動程序的TODO文件裏,都會把"checkpatch.pl fixes"做爲本身的目標之一(checkpatch.pl是用來檢查代碼是否符合coding style的腳本)。程序員
不能否認,coding style是仁者見仁、智者見智的事情。好比Microsoft所推崇的匈牙利命名法,在Linus看來就是及其腦殘(brain damaged)的作法。也許您並不同意Linus制定的coding style,但在提交內核驅動這件事上,最好仍是以大局爲重。對於這麼一個龐大的集市式的開發來講,隨意書寫代碼必將帶來嚴重的可維護性的災難。工具
一些輔助工具
當代碼量達到必定程度時,手動去檢查和修改coding style是很是繁瑣的工做,幸虧,咱們還有一些工具可使用。編碼
scripts/checkpatch.pl
這是一個檢查代碼是否符合內核編碼規範的的腳本。顧名思義,checkpatch是用來檢查patch的,默認的調用也確實如此。若是用來檢查原文件,須要加上「-f」的選項。code
咱們來看一段無聊的代碼(文件名爲print_msg.c):ip
1
2
3
4
5
6
7
8
9
10
11
12
void print_msg(int a)
{開發
switch (a) { case 1: printf("a == 1\n"); break; case 2: printf("a == 2\n"); break; }
}
這段代碼的coding style是否有問題呢?用checkpatch.pl來檢查一下:文檔
scripts/checkpatch.pl -f print_msg.cit
檢查的結果是:coding
ERROR: switch and case should be at the same indent程序