Chapter 13: Printing kernel messages


 


Kernel developers like to be seen as literate. Do mind the spelling of kernel messages to make a good impression. Do not use crippled words like "dont"; use "do not" or "don't" instead.  Make the messages concise, clear, and unambiguous.


核心開發者應該都喜歡被看成是有文化的人,因此一定不要忘記核心訊息的拼寫檢查,這是給使用者留下良好印象的基礎。不要使用未規範的拼寫,比如"dont",而應該使用"do not"或者 " don't "。儘可能使息簡明,清楚,和不含糊


 


Kernel messages do not have to be terminated with a period.


核心訊息不必在一段時間內中止。


 


Printing numbers in parentheses (%d) adds no value and should be avoided.


列印核心訊息時應該避免將數字放在括號內,比如(%d),這會導致列印出一個空值。


 


There are a number of driver model diagnostic macros in <linux/device.h> which you should use to make sure messages are matched to the right device and driver, and are tagged with the right level:  dev_err(), dev_warn(), dev_info(), and so forth.  For messages that aren't associated with a particular device, <linux/kernel.h> defines pr_debug() and pr_info().


 


Coming up with good debugging messages can be quite a challenge; and once you have them, they can be a huge help for remote troubleshooting.  Such messages should be compiled out when the DEBUG symbol is not defined (that is, by default they are not included).  When you use dev_dbg() or pr_debug(), that's automatic.  Many subsystems have Kconfig options to turn on -DDEBUG.


A related convention uses VERBOSE_DEBUG to add dev_vdbg() messages to the ones already enabled by DEBUG.


 


 




 


         Chapter 14: Allocating memory


 


The kernel provides the following general purpose memory allocators:


kmalloc(), kzalloc(), kcalloc(), and vmalloc().  Please refer to the API documentation for further information about them.


 


The preferred form for passing a size of a struct is the following:


 


    p = kmalloc(sizeof(*p), ...);


 


The alternative form where struct name is spelled out hurts readability and introduces an opportunity for a bug when the pointer variable type is changed but the corresponding sizeof that is passed to a memory allocator is not.


 


Casting the return value which is a void pointer is redundant. The conversion from void pointer to any other pointer type is guaranteed by the C programming language.

arrow
arrow
    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()