Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1566121
  • 博文数量: 77
  • 博客积分: 1205
  • 博客等级: 少尉
  • 技术积分: 4476
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-22 21:48
文章分类
文章存档

2018年(1)

2017年(1)

2015年(1)

2014年(18)

2013年(12)

2012年(44)

分类: IT职场

2014-07-22 10:59:37

今天收邮箱,发现一封询问《深入》一书中的一个技术细节的问题:
在阅读 <<深入linux设备驱动程序内核机制>> 第五章 195页,如下对应于linux 2.6.39 内核版本 函数 __do_softirq中,
发现  trace_softirq_entry 和 trace_softirq_exit 没有定义,
并且我也翻阅了其他较老以及较新的内核版本中 都没有发现 以上两个函数的定义(或者宏),请问您这是什么情况?

我的回复是:
你自己想办法解决了没有?
你可以在__do_softirq()函数前面定义一个同样的函数,比如:
void trace_softirq_entry(unsigned int nr)
{
        if (nr != 0)
                return;
        else
                nr++;
}

这样编译肯定会产生错误,类似error: redefinition of ‘trace_softirq_entry’.........................................

答案是该函数定义在include/trace/events/irq.h:117行(我用的3.10版本,其他版本可能略有不同):
DEFINE_EVENT(softirq, softirq_entry,

    TP_PROTO(unsigned int vec_nr),

    TP_ARGS(vec_nr)
);

这个答案并不重要,关键是你自己要想办法去解决

我猜测那位同学估计在源代码里搜了很久,最终也没有找到trace_softirq_entry的定义。但是你可以利用编译器来帮你完成啊,善于利用工具。独立思考,试着自己去解决问题,时间久了,会发现自己在遇到不同问题时会下意识地有对应的解决问题的思路。譬如语感。
阅读(12453) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

Trigger_Huang2014-07-31 15:09:23

有道理…… 
感谢楼主授人以渔!
楼主可否开篇博文,专讲一些实用的kernel的技巧,比如阅读以及一些实用的 ARM&&X86 平台的调试工具(除printk以外)和方法?