Chinaunix

标题: linux 内核定时器驱动程序的使用笔记 [打印本页]

作者: 你牛克斯    时间: 2013-04-08 21:59
标题: linux 内核定时器驱动程序的使用笔记
    最近在做一个项目,需要使用linux内核定时器精确控制时间。由于时间有限,而且以前也没从事过驱动的开发,只能从网上下载一个例子来学习,消化后再修改。但是在调试该例子的过程中就遇到了一大堆麻烦,但经过一个下午的奋战,还好都解决了。我觉得这个过程非常值得记录下来,第一给自己留个笔记,以后遇到类似问题解决起来就得心应手了,第二,晒出来和大家分享,本人是个半路出家学linux的菜鸟,希望各位大神不吝赐教!
   下载到的程序在附件里面完整的
   下载的程序在文件夹second里,有三个文件:定时器驱动程序:second.c  驱动测试程序:second_test.c
make文件:Makefile
     将文件夹拷贝到虚拟机fedora的/root目录下,cd /root/second进入程序所在目录,然后用vi Makefile修改内核所在路径,我的内核在/opt/FriendlyARM/mini6410/linux/linux-2.6.36路径下,
所以KERNELDIR=后面改为/opt/FriendlyARM/mini6410/linux/linux-2.6.36
    改了以后,输入命令make,结果出来了两个错误,比如implicit declaration of function 'kmalloc',都是说second.c用到的某个函数没有定义,发现这两个函数都是内核函数,可以判断一定是少包含了头文件,后来发现确实是这样的,在头文件声明的部位加上#include <linux/slab.h>,再make一下,出现一下信息
    make -C /opt/FriendlyARM/mini6410/linux/linux-2.6.36 M=/root/myproject/second modules
      make[1]: Entering directory `/opt/FriendlyARM/mini6410/linux/linux-2.6.36'
      Building modules, stage 2.
      MODPOST 1 modules
      make[1]: Leaving directory `/opt/FriendlyARM/mini6410/linux/linux-2.6.36'
   错误没有了,驱动程序编译成功,生成second.ko文件

  下面就是要将second.ko加载到设备中去,输入insmod second.ko,结果又出现错误了:
   error inserting second.ko: -1 Device or resource busy
   查看cat /proc/devices,发现设备号为252的被另外一个设备驱动bsg占用,而我是用register_chrdev_region(devno, 1, "second")来静态分配设备号的,看宏定义中有#define SECOND_MAJOR 252,定义的设备号正好也是252,被占用的设备号是不能被申请的,所以出现该驱动装载错误。解决方法就是将second.c的设备号由252改为224,即#define SECOND_MAJOR 252,然后再用make clean清理原来的编译痕迹,再make一次,然后用insmod second.ko再试着装载,没有报错,装载成功。用cat /proc/devices查看设备号分配,有224 second这一行,设备驱动加载成功,下面建立设备节点文件。
  输入mknod  /dev/ustc c 224 0  命令。224是设备号。
  输入ls /dev/  查看dev目录,可以找到second这个节点文件,节点文件建立成功。下面我们就可以通过测试程序来试验内核定时器驱动了。
  用gcc -o second_test second_test.c
   编译测试文件,生成了second_test文件,然后输入./second_test,于是定时器就开始工作了,每隔一秒出现两行:
current jiffies is 11035
seconds after open /dev/second :126
current jiffies is 11135
seconds after open /dev/second :127
current jiffies is 11235
seconds after open /dev/second :128
current jiffies is 11335
......
  内核定时器使用成功。 second.rar (85.87 KB, 下载次数: 57)


作者: ddd010    时间: 2013-04-09 08:58
感谢lz的分享。。
作者: xinyz04104    时间: 2015-02-11 11:32
多谢楼主分享,楼主是个好银啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2