Chinaunix首页 | 论坛 | 博客
  • 博客访问: 297435
  • 博文数量: 41
  • 博客积分: 857
  • 博客等级: 准尉
  • 技术积分: 614
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-11 12:42
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(2)

2012年(6)

2011年(32)

分类: LINUX

2011-08-19 14:48:07

以下的实现是在/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...中的多个参数串联起来.
阅读(1053) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~