免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2790 | 回复: 2
打印 上一主题 下一主题

[学习分享] linux 内核定时器驱动程序的使用笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-08 21:59 |只看该作者 |倒序浏览
    最近在做一个项目,需要使用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)

论坛徽章:
31
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43CU十二周年纪念徽章
日期:2013-10-24 15:41:34丑牛
日期:2013-12-01 10:11:07水瓶座
日期:2014-01-15 08:47:25
2 [报告]
发表于 2013-04-09 08:58 |只看该作者
感谢lz的分享。。

论坛徽章:
0
3 [报告]
发表于 2015-02-11 11:32 |只看该作者
多谢楼主分享,楼主是个好银啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP