嵌入式系统设计李秀娟PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖ 块设备的接口还必须支持挂装(mount)文件系统。
10
blk_dev数组
blk_dev_struct 结构
request_queue queue data
request结构 request结构
rq_status rq_dev
cmd ……
sem bh bhtail next
rq_status rq_dev
ห้องสมุดไป่ตู้应用程序
调用标准的read()、write()、 open()、 close()函数
file_operations
驱动程序中对应硬件设备的实际 device_read()、device_write()、 device_open()、 device_close()函数
硬件设备
驱动程序的接口流程图
14
Linux为所有的设备文件都提供了统一的操作函数接 口,具体操作方法是使用数据结构struct file_operations。
例:LED驱动程序:
S3C2410上的4个LED指示灯由4个I/O端口控制,
第8章 设备驱动程序开发
驱动激励硬件设备开启, 赋予硬件设备能量
1
本章内容
1 8.1 设备驱动概述 2 8.2 设备驱动程序的开发过程 3 8.3 驱动程序开发的常见问题
2
目的和要求
❖ 了解驱动程序的功能 ❖ 理解驱动程序开发过程 ❖ 掌握各类设备驱动程序设计方法 ❖ 掌握驱动程序开发过程中的常见问题 ❖ 掌握直流电机驱动程序设计实例
驱动程序
open read write ioctl ……
其他功能
硬件设备 6
Linux的设备管理
❖字符设备(Character Device) ❖块设备(Block Device) ❖网络设备驱动(Network interface)
7
字符设备
❖ Linux下的字符设备接口支持面向字符的I/O操作, 是以字节为单位顺序读写;
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
❖open接口
Open 接口提供给驱动程序初始化设备的能力, 从而为以后的设备操作做好准备。
❖release接口
与 open函数相反 ;
❖read 和write 接口
read 函数完成将数据从内核拷贝到应用程序空间, write函数则相反,将数据从应用程序空间拷贝到 内核。
16
❖ioctl 接口
ioctl 接口主要用于对设备进行读写之外的其他控 制。
long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
……
};
15
在嵌入式系统的开发中,我们一般仅仅实现其中 几个接口函数:read、write、ioctl、open、release, 就可以完成应用系统需要的功能。
cmd ……
sem bh bhtail next
buffer_head结构
b_blocknr b_size b_dev b_count ……
块设备驱动程序数据结构示意图
11
网络设备驱动
网络驱动的体系结构包括网络协议接口层、网 络设备接口层、网络驱动接口层和设备媒介层。
12
dev_queue_xmit 发送数据包
字符设备驱动程序示意图
9
块设备
❖ Linux系统下的块设备是指对信息存取以“块”为单 位;
❖ 块设备对于I/O请求有对应的缓冲区,块设备具有随 机访问特性;
❖ 块设备和字符设备一样也是通过/dev目录下的文件 系统节点被访问的;
❖ 块驱动程序除了给内核提供和字符设备驱动程序一 样的接口以外,还提供了专门面向块设备的接口 ;
❖字符设备无需缓存且被直接读写 ; ❖ 字符设备可以访问/dev目录下的文件系统节点
8
VFS inode
chrdevs数组
主设备号 drvice_struct 结构
name fops ……
file_operations结构
lseek( ) read( ) write( ) readdir( ) select( ) ioctl( ) mmap( ) open( ) release( ) ……
❖ 驱动程序的优先级高于应用程序。 ❖ 驱动程序可以对硬件进行直接访问和对内存的访
问。应用程序则不能。
5
应用程序与驱动程序的关系图
应用程序
open
设备文件
read
write
ioctl …… 调用其他库函数
库
系统调用 执行软件陷阱指令进入内核
系统调用
其他库函数的实现
内核
系统调用的异常处理
设备类型,设备号
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned
netif_rx 接收数据包
网络协议接口层
struct net_device 网络设备结构
网络设备接口层
hard_start_xmit 发送数据包
net_interrupt 接收数据包 (中断处理)
设备驱动接口层
网络设备媒介
设备媒介层
网络驱动的体系结构 13
8.2 设备驱动程序的开发过程
❖8.2.1 字符设备驱动程序的设计
3
8.1 设备驱动概述
主要完成以下的功能: ❖ (1)对设备初始化和释放; ❖ (2)把操作数据从内核传送到硬件和从硬
件读取数据; ❖ (3)读取应用程序传送给硬件设备的数据
和回送应用程序请求的数据; ❖ (4)检测和处理硬件设备出现的错误。
4
8.1.1 驱动程序和应用程序的区别
❖设备驱动程序就工作在“内核空间” ;应用程序则 是在“用户空间”中运行 。
10
blk_dev数组
blk_dev_struct 结构
request_queue queue data
request结构 request结构
rq_status rq_dev
cmd ……
sem bh bhtail next
rq_status rq_dev
ห้องสมุดไป่ตู้应用程序
调用标准的read()、write()、 open()、 close()函数
file_operations
驱动程序中对应硬件设备的实际 device_read()、device_write()、 device_open()、 device_close()函数
硬件设备
驱动程序的接口流程图
14
Linux为所有的设备文件都提供了统一的操作函数接 口,具体操作方法是使用数据结构struct file_operations。
例:LED驱动程序:
S3C2410上的4个LED指示灯由4个I/O端口控制,
第8章 设备驱动程序开发
驱动激励硬件设备开启, 赋予硬件设备能量
1
本章内容
1 8.1 设备驱动概述 2 8.2 设备驱动程序的开发过程 3 8.3 驱动程序开发的常见问题
2
目的和要求
❖ 了解驱动程序的功能 ❖ 理解驱动程序开发过程 ❖ 掌握各类设备驱动程序设计方法 ❖ 掌握驱动程序开发过程中的常见问题 ❖ 掌握直流电机驱动程序设计实例
驱动程序
open read write ioctl ……
其他功能
硬件设备 6
Linux的设备管理
❖字符设备(Character Device) ❖块设备(Block Device) ❖网络设备驱动(Network interface)
7
字符设备
❖ Linux下的字符设备接口支持面向字符的I/O操作, 是以字节为单位顺序读写;
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
❖open接口
Open 接口提供给驱动程序初始化设备的能力, 从而为以后的设备操作做好准备。
❖release接口
与 open函数相反 ;
❖read 和write 接口
read 函数完成将数据从内核拷贝到应用程序空间, write函数则相反,将数据从应用程序空间拷贝到 内核。
16
❖ioctl 接口
ioctl 接口主要用于对设备进行读写之外的其他控 制。
long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
……
};
15
在嵌入式系统的开发中,我们一般仅仅实现其中 几个接口函数:read、write、ioctl、open、release, 就可以完成应用系统需要的功能。
cmd ……
sem bh bhtail next
buffer_head结构
b_blocknr b_size b_dev b_count ……
块设备驱动程序数据结构示意图
11
网络设备驱动
网络驱动的体系结构包括网络协议接口层、网 络设备接口层、网络驱动接口层和设备媒介层。
12
dev_queue_xmit 发送数据包
字符设备驱动程序示意图
9
块设备
❖ Linux系统下的块设备是指对信息存取以“块”为单 位;
❖ 块设备对于I/O请求有对应的缓冲区,块设备具有随 机访问特性;
❖ 块设备和字符设备一样也是通过/dev目录下的文件 系统节点被访问的;
❖ 块驱动程序除了给内核提供和字符设备驱动程序一 样的接口以外,还提供了专门面向块设备的接口 ;
❖字符设备无需缓存且被直接读写 ; ❖ 字符设备可以访问/dev目录下的文件系统节点
8
VFS inode
chrdevs数组
主设备号 drvice_struct 结构
name fops ……
file_operations结构
lseek( ) read( ) write( ) readdir( ) select( ) ioctl( ) mmap( ) open( ) release( ) ……
❖ 驱动程序的优先级高于应用程序。 ❖ 驱动程序可以对硬件进行直接访问和对内存的访
问。应用程序则不能。
5
应用程序与驱动程序的关系图
应用程序
open
设备文件
read
write
ioctl …… 调用其他库函数
库
系统调用 执行软件陷阱指令进入内核
系统调用
其他库函数的实现
内核
系统调用的异常处理
设备类型,设备号
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned
netif_rx 接收数据包
网络协议接口层
struct net_device 网络设备结构
网络设备接口层
hard_start_xmit 发送数据包
net_interrupt 接收数据包 (中断处理)
设备驱动接口层
网络设备媒介
设备媒介层
网络驱动的体系结构 13
8.2 设备驱动程序的开发过程
❖8.2.1 字符设备驱动程序的设计
3
8.1 设备驱动概述
主要完成以下的功能: ❖ (1)对设备初始化和释放; ❖ (2)把操作数据从内核传送到硬件和从硬
件读取数据; ❖ (3)读取应用程序传送给硬件设备的数据
和回送应用程序请求的数据; ❖ (4)检测和处理硬件设备出现的错误。
4
8.1.1 驱动程序和应用程序的区别
❖设备驱动程序就工作在“内核空间” ;应用程序则 是在“用户空间”中运行 。