linux设备驱动程序调试

一、写linux设备驱动程序最难的地方就是没有强大的调试工具,一般间接或者直接的调试手段:

                                    1.  利用printk  

                                    2.  查看OOP消息

                                    3.  利用strace  

                                    4.  利用内核内置的hacking选项 

                                    5.  利用ioctl方法 

                                    6.  利用/proc文件系统 

                                    7.  使用kgdb

                                    8.  使用systemtap

二、

       1,利用printk函数将我们需要观察的参数打印出来

       2,OOP消息,我们加载了驱动,如果有什么指针错误,接下来都会打印出来,这个我们根据打印的意思都可以查到是什么错误

       3, strace

              打印出用户空间程序所调用的系统调用,还能显示出系统调用的参数和返回值。举例:

以后再举例

       4,利用内核内置的hacking选项 

         内核开发者在make menuconfig的Kernel hacking提供了一些内核调试选项。这些选项有助于我们调试驱动程序,因为当我们启用某些调试选项的时候,操作系统会在发现驱动运行有问题时给出一些错误提示信息,而这些信息非常有助于驱动开发者找出驱动中的问题所在。下面就举几个简单例子。

先启用如下选项:

  • General setup — Configure standard kernel features (for small systems) — Load all symbols for debugging/ksymoops (NEW)
  • Kernel hacking — Kernel debugging
  • Device Drivers — Generic Driver Options — Driver Core verbose debug messages

1、Kernel debugging — Spinlock and rw-lock debugging: basic checks (NEW)可以检查到未初始化的自旋锁

2、Kernel debugging — Mutex debugging: basic checks (NEW) 可以检查到未初始化的信号量

717                 //init_MUTEX(&scull_devices[i].sem);

详细举例:

///以后再写//2016/11/12//

     5,利用ioctl方法

          由于驱动中的ioctl函数可以将驱动的一些信息返回给用户程序,也可以让用户程序通过ioctl系统调用设置一些驱动的参数。所以在驱动的开发过程中,可以扩展一些ioctl的命令用于传递和设置调试驱动时所需各种信息和参数,以达到调试驱动的目的。如何在驱动中实现ioctl,请参见“驱动程序对ioctl的规范实现”一文

     6,利用/proc 文件系统

          /proc文件系统用于内核向用户空间暴露一些内核的信息。因此出于调试的目的,我们可以在驱动代码中增加向/proc文件系统导出有助于监视驱动的信息的代码。这样一来,我们就可以通过查看/proc中的相关信息来监视和调试驱动。如何在驱动中实现向/proc文件系统导出信息,请参见《Linux Device Driver》的4.3节。

     7,使用kgdb

         kgdb是在内核源码中打用于调试内核的补丁,然后通过相应的硬件和软件,就可以像gdb单步调试应用程序一样来调试内核(当然包括驱动)。至于kgdb如何使用,就请你google吧,实在不行,百度一下也可以。

 8,使用systemtap调试

systemtap相当于往运行的内核里边添加了我们需要的代码,与其他诸如printk方式相比,systemtap动态的往正在运行的内核代码中注入需要的代码观察打印相关数据。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值