当前位置: 首页 >> 程序设计 >> Linux device driver 3 读书笔记: Chapter4-5
 

Linux device driver 3 读书笔记: Chapter4-5

作者:      来源:http://layne-sah.longlong.cn/sah/     发表时间:2006-03-16     浏览次数:      字号:    

第四章和第五章的笔记。这两章分别是:

  • Debugging Techniques
  • Concurrency and Race Conditions

  第四章里全是Debug的方法,实际开发时这是必须掌握的,包括:

  • 内核中实现的某些检查机制
      内核中提供的检查机制需要在menuconfig时enable,可以检查出很多书中介绍的常见错误,例如Spinlock未初始化、sleeping with a Spinlock、堆栈溢出、定义为__init的函数在被卸掉以后又被调用等。比较有用!
  • 使用printk()打印状态信息
      打印状态信息,这个上学的时候就知道了!Just for completeness吧!
  • 使用proc文件系统
      这个用处应该也比较广的。原理已经掌握了,就是先在/proc文件系统下注册一个文件,然后提供当有人读这个文件时,用于提供文件内容的方法。作者推荐使用seq_file的方式,也就是start、next、show、stop四个函数。相对于原来的方式,seq_file的方式处理大量信息的时候比较容易。
  • 使用strace工具
      strace工具可以显示一个程序执行过程中的各个系统调用的参数和返回值。比较厉害!
  • 如何理解Oops信息
      Oops信息是内核中出现比较严重的错误,但是Linux没有被hung up时,显示的信息。其内容主要是:IP指针、所在的函数名、CPU寄存器信息、堆栈中的内容、Call trace。比较牛B!
  • gdb、kdb、kgdb的介绍
      这部分可能是最有用的了吧,尤其是使用gdb调试内核。但是我目前没有那么复杂的项目可做,所以暂时不想学。

  现在可以说掌握了的只有使用printk()、读Oops信息和实现/proc文件系统三个。其他方法等到用到的时候再回过头来查吧。

  第五章讲了进程并发有关的内容,包括怎么控制race。作者把控制方法分成几类:

  • Semaphore
      操作系统课里叫“信号量”(奇怪的翻译方法),提供P、V两种操作的那个。
  • Completion
      不知道咋译,也没仔细看。
  • Spinlock
      译为“自旋锁”,也没仔细看呢。
  • Atomic Variable
      应该是译为“原子变量”,在其上的操作很简单,但都是atomic的。

  Completion和Spinlock都是由Semaphore变形而来的,所以没仔细看。Semaphore和Atomic Variable两部分了解了,但是还没实际用它们写过代码。

  这章里有一个地方郁闷了很久:Semaphore的一系列P操作函数中,有个down_interruptible()。这个家伙在进入asleep状态等待semaphore被释放的时候,有可能被Signal唤醒。所以使用这个函数时,要判断它的返回值,看它是因为啥醒的。如果返回值为零,则说明是取得了semaphore而返回,相当于“自然醒”;不然则是被某个Signal给唤醒了,那么驱动程序需要返回-ERESTARTSYS(意思是告诉上一层的函数“重新尝试这个系统调用”)。这段得看了第六章的“IO Blocking”和“Asynchronouns Notification”两部分,还得了解Linux进程管理中的信号机制(Signal),才能明白。可折腾死我了。

  总结这章,其实也挺简单。就是一句话:你正在操作的数据随时可能被别的进程强奸,所以不要对数据报有任何假设,除非你hold了她的semaphore。

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •