Linux驱动程序设计PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
统调用 只能顺序访问数据通道,不能前后移动访问指针。
特例:比如framebuffer设备就是这样的设备,应 用程序可以使用mmap或lseek访问图像的各个区 域
пятница, 6 ноября 2020 г.
Linux内核结构
Linux内核结构
应用程序、库、内核、驱动程序的关系
应用程序
4-2设备的分类和特点
块设备特点
块设备通过位于 /dev 目录的文件系统结点来存取
块设备和字符设备的区别仅仅在于内核内部管理数据的 方式
块设备有专门的接口,块设备的接口必须支持挂装 (mount)文件系统。
应用程序一般通过文件系统来访问块设备上的内容
пятница, 6 ноября 2020 г.
高回报
пятница, 6 ноября 2020 г.
4-1设备驱动程序简介
驱动程序的特点 操控硬件,是应用程序和硬件设备之间的一
ห้องสมุดไป่ตู้个接口
隐藏硬件细节,提高应用软件的可移植性 提供安全性 开发模式
内核态驱动 用户态驱动
提供机制,而不是提供策略
机制:驱动程序能实现什么功能 策略:用户如何使用这些功能
(2)库根据open函数传入的参数执行“swi”指令,引起 CPU异常,进入内核 (3)内核的异常处理函数根据这些参数找到相应的驱动 程序,返回一个文件描述符给库,进而返回给应用程序
(4)应用程序得到文件描述符后,使用库提供的write 或ioclt函数发出控制命令 (5)库根据write或ioclt函数传入的参数执行“swi”指令, 这条指令会引起CPU异常,再次进入内核 (6)内核的异常处理函数根据参数调用驱动程序的相关 函数,控制硬件
4-2设备的分类和特点
设备分类
字符设备(char device) 块设备(block device) 网络设备(network device)
пятница, 6 ноября 2020 г.
4-2设备的分类和特点
字符设备特点
像字节流一样来存取的设备( 如同文件 ) 通过/dev下的文件系统结点来访问。 通常至少需要实现 open, close, read, 和 write 等系
驱动程序加入内核的方法
把所有需要的功能都编译到内核中 生成的内核镜像(Image)文件会很大 如果我们要在现有的内核中新增或删除功 能,将不得不重新编译和装载内核。
пятница, 6 ноября 2020 г.
4-3 驱动程序加入内核的方法
Linux提供了机制被称为模块(Module)的 机制
4-2设备的分类和特点
网络设备特点
通过单独的网络接口来访问
任何一个网络事务都通过一个网络接口访问,即一个能 够和其他主机交换数据的设备。
网卡 软件设备:环回接口(loopback)
内核调用一套和数据包传输相关的函数
пятница, 6 ноября 2020 г.
4-3 构造和运行模块
编译和装载驱动模块
пятница, 6 ноября 2020 г.
驱动程序的作用
操作系统
应
write
用
ioctl
程
序
read
驱 动 程 序
硬 件 设 备
ioctl
为什么要学嵌入式Linux驱动程序开发?
高需求
内核代码的大部分 新芯片、新设备
高门槛
需要具有硬件知识 需要了解内核基础知识 需要了解内核中的并发控制和同步 复杂的软件结构框架
пятница, 6 ноября 2020 г.
本章目标
了解Linux设备驱动程序的基础知识 掌握Linux驱动模块的构造和装载方法
пятница, 6 ноября 2020 г.
本章结构
Linux驱动程序概述
设备驱动程序简介
设备的分类和特点 构造和运行模块
字符设备 块设备
网络设备 设备驱动的Hello World模块 内核驱动模块和应用程序对比
open read write ioctl ……调用其他库函数
库
称为系统调用,执行
其他库函数的实现
swi指令进入内核
内核
系统调用的异常处理
其他功能
驱动程序 open read write ioctl ……
物理设备控制器 物理设备
4层软件关系说明
(1)应用程序使用库函数提供的open函数打开设备文 件
пятница, 6 ноября 2020 г.
内核态和用户态
大多数OS(包括Linux)把内核和运行在其上的应用程序 分为两个层次管理,即用户态和内核态
内核态有较高的权限,可以控制处理器内存的映射和分 配方式等等————对应于ARM的svc模式
用户态:只能运行系统上的应用程序————对应于 ARM的usr模式
内核态与用户态切换:可通过软件中断实 现
内核态和用户态
驱动程序作为系统内核的一部分,其工作在内核态,而 应用程序工作在用户态,即不能直接通过指针,把用户空 间的数据地址传递给内核(MMU映射地址不一样)。
需要经过转换,把用户态“看到的空间”转换成内核态 可访问的地址。Linux系统提供了一系列方便的函数实现这 种转换,如:__get_user、__put_user、 •__copy_from_user、__copy_to_user
教学内容
第一章 嵌入式系统概述 第二章 学习板硬件及开发环境的建立 第三章 构建嵌入式Linux系统 第四章 嵌入式Linux设备驱动 第五章 嵌入式Linux串口和网络编程 第六章 嵌入式Linux图形编程
пятница, 6 ноября 2020 г.
第四章 嵌入式Linux驱动程序
4.1 嵌入式Linux设备驱动简介 4.2 设备的分类及特点 4.3 构造和运行驱动程序模块
提供了对许多模块支持, 包括但不限于, 设备驱动
每个模块由目标代码组成( 没有连接成一个完整可执行程 序)
пятница, 6 ноября 2020 г.
课程目标
掌握嵌入式Linux设备驱动程序的基本原 理、架构和设计方法
字符设备驱动 块设备驱动 网络设备驱动
掌握Linux设备驱动开发中常用的机制和 内核资源
中断顶/底半部处理 内核定时器和延时操作 并发控制在内核中的应用 内存管理和分配 阻塞型I/O和非阻塞型I/O
特例:比如framebuffer设备就是这样的设备,应 用程序可以使用mmap或lseek访问图像的各个区 域
пятница, 6 ноября 2020 г.
Linux内核结构
Linux内核结构
应用程序、库、内核、驱动程序的关系
应用程序
4-2设备的分类和特点
块设备特点
块设备通过位于 /dev 目录的文件系统结点来存取
块设备和字符设备的区别仅仅在于内核内部管理数据的 方式
块设备有专门的接口,块设备的接口必须支持挂装 (mount)文件系统。
应用程序一般通过文件系统来访问块设备上的内容
пятница, 6 ноября 2020 г.
高回报
пятница, 6 ноября 2020 г.
4-1设备驱动程序简介
驱动程序的特点 操控硬件,是应用程序和硬件设备之间的一
ห้องสมุดไป่ตู้个接口
隐藏硬件细节,提高应用软件的可移植性 提供安全性 开发模式
内核态驱动 用户态驱动
提供机制,而不是提供策略
机制:驱动程序能实现什么功能 策略:用户如何使用这些功能
(2)库根据open函数传入的参数执行“swi”指令,引起 CPU异常,进入内核 (3)内核的异常处理函数根据这些参数找到相应的驱动 程序,返回一个文件描述符给库,进而返回给应用程序
(4)应用程序得到文件描述符后,使用库提供的write 或ioclt函数发出控制命令 (5)库根据write或ioclt函数传入的参数执行“swi”指令, 这条指令会引起CPU异常,再次进入内核 (6)内核的异常处理函数根据参数调用驱动程序的相关 函数,控制硬件
4-2设备的分类和特点
设备分类
字符设备(char device) 块设备(block device) 网络设备(network device)
пятница, 6 ноября 2020 г.
4-2设备的分类和特点
字符设备特点
像字节流一样来存取的设备( 如同文件 ) 通过/dev下的文件系统结点来访问。 通常至少需要实现 open, close, read, 和 write 等系
驱动程序加入内核的方法
把所有需要的功能都编译到内核中 生成的内核镜像(Image)文件会很大 如果我们要在现有的内核中新增或删除功 能,将不得不重新编译和装载内核。
пятница, 6 ноября 2020 г.
4-3 驱动程序加入内核的方法
Linux提供了机制被称为模块(Module)的 机制
4-2设备的分类和特点
网络设备特点
通过单独的网络接口来访问
任何一个网络事务都通过一个网络接口访问,即一个能 够和其他主机交换数据的设备。
网卡 软件设备:环回接口(loopback)
内核调用一套和数据包传输相关的函数
пятница, 6 ноября 2020 г.
4-3 构造和运行模块
编译和装载驱动模块
пятница, 6 ноября 2020 г.
驱动程序的作用
操作系统
应
write
用
ioctl
程
序
read
驱 动 程 序
硬 件 设 备
ioctl
为什么要学嵌入式Linux驱动程序开发?
高需求
内核代码的大部分 新芯片、新设备
高门槛
需要具有硬件知识 需要了解内核基础知识 需要了解内核中的并发控制和同步 复杂的软件结构框架
пятница, 6 ноября 2020 г.
本章目标
了解Linux设备驱动程序的基础知识 掌握Linux驱动模块的构造和装载方法
пятница, 6 ноября 2020 г.
本章结构
Linux驱动程序概述
设备驱动程序简介
设备的分类和特点 构造和运行模块
字符设备 块设备
网络设备 设备驱动的Hello World模块 内核驱动模块和应用程序对比
open read write ioctl ……调用其他库函数
库
称为系统调用,执行
其他库函数的实现
swi指令进入内核
内核
系统调用的异常处理
其他功能
驱动程序 open read write ioctl ……
物理设备控制器 物理设备
4层软件关系说明
(1)应用程序使用库函数提供的open函数打开设备文 件
пятница, 6 ноября 2020 г.
内核态和用户态
大多数OS(包括Linux)把内核和运行在其上的应用程序 分为两个层次管理,即用户态和内核态
内核态有较高的权限,可以控制处理器内存的映射和分 配方式等等————对应于ARM的svc模式
用户态:只能运行系统上的应用程序————对应于 ARM的usr模式
内核态与用户态切换:可通过软件中断实 现
内核态和用户态
驱动程序作为系统内核的一部分,其工作在内核态,而 应用程序工作在用户态,即不能直接通过指针,把用户空 间的数据地址传递给内核(MMU映射地址不一样)。
需要经过转换,把用户态“看到的空间”转换成内核态 可访问的地址。Linux系统提供了一系列方便的函数实现这 种转换,如:__get_user、__put_user、 •__copy_from_user、__copy_to_user
教学内容
第一章 嵌入式系统概述 第二章 学习板硬件及开发环境的建立 第三章 构建嵌入式Linux系统 第四章 嵌入式Linux设备驱动 第五章 嵌入式Linux串口和网络编程 第六章 嵌入式Linux图形编程
пятница, 6 ноября 2020 г.
第四章 嵌入式Linux驱动程序
4.1 嵌入式Linux设备驱动简介 4.2 设备的分类及特点 4.3 构造和运行驱动程序模块
提供了对许多模块支持, 包括但不限于, 设备驱动
每个模块由目标代码组成( 没有连接成一个完整可执行程 序)
пятница, 6 ноября 2020 г.
课程目标
掌握嵌入式Linux设备驱动程序的基本原 理、架构和设计方法
字符设备驱动 块设备驱动 网络设备驱动
掌握Linux设备驱动开发中常用的机制和 内核资源
中断顶/底半部处理 内核定时器和延时操作 并发控制在内核中的应用 内存管理和分配 阻塞型I/O和非阻塞型I/O