以下的实现是在/opt/FrienldyARM/mini2440/linux-2.6.32.2(友善提供的)内核下编译开发.
相关知识点:
对printk打印优先级的定义是在/linux-2.6.23.2/include/linux/kernel.h中,截图如下:
对printk默认优先级的宏定义是在/linux-2.6.32.2/kernel/printk.c中,截图如下:
printk打印中几个关于调试用的宏定义:
(下面的__在这里是两个_ ,这个宏可以在内核和用户空间使用.)
__FILE__ : 表示源代码文件,以绝对路径的方式出现.(注意这里是绝对路径) 对应字符串类型(%s)
__LINE__: 表示这行printk允许在这个源代码文件中的第几行,这是一个很好的给出调测点位置的信息.(%d)
__FUNCTION__: 表示在那个函数之中,也是比较好的定位方式.(%s)
__STDC__: 通常为1,表示为标准的ANSI C.(%d)
__DATE__:
__TIME__: 这两个是非常常用的.不过有时我们需要使用msec,这种情况下只好自己写了.(%s)
下附程序进行验证说明:
编译下载到mini2440开发板,加载模块和卸载模块结果如下:
另外经常在调试打印的时候见到下面的打印宏定义:
#define DEBUG_SWITCH 0
5 #if DEBUG_SWITCH
6 #define P_DEBUG(fmt, args...) printk("<1>" "[%s]"fmt, __FUNCTION__, ##args)
7 #else
8 #define P_DEBUG(fmt, args...) printk("<7>" "[%s]"fmt, __FUNCTION__, ##args)
9 #endif
现只针对args...和##args作解释,其它不作解释:
args...
GCC编译器中的CPP预编译器,是支持这种写法的,args... 比 args,...的写法可读性较好.
其含义为:应该是P_DEBUG的参数,第一个传给fmt,第二个开始传给args...可为多个.
##args
其含义就是把args...中的多个参数串联起来.
阅读(1229) | 评论(0) | 转发(0) |