[工学]Linux驱动开发.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]Linux驱动开发

Linux驱动程序 吴士力 e-mail: wsl.wushili@ 驱动程序的概念 驱动程序的作用 软件控制硬件 驱动程序与操作系统 1. 无操作系统 2. 有操作系统 驱动程序开发的特点 1. 与底层硬件资源关系密切 2. 与内核关系密切 3. 开发量相对低(更新速度相对慢) 软件控制硬件的方法 GPIO(通用输入输出接口) S3C2410/2440:117/130个I/O接口,分为GPA、GPB、GPC…等 I/O端口的使用方法 通过访问寄存器来使用I/O端口。 GPxCON:用于控制端口引脚的功能(输入、输出) GPACON中的每一位控制一个引脚(0为输出、1为输入) GPBCON…中的每两位控制一个引脚(00为输入、01为输出) GPxDAT:用于读写引脚数据 引脚为输入时, 读GPxDAT中的值可以获得对应引脚电平的高低 引脚为输出时, 写GPxDAT的值可控制对应引脚电平的高低 GPxUP:用于控制引脚是否使用上拉电阻 软件控制硬件的方法 软件控制硬件实例(LED灯) S3C2410/2440: GPB5引脚输出低电平点亮LED灯,高电平熄灭LED灯 GPBCON的地址是0 GPBDAT的地址是0 示意代码: #define GPBCON (*(volatile unsigned long *)0 #define GPBDAT (*(volatile unsigned long *)0 #define GPB5_out (1(5*2)) GPBCON = GPB5_out; //设置GPB5引脚为输出状态 (是否有错误?) GPBDAT = ~(15); //GPB5引脚输出低电平 无操作系统驱动程序 应用程序 while(1) { if(serial_int==1) //串口中断发生 { serial_process(); //调用串口处理函数 serial_int=0; } } 驱动程序 void serial_process(void) { //串口处理代码 } 无操作系统驱动程序的特点 应用程序?驱动程序?硬件 (应用程序的接口与驱动程序的接口一致) 有操作系统驱动程序 有操作系统驱动程序的结构 驱动是内核的一部分(内核调用驱动) 有操作系统驱动程序的特点 驱动程序具有内核统一的访问接口 驱动程序的原理 硬件访问操作 打开设备、关闭设备、读写设备、控制设备等 file_operations file_operations (/include/linux/fs.h)中定义了设备的各个访问接口 字符设备驱动程序框架 基本框架实例分析 设备驱动程序的并发控制 并发控制的基本原理 多道系统?并发运行?产生竞态 解决竞态的方法 互斥访问共享资源 临界区(访问共享资源的代码区) 共享资源互斥访问的手段 1. 中断屏蔽 原子操作 信号量 自旋锁 屏蔽中断 屏蔽中断的基本原理 进入临界区前屏蔽系统中断 进程与中断程序之间、进程与进程之间不会发生竞态 屏蔽中断的使用方法 local_irq_disable() //屏蔽中断 … critical section //临界区 … local_irq_enable() //打开中断 原子操作 原子操作的基本原理 在执行过程中不会被别的执行任务打断的操作 Linux内核提供了两类原子操作:整型操作、位操作 整型操作 void atomic_set(atomic_t *v, int i) //初始化原子变量 atomic_t v = ATOMIC_INIT(0) //原子变量值为0 void atomic_add_return(int i, atomic_t *v) //原

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档