- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《嵌入式Linux字符设备驱动LED驱动编写》.pdf
英贝得教育之学员笔记 htt p://
嵌入式 Linux 字符设备驱动 LED 驱动编写嵌入式 Linux 字符设备驱动开发总结--LED 驱动
作者:英贝得教育02 就业班杨广东 时间:2011 年8月
设备驱动程序是集成在内核中,处理硬件或操作硬件控制器的软件。字符设备还是块设备都为内核提供相同的调用接口,
所以内核能以相同的方式处理不同的设备。 字符设备提供给应用程序流控制接口有:open/read/write/ioctl/……,
添加一个字符设备驱动程序,实际上是给上述操作添加对应的代码
模块的概念:linux 内核模块是一种可以被内核动态的加载和卸载的可执行的二进制代码。通过内核模块可以扩展内核
的功能,通常内核模块被用于设备驱动,文件系统等。如果没有内核模块,需要向内核添加功能就需要修改代码,重新
编译内核,安装新内核等,不仅繁琐而且容易出错,不易于调试。Linux内核是一个整体结构,各种功能结合在一起,
linux 内核的开发者设计了内核模块机制,从代码的角度看,内核模块是一组可以完成某种功能的函数集合。从执行的
角度看,内核模块是一个已经编译但没有连接的程序。内核模块类似应用程序,但是与普通应用程序有所不同,区别在
与:
运行环境不同
功能定位不同
函数调用方式不同
Linux 设备驱动程序与外界的接口可以分为如下 3个部分:
1.驱动程序与内核操作系统内核的接口:通过数据结构:file_operation 来完成的
2.驱动程序与系统引导内核的接口:利用驱动程序对设备进行初始化
3.驱动程序与设备的接口:描述了驱动程序如何与设备进行交互
一.字符驱动的具体流程:
所需要的头文件和宏定义:
#include linux/module.h
#include linux/kernel.h
#include linux/fs.h
#include linux/cdev.h
#include linux/types.h
#include linux/init.h
1
英贝得教育之学员笔记 htt p://
#include linux/delay.h
#include asm/irq.h
#include mach/regs-gpio.h
#include asm/io.h
#define LED_MAJOR 100 //主设备号
#define LED_SECOND 5 //次设备号
#define IOCTL_LED_ON 0
#define IOCTL_LED_OFF 1
struct cdev led_cdev0; //定义 cdev 结构体,内核是通过这个结构体来访问
驱 //动程序的
dev_t led_t = 0; //无整型 32位
1.定义设备结构体变量:
因为内核是通过 cdev 结构体来访问驱动的,所以要定义结构体:
struct cdev my_cdve0;
定义好描述字符 IO设备的结构体后,就用该结构体来定义一个变量,在内核中就用该变量来代表我们的字符 IO 设备,
在这里就代表的是 LED灯。
2.定义设备的操作接口和编写接口操作函数:
每个设备都对应一些操作,应用程序及是通过这些接口操作函数来使用驱动程序完成对设备的控制,设备的操作接口定
义如下:
Struct file_operation led_ops = {
.ownr = THIS_MODULE; //一个宏
.open = myled_open,
ioctl = myled_ioctl,
.release = m
文档评论(0)