《chap6-1 嵌入式Linux驱动程序开发》.ppt

《chap6-1 嵌入式Linux驱动程序开发》.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * ? irq表示所要申请的硬件中断号。 ? handler为向系统登记的中断处理子程序,中断产生时由系统来调用,调用时所带参数irq为中断号,dev_id为申请时告诉系统的设备标识,regs为中断发生时寄存器内容。 ? device为设备名,将会出现在/proc/interrupts文件里。 ? flag是申请时的选项,它决定中断处理程序的一些特性,其中最重要的是决定中断处理程序是快速处理程序(flag里设置了SA_INTERRUPT)还是慢速处理程序(不设置SA_INTERRUPT)。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * static void __exit buttons_exit(void) { devfs_unregister(devfs_handle); free_irqs(); unregister_chrdev(BUTTON_MAJOR, DEVICE_NAME); } 完整的程序位于buttons/buttons.c中,该程序参考了友善之臂公司提供的按键测试程序matrix5-buttons.c。 使用手工输入命令的方式编译buttons驱动模块: $arm-linux-gcc -D__KERNEL__ -I /kernel/include -DKBUILD_BASENAME=buttons –DMODULE –c –o buttons.o buttons.c 以上命令将生成buttons.o文件,把该文件复制到目标板的/lib 目录下,使用以下命令安装buttons模块: $insmod /lib/buttons.o 卸载该模块的命令是: $rmmod buttons.o 按键测试程序的实现 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/select.h> #include <sys/time.h> #include <errno.h> int main(void) { int buttons_fd; int key_value; buttons_fd = open("/dev/buttons", 0); if (buttons_fd < 0) { perror("open device buttons"); exit(1); } for (;;) { fd_set rds; int ret; FD_ZERO(&rds); FD_SET(buttons_fd, &rds); ret = select(buttons_fd + 1, &rds, NULL, NULL, NULL); if (ret < 0) { perror("select"); exit(1); } if (ret == 0) { printf("Timeout.\n"); } else if (FD_ISSET(buttons_fd, &rds)) { int ret = read(buttons_fd, &key_value, sizeof key_value); if (ret != sizeof key_value) { if (errno != EAGAIN) perror("read buttons\n"); continue; } else { printf("buttons_value: %d\n", key_value); } } } close(buttons_fd); return 0; } 有了按键驱动程序,就可以在应用程序中编写驱动调用函数,然后利用文件操作实现对按键的各种操作了。完整的应用程序源代码清单如下: 1.文件描述符集fd_set 在linux/types.h中存在对文件描述符集fd_set的定义:typedef __kernel_fd_set fd_set; 而在linux/posix_types中存在结构的声明: typedef struct { unsigned long fds_bits [__FDSET_LONGS]; } __kernel_fd_set fd_set实际上是long类型的数组,每一个数组元素都能与一个打开的文件句柄建立联系,不管是Socke

文档评论(0)

tangtianbao1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档