- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 字符型驱动 * 丰海 驱动程序: 将底层硬件的操作写成供应用程序可以调用的函数集合。 设备文件: 为了让应用程序方便地控制硬件设备,驱动程序将硬件映射成一个设备文件,这样应用程序通过读写这个设备文件就可以控制硬件设备了。Linux设备分为二类:字符设备和块设备,本书只讲解字符型设备的驱动编写。 应用程序: 应用程序通过读写设备文件,并调用驱动程序里的函数来控制硬件设备。 硬件接口:所有的开发板都会把GPIO接口引出来。 驱动程序与应用程序之间的区别 1.应用程序有一个main主函数,从头到尾执行一个任务; 驱动程序却没有main函数。 2.应用程序可以和GLIBC库连接,因此可以包含标准的头文件,比如stdio.h, 在驱动程序中是不能使用标准C库的,比如输出打印函数只能使用内核的printk函数,包含的头文件只能是内核的头文件,比如linux/module.h。 一个字符型驱动的标准框架如下: 1 头文件和宏定义 2 ioctl函数:定义了供应用程序调用的ioctl函数的实体 3 结构体:将所有供应用程序调用的函数名注册在这个结构体中 4 初始化函数模块hello_init:调用register_chrdev()函数为这份 驱动注册主设备号,如; ret = register_chrdev(0, DEVICE_NAME, hello_fops); 5 退出函数模块hello_exit:调用unregister_chrdev( ) 函数注销刚 才申请的主设备号,如: unregister_chrdev(demoMajor, DEVICE_NAME); 6 模块说明:说明那些函数是初始化函数;那些函数是退出函数 1. 实例1驱动的功能说明 我们先编写一个最简单的HELLO 驱动,这个驱动的功能就是用insmod加载时显示: Hello! Welcome to study character driver! 用rmmod卸载模块时显示: Goodbye! Character driver is easy! /***第1部分开始*声明包含所需要的头文件***/ #include linux/kernel.h #include linux/module.h /***第2部分开始* hello_init()初始化函数的具体定义**/ static int __init hello_init(void) { printk(KERN_NOTICE Hello!\nWelcome to study character driver!\n); return 0; } /***第3部分开始* hello_exit()退出函数的具体定义***/ void __exit hello_exit(void) { printk(KERN_NOTICE Goodbye!\nCharacter driver is easy!\n); } /***第4部分开始* 驱动的有关声明***/ module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE(Dual BSD/GPL); Makefile文件 # 指定内核源代码的路径 KERNELDIR ?= /opt/EmbedSky/linux-2.6.30.4/ # 指定编译好的驱动放在当前路径 PWD := $(shell pwd) all: modules modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.order *.mod.c *.symvers .tmp_versions obj-m := hello_driver.o # 生成hello_driver.ko驱动 输入make编译驱动 fh@fh:~/my_experiment/hello$ make make -C /opt/EmbedSky/linux-2.6.30.4/ M=/home/fh/my_experiment/hello modules make[1]: 正在进入目录 `/opt/EmbedSky/linux-2.6.30.4 CC [M] /home/fh/my_experiment/hello/hello_driver.o Building modules, stage 2. MODPOST 1 modules CC /home/fh/my_experiment/hello/
您可能关注的文档
- 汽油发动机微机控制系统检修 课件2 2.7节气门位置传感器.ppt
- 汽油发动机微机控制系统检修 课件2 2.8温度传感器.ppt
- 汽油发动机微机控制系统检修 课件2 2.9氧传感器.ppt
- 汽油发动机微机控制系统检修 课件3 3.1.ppt
- 汽油发动机微机控制系统检修 课件3 3.2.ppt
- 汽油发动机微机控制系统检修 课件3 3.3.ppt
- 汽油发动机微机控制系统检修 课件4,5 4.1.ppt
- 汽油发动机微机控制系统检修 课件4,5 4.2.ppt
- 汽油发动机微机控制系统检修 课件4,5 4.3.ppt
- 汽油发动机微机控制系统检修 课件4,5 4.4.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第7章_GPIO接口控制LED灯.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第8章_远程温度采集与曲线的生成综合实例.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第9章_PWM控制蜂鸣器.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第10章_基于QT的嵌入式GUI程序设计基础.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第八章_远程温度采集与曲线的生成综合实例.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第二章_Linux基础.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第九章_PWM控制蜂鸣器.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第六章_字符型驱动.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第七章_GPIO接口控制LED灯.ppt
- 嵌入式Linux系统应用及项目实践 教学课件 作者 丰海 第三章_电子学基础知识.ppt
文档评论(0)