项目嵌入式系统设备驱动程序开发PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1 设备驱动 设备驱动程序将复杂的硬件抽象成一个结构
良好的设备,并通过提供统一的程序接口为 系统的其它部分提供使用设备的能力和方法。 设备驱动程序(应该只是)为系统的其它部分 提供各种使用设备的能力,使用设备的方法 应该由应用程序决定。
精品课件
4
二、知识储备
2.1 设备驱动
Linux下对外设的访问只能通过驱动程序
Linux对于驱动程序有统一的接口,以文件 的形式定义系统的驱动程序:
Open、Release、read、write、ioctl…
驱动程序是内核的一部分,可以使用中断、 DMA等操作
驱动程序需要在用户态和内核态之间传递 数据
精品课件
5
二、知识储备
2.1 设备驱动 驱动程序与应用程序的区别 应用程序以main函数开始,驱动程序则没
精品课件
14
二、知识储备
2.2 设备驱动案例分析(LED驱动)
精品课件
15
二、知识储备
2.2 设备驱动案例分析(LED驱动)
驱动程序分析:
#include <linux/module.h> /*Dynamic loading of modules into the kernel */
#include <linux/kernel.h> /*与printk()等函数有关的头 文件*/
供了一种区分它们的方法 系统增加一个驱动程序就要赋予它一个主设备号。
这一赋值过程在驱动程序的初始化过程中
int register_chrdev(unsigned int major, const char*name,struct file_operations *fops);
精品课件
9
二、知识储备
不属于上述三种设备之外的一些设备,如SCSI, 时钟等。
精品课件
7
二、知识储备
2.1 设备驱动 驱动程序在操作系统中的位置 设备驱动程序是内核代码的一部分。 驱动程序的地址空间是内核的地址空间。 驱动程序的代码直接对设备硬件(实际是设备的各种寄存器)
进行控制(实际就是读写操作)。 应用程序通过操作系统的系统调用执行相应的驱动程序函数。
精品课件
10
二、知识储备
2.1 设备驱动 设备驱动程序的接口
file_operations结构体 主要包括:open,close(或者release),
read,write,ioctl,poll,mmap等 结构体spioc_fops将作为一个参数在注册一
个设备驱动程序时传递给内核。 内核使用设备链表维护各种注册的设备。不
#include <linux/fs.h> /* 与文件系统有关的头文件,如 file_operations */
#include <linux/init.h> /*初始化相关头文件*/
#include <linux/miscdevice.h> #include <linux/delay.h> /*与延时相关*/ #include <linux/cdev.h> /*与cdev 结构相关*/
精品课件
16
二、知识储备
2.2 设备驱动案例分析(LED驱动) 驱动程序分析:
#include <linux/device.h> /*与自动创建设备文件相关*/ #include <asm/irq.h> /*与中断相关*/ #include <mach/regs-gpio.h> /*与寄存器相关*/ #include <plat/gpio-cfg.h> /*与IO 配置相关*/ #include <linux/gpio.h> /*与IO 相关*/ #include <linux/slab.h> #include <asm/uaccess.h> /*__copy_from_user*/ MODULE_LICENSE("GPL"); /*表式开放源码,在linux/module.h 中定义*/ #define DEVICE_NAME "leds" /*该驱动的设备名*/ #define DEVICE_MAJOR 231 /*该驱动的主设备号*/ #define DEVICE_MINOR 0 /*该驱动的从设备号*/ /* IOCTL commands */ #define LED_IOC_MAGIC
项目四、嵌入式系统设备驱动程序开发
精品课件
1
一、项目概况
精品课件
2
一、项目概况
项目说明: 本项目利用ARM嵌入式微处理器与接口
知识,在嵌入式系统的集成开发环境中采用 基于Linux的应用程序设计基础上设计程序 并在ARM板内烧写开发的可执行文件实现仿 真月球车的测温测距避障控制。
精品课件
3
二、知识储备
同类型的设备使用不同的链表。
精品课件
11
二、知识储备
2.1 设备驱动 struct file_operations demo_fops = {…} 完成了将驱动函数映射为标准接口。 例如: static struct file_operations demo_fops = { owner:THIS_MODULE, write:demo_write, read:demo_read, ioctl:demo_ioctl, open:demo_open, release:demo_release, };
中断则直接执行相应的中断程序代码。 设备驱动程序的file_operations结构体的地址被注册到内核
中的设备链表中。 块设备和字符设备以设备文件的方式建立在文件系统中的
/dev目录下,而且每个设备都有一个主设备号和一个次设备号。
ቤተ መጻሕፍቲ ባይዱ
精品课件
8
二、知识储备
2.1 设备驱动 主设备号和次设备号 主设备号标识设备对应的驱动程序 一个驱动程序可以控制若干个设备,次设备号提
2.1 设备驱动 创建设备节点 设备已经注册到内核表中,对于设备的访问通过设
备文件(设备文件与设备驱动程序的主设备号匹 配),内核会调用驱动程序中的正确函数 给程序一个它们可以请求设备驱动程序的名字。 这个名字必须插入到/dev目录中,并与驱动程序 的主设备号和次设备号相连 使用mknod在文件系统上创建一个设备节点
用main函数。它以特殊的模块初始化函数 为入口。 应用程序从头至尾执行一个任务,驱动程序 在完成初始化后,等待系统调用。 应用程序可以使用GLIBC等标准C函数库, 驱动程序不能使用标准C函数库。
精品课件
6
二、知识储备
2.1 设备驱动 设备驱动程序的分类
字符设备驱动程序,如各种串行接口,并行接口等。 块设备驱动程序,如磁盘设备等 网络设备驱动程序,如网卡等。 杂项设备驱动程序
精品课件
12
二、知识储备
2.1 设备驱动 设备驱动程序的使用方法
应用层使用open、close、read、write系统 调用——需要编写应用程序
精品课件
13
二、知识储备
2.2 设备驱动案例分析(LED驱动)
LED 电路原理图如下所示,由此我们可以看到5 个LED 灯分别连接到 6410 处理器的GPQ2~6 管脚上,通过输出低电平可使LED 灯亮,高电 平LED 灯灭。
相关文档
最新文档