Chap6-11 Linux设备驱动程序ppt课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BSP开发的一般步骤如下:
硬件主板研制,测试 操作系统的选定,BSP编程 上层应用程序的开发
最新版整理ppt
13
编写BSP函数
BSP对板卡中每个芯片的操作都通过多个函数 来完成
如果应用程序对板卡的操作都直接通过调用 BSP中的函数来完成,那将很不利于源程序的 调试 ,并降低了程序的可移植性
设备的打开与释放
open() release()
设备的读写操作
read() write()
设备的控制操作
ioctl()
最新版整理ppt
35
设备驱动的加载
使用模块的方式动态加载驱动
int func_init(void) Makefile: insmod xx.o lsmod rmmod xx.o
而是在系统初始化过程中由BSP把它们与操作系 统中通用的设备驱动程序关联起来,并在随后的 应用中由通用的设备驱动程序调用,实现对硬件 设备的操作。
最新版整理ppt
12
BSP开发的前提和步骤
开发的前提 :
熟悉硬件方面:使用CPU等 熟悉工具方面:电表,示波器,逻辑分析仪,
硬件仿真器,仿真调试环境等 语言方面:汇编语言,C语言
8
初始化过程
片级初始化:
主要完成CPU的初始化
设置CPU的核心寄存器和控制寄存器 CPU核心工作模式 CPU的局部总线模式等
片级初始化把CPU从上电时的缺省状态逐步设置 成为系统所要求的工作状态
这是一个纯硬件的初始化过程
最新版整理ppt
9
初始化过程(续1)
板级初始化:
完成CPU以外的其他硬件设备的初始化 同时还要设置某些软件的数据结构和参数,为随后
最新版整理ppt
4
不同系统中的BSP
一个嵌入式操作系统针对不同的CPU, 会有不同的BSP
即使同一种CPU,由于外设的一点差别 BSP相应的部分也不一样
最新版整理ppt
5
BSP的特点与功能
硬件相关性
因为嵌入式实时系统的硬件环境具有应用相 关性,所以,作为高层软件与硬件之间的接 口,BSP必须为操作系统提供操作和控制具 体硬件的方法。
最新版整理ppt
38
常用的系统支持
内存申请和释放 中断 时钟 I/O 中断打开关闭 输出信息 注册驱动程序
最新版整理ppt
39
内存申请和释放
include/linux/kernel.h里声明了kmalloc()和 kfree()。用于在内核模式下申请和释放内存。
与用户模式下的malloc()不同,kmalloc()申 请空间有大小限制。长度是2的整次方。可 以申请的最大长度也有限制。另外kmalloc() 有priority参数
在Windows CE中,BSP是驱动程序、 OEM适应层(OEM Adaptation Layers, OAL)、硬件抽象层(HAL)以及启动 设备和使外设正常工作所需BIOS文件的 集合。
最新版整理ppt
3
BSP和BIOS区别
BIOS主要是负责在电脑开启时检测、初始化系
统设备(设置栈指针,中断分配,内存初始 化..)、装入操作系统并调度操作系统向硬件 发出的指令。
Linux允许设备驱动程序作为内核可加载模块实现, 即除了可以在系统启动时进行注册外,还可以在 启动后进行加载注册。
最新版整理ppt
17
Linux驱动程序开发
建立嵌入式Linux平台,移植和编写驱动程 序往往是最具挑战的工作
驱动程序的开发周期一般较长,对产品的面 世时间有着重要影响
驱动程序质量的好坏,直接关系到系统工作 效能和稳定性,对项目的成败起着关键作用
应用程序通过dev文件节点访问驱动 程序
应用程序通过proc文件节点可以查 询设备驱动的信息
最新版整理ppt
27
驱动程序位置
驱动程序位于drivers目录下 通常驱动程序占kernel代码的50% Linux设备驱动程序在Linux的内核源代码中占有很大的比
例,源代码的长度日益增加,主要是驱动程序的增加。 在Linux内核的不断升级过程中,驱动程序的结构还是相对
网络设备在Linux里做专门的处理 Linux的网络系统主要是基于BSD unix的socket
机制。在系统和驱动程序之间定义有专门的数 据结构(sk_buff)进行数据的传递 系统里支持对发送数据和接收数据的缓存,提 供流量控制机制,提供对多协议的支持
最新版整理ppt
21
Linux设备驱动程序分类
稳定。 在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,
但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。
最新版整理ppt
28
Linux驱动程序的加载方式
驱动程序直接编译入内核
驱动程序在内核启动时就已经在内存中 可以保留专用存储器空间
驱动程序以模块形式存储在文件系 统里,需要时动态载入内核
门禁等
最新版整理ppt
25
驱动程序的功用(续)
2、驱动程序提供软件访问硬件的机制
应用软件通过驱动程序安全高效的访问硬件 驱动程序文件可以方便的提供访问权限控制 驱动程序作为一个隔离的中间层软件,将底
层细节隐藏起来,提高了软件的可移植性
最新版整理ppt
26
访问Linux设备驱动的方法
设备提供dev文件系统节点和proc文 件系统节点
的系统级初始化和应用程序的运行建立硬件和软件 环境 这是一个同时包含软硬件两部分在内的初始化过程
最新版整理ppt
10
初始化过程(续2)
系统级初始化:
这是一个以软件初始化为主的过程,主要进行操作 系统初始化
BSP将控制转交给操作系统,由操作系统进行余下 的初始化操作:
包括加载和初始化与硬件无关的设备驱动程序 建立系统内存区 加载并初始化其他系统软件模块(如网络系统、文件系统
规划硬件资源的使用
CPU时间片分配 中断处理 系统存储器空间映射
最新版整理ppt
32
设备存储器的映射
最新版整理ppt
33
Linux驱动程序开发的任务
分离硬件相关和硬件无关的代码 划分驱动程序的抽象层次
最新版整理ppt
34
设备驱动程序的代码
驱动程序的注册与注销
register_chrdev() register_blkdev()
BSP是和操作系统绑在一起运行,尽管BSP的开 始部分和BIOS所做的工作类似,但是 BSP还包 含和系统有关的基本驱动
BIOS程序是用户不能更改,编译编程的,只能
对参数进行修改设置,但是程序员还可以编程
修改BSP,在BSP中任意添加一些和系统无关的
驱动或程序,甚至可以把上层开发的统统放到
BSP中
最新版整理ppt
37
kmod 和高级模块化
Linux 提供了对模块自动加载和卸载的支持
要利用这一特性,在编译内核前进行的配置中, 必须打开对 kmod 的支持选项。
一旦内核试图访问某种资源并发现该资源不可 用时,它会对 kmod 子系统进行一次特殊的调 用而不仅仅是返回一个错误
按需加载的例子 :ALSA(Advanced Linux Sound Architecture)声卡驱动程序组的实现
最新版整理ppt
18
设备驱动程序主要功能
设备驱动程序主要完成如下功能:
检测设备和初始化设备 使设备投入运行和退出服务 从设备接收数据并提交给内核 从内核接收数据送到设备 检测和处理设备错误
最新版整理ppt
19
Linux设备驱动程序分类
Linux中所有设备被抽象出来,都看成文件 设备的读写和普通文件一样 Linux系统的设备分为如下三类:
将驱动静态编译到内核里面
int __init func_init(void) Makefile: 启动时自动加载
最新版整理ppt
36
内核模块
模块是内核的一部分,但是并没有被编译到内 核里去。它们被分别编译和连接成目标文件。
用命令insmod插入一个模块到内核中,用命令 rmmod卸载一个模块
ip forwarding,ipsec,vpn Usb的全面支持,包括usb硬盘、u盘,usb摄像头 支持丰富的文件系统,包括FAT32,NTFS
最新版整理ppt
23
嵌入式设备框图
最新版整理ppt
24
驱动程序的功用
1、驱动程序直接操控硬件
收发通讯数据 读写存储介质,比如flash或硬盘 操作输出设备和执行机构,例如打印,开关
等) 最后,操作系统创建应用程序环境并将控制转交给应用程
序的入口
最新版整理ppt
11
硬件相关的设备驱动程序
BSP另一个主要功能是硬件相关的设备驱动 与初始化过程相反,硬件相关的设备驱动程序的
初始化和使用通常是一个从高层到底层的过程
尽管BSP中包含硬件相关的设备驱动程序,但是 这些设备驱动程序通常不直接由BSP使用
设计实现BSP两部分功能时应采用以下两种不 同方法
“自底向上”地实现BSP中的初始化操作 “自顶向下”地设计硬件相关的驱动程序
最新版整理ppt
15
Linux设备驱动程序及开发
最新版整理ppt
16
Linux设备驱动程序概述
Linux设备驱动程序是处理或操作硬件控制器的软 件,被集成在内核中,是常驻内存的低级硬件处 理程序的共享库,设备驱动程序是系统对设备的 抽象管理与控制。
典型的字符设备包括鼠标,键盘,串行口等 块设备主要包括硬盘、软盘设备、CD-ROM
等 一个文件系统要安装进入操作系统必须在块
设备上
最新版整理ppt
22
Linux驱动程序介绍
嵌入式Linux驱动已经支持的设备门类齐全,已成 为其相对其他嵌入式操作系统的一大优势
工业控制常用的串口,并口 人机输入设备如鼠标、键盘,触摸屏 彩色、黑白液晶显示输出 网络的完善支持,包括tcp/ip,udp,firewall,WLAN,
把能完成某个特定功能的函数封装在一个库文 件中,并放在应用程序与BSP之间
对每个芯片来说,都应当有初始化函数和状态 读取函数
最新版整理ppt
14
设计实现BSP的一般方法
BSP的开发需要具备一定的硬件知识 要求掌握操作系统所定义的BSP接口 两种快捷方法
以经典BSP为参考 使用操作系统提供的BSP模板
最新版整理ppt
7
嵌入式系统初始化以及BSP的功能
嵌入式系统的初始化过程是一个同时包括硬件 初始化和软件初始化的过程;而操作系统启动 以前的初始化操作是BSP的主要功能之一
初始化过程总可以抽象为三个主要环境,按照 自底向上、从硬件到软件的次序依次为:
片级初始化 板级初始化 系统级初始化
最新版整理ppt
在Linux内核中,以下内容一般编译成模块:
大多数的驱动程序。包括SCSI设备,CD-ROM,网 络设备,不常用的字符设备,如打印机,watchdog 等。
大多数文件系统,理论上除了根文件系统不能是模 块,其他文件系统都可以是模块。
一些内核支持的不常用的可执行文件格式,如 binfmt_misc。
字符设备(char device) 块设备(block device) 网络设备(network device) 字符设备是指存取时没有缓存的设备
块设备的读写都有缓存来支持,且块设备必须 能够随机存取(random access)
网络设备在Linux里做专门的处理
最新版整理ppt
20
Linux设备驱动程序分类
操作系统相关性
不同的操作系统具有各自的软件层次结 构, 因此,不同的操作系统具有特定的硬件 接口形式
最新版整理ppt
6
BSP的设计与实现
为实现上述两部分功能,设计一个完整 的BSP需要完成两部分工作:
设计初始化过程,完成嵌入式系统的初始化; 设计硬件相关的设备驱动,完成操作系统及应用
程序对具体硬件的操作。
嵌入式系统
最新版整理ppt
1
主要内容
版级支持包 BSP 嵌入式系统初始化以及BSP的设计 Linux系统驱动程序开发
最新版整理ppt
2
BSP的概念
BSP全称“板级支持包”(Board Support Packages),说的简单一点,就是一段启 动代码,和计算机主板的BIOS差不多, 但提供的功能区别就相差很大
驱动程序按需加载,不用时节省内存 驱动程序相对独立于内核,升级模块加载
最新版整理ppt
30
Linux驱动程序开发的任务
规划硬件资源的使用 分离硬件相关和硬件无关的代码 划分驱动程序的抽象层次 移植驱动程序到新的平台
最新版整理ppt
31
Linux驱动程序开发的任务
硬件主板研制,测试 操作系统的选定,BSP编程 上层应用程序的开发
最新版整理ppt
13
编写BSP函数
BSP对板卡中每个芯片的操作都通过多个函数 来完成
如果应用程序对板卡的操作都直接通过调用 BSP中的函数来完成,那将很不利于源程序的 调试 ,并降低了程序的可移植性
设备的打开与释放
open() release()
设备的读写操作
read() write()
设备的控制操作
ioctl()
最新版整理ppt
35
设备驱动的加载
使用模块的方式动态加载驱动
int func_init(void) Makefile: insmod xx.o lsmod rmmod xx.o
而是在系统初始化过程中由BSP把它们与操作系 统中通用的设备驱动程序关联起来,并在随后的 应用中由通用的设备驱动程序调用,实现对硬件 设备的操作。
最新版整理ppt
12
BSP开发的前提和步骤
开发的前提 :
熟悉硬件方面:使用CPU等 熟悉工具方面:电表,示波器,逻辑分析仪,
硬件仿真器,仿真调试环境等 语言方面:汇编语言,C语言
8
初始化过程
片级初始化:
主要完成CPU的初始化
设置CPU的核心寄存器和控制寄存器 CPU核心工作模式 CPU的局部总线模式等
片级初始化把CPU从上电时的缺省状态逐步设置 成为系统所要求的工作状态
这是一个纯硬件的初始化过程
最新版整理ppt
9
初始化过程(续1)
板级初始化:
完成CPU以外的其他硬件设备的初始化 同时还要设置某些软件的数据结构和参数,为随后
最新版整理ppt
4
不同系统中的BSP
一个嵌入式操作系统针对不同的CPU, 会有不同的BSP
即使同一种CPU,由于外设的一点差别 BSP相应的部分也不一样
最新版整理ppt
5
BSP的特点与功能
硬件相关性
因为嵌入式实时系统的硬件环境具有应用相 关性,所以,作为高层软件与硬件之间的接 口,BSP必须为操作系统提供操作和控制具 体硬件的方法。
最新版整理ppt
38
常用的系统支持
内存申请和释放 中断 时钟 I/O 中断打开关闭 输出信息 注册驱动程序
最新版整理ppt
39
内存申请和释放
include/linux/kernel.h里声明了kmalloc()和 kfree()。用于在内核模式下申请和释放内存。
与用户模式下的malloc()不同,kmalloc()申 请空间有大小限制。长度是2的整次方。可 以申请的最大长度也有限制。另外kmalloc() 有priority参数
在Windows CE中,BSP是驱动程序、 OEM适应层(OEM Adaptation Layers, OAL)、硬件抽象层(HAL)以及启动 设备和使外设正常工作所需BIOS文件的 集合。
最新版整理ppt
3
BSP和BIOS区别
BIOS主要是负责在电脑开启时检测、初始化系
统设备(设置栈指针,中断分配,内存初始 化..)、装入操作系统并调度操作系统向硬件 发出的指令。
Linux允许设备驱动程序作为内核可加载模块实现, 即除了可以在系统启动时进行注册外,还可以在 启动后进行加载注册。
最新版整理ppt
17
Linux驱动程序开发
建立嵌入式Linux平台,移植和编写驱动程 序往往是最具挑战的工作
驱动程序的开发周期一般较长,对产品的面 世时间有着重要影响
驱动程序质量的好坏,直接关系到系统工作 效能和稳定性,对项目的成败起着关键作用
应用程序通过dev文件节点访问驱动 程序
应用程序通过proc文件节点可以查 询设备驱动的信息
最新版整理ppt
27
驱动程序位置
驱动程序位于drivers目录下 通常驱动程序占kernel代码的50% Linux设备驱动程序在Linux的内核源代码中占有很大的比
例,源代码的长度日益增加,主要是驱动程序的增加。 在Linux内核的不断升级过程中,驱动程序的结构还是相对
网络设备在Linux里做专门的处理 Linux的网络系统主要是基于BSD unix的socket
机制。在系统和驱动程序之间定义有专门的数 据结构(sk_buff)进行数据的传递 系统里支持对发送数据和接收数据的缓存,提 供流量控制机制,提供对多协议的支持
最新版整理ppt
21
Linux设备驱动程序分类
稳定。 在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,
但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。
最新版整理ppt
28
Linux驱动程序的加载方式
驱动程序直接编译入内核
驱动程序在内核启动时就已经在内存中 可以保留专用存储器空间
驱动程序以模块形式存储在文件系 统里,需要时动态载入内核
门禁等
最新版整理ppt
25
驱动程序的功用(续)
2、驱动程序提供软件访问硬件的机制
应用软件通过驱动程序安全高效的访问硬件 驱动程序文件可以方便的提供访问权限控制 驱动程序作为一个隔离的中间层软件,将底
层细节隐藏起来,提高了软件的可移植性
最新版整理ppt
26
访问Linux设备驱动的方法
设备提供dev文件系统节点和proc文 件系统节点
的系统级初始化和应用程序的运行建立硬件和软件 环境 这是一个同时包含软硬件两部分在内的初始化过程
最新版整理ppt
10
初始化过程(续2)
系统级初始化:
这是一个以软件初始化为主的过程,主要进行操作 系统初始化
BSP将控制转交给操作系统,由操作系统进行余下 的初始化操作:
包括加载和初始化与硬件无关的设备驱动程序 建立系统内存区 加载并初始化其他系统软件模块(如网络系统、文件系统
规划硬件资源的使用
CPU时间片分配 中断处理 系统存储器空间映射
最新版整理ppt
32
设备存储器的映射
最新版整理ppt
33
Linux驱动程序开发的任务
分离硬件相关和硬件无关的代码 划分驱动程序的抽象层次
最新版整理ppt
34
设备驱动程序的代码
驱动程序的注册与注销
register_chrdev() register_blkdev()
BSP是和操作系统绑在一起运行,尽管BSP的开 始部分和BIOS所做的工作类似,但是 BSP还包 含和系统有关的基本驱动
BIOS程序是用户不能更改,编译编程的,只能
对参数进行修改设置,但是程序员还可以编程
修改BSP,在BSP中任意添加一些和系统无关的
驱动或程序,甚至可以把上层开发的统统放到
BSP中
最新版整理ppt
37
kmod 和高级模块化
Linux 提供了对模块自动加载和卸载的支持
要利用这一特性,在编译内核前进行的配置中, 必须打开对 kmod 的支持选项。
一旦内核试图访问某种资源并发现该资源不可 用时,它会对 kmod 子系统进行一次特殊的调 用而不仅仅是返回一个错误
按需加载的例子 :ALSA(Advanced Linux Sound Architecture)声卡驱动程序组的实现
最新版整理ppt
18
设备驱动程序主要功能
设备驱动程序主要完成如下功能:
检测设备和初始化设备 使设备投入运行和退出服务 从设备接收数据并提交给内核 从内核接收数据送到设备 检测和处理设备错误
最新版整理ppt
19
Linux设备驱动程序分类
Linux中所有设备被抽象出来,都看成文件 设备的读写和普通文件一样 Linux系统的设备分为如下三类:
将驱动静态编译到内核里面
int __init func_init(void) Makefile: 启动时自动加载
最新版整理ppt
36
内核模块
模块是内核的一部分,但是并没有被编译到内 核里去。它们被分别编译和连接成目标文件。
用命令insmod插入一个模块到内核中,用命令 rmmod卸载一个模块
ip forwarding,ipsec,vpn Usb的全面支持,包括usb硬盘、u盘,usb摄像头 支持丰富的文件系统,包括FAT32,NTFS
最新版整理ppt
23
嵌入式设备框图
最新版整理ppt
24
驱动程序的功用
1、驱动程序直接操控硬件
收发通讯数据 读写存储介质,比如flash或硬盘 操作输出设备和执行机构,例如打印,开关
等) 最后,操作系统创建应用程序环境并将控制转交给应用程
序的入口
最新版整理ppt
11
硬件相关的设备驱动程序
BSP另一个主要功能是硬件相关的设备驱动 与初始化过程相反,硬件相关的设备驱动程序的
初始化和使用通常是一个从高层到底层的过程
尽管BSP中包含硬件相关的设备驱动程序,但是 这些设备驱动程序通常不直接由BSP使用
设计实现BSP两部分功能时应采用以下两种不 同方法
“自底向上”地实现BSP中的初始化操作 “自顶向下”地设计硬件相关的驱动程序
最新版整理ppt
15
Linux设备驱动程序及开发
最新版整理ppt
16
Linux设备驱动程序概述
Linux设备驱动程序是处理或操作硬件控制器的软 件,被集成在内核中,是常驻内存的低级硬件处 理程序的共享库,设备驱动程序是系统对设备的 抽象管理与控制。
典型的字符设备包括鼠标,键盘,串行口等 块设备主要包括硬盘、软盘设备、CD-ROM
等 一个文件系统要安装进入操作系统必须在块
设备上
最新版整理ppt
22
Linux驱动程序介绍
嵌入式Linux驱动已经支持的设备门类齐全,已成 为其相对其他嵌入式操作系统的一大优势
工业控制常用的串口,并口 人机输入设备如鼠标、键盘,触摸屏 彩色、黑白液晶显示输出 网络的完善支持,包括tcp/ip,udp,firewall,WLAN,
把能完成某个特定功能的函数封装在一个库文 件中,并放在应用程序与BSP之间
对每个芯片来说,都应当有初始化函数和状态 读取函数
最新版整理ppt
14
设计实现BSP的一般方法
BSP的开发需要具备一定的硬件知识 要求掌握操作系统所定义的BSP接口 两种快捷方法
以经典BSP为参考 使用操作系统提供的BSP模板
最新版整理ppt
7
嵌入式系统初始化以及BSP的功能
嵌入式系统的初始化过程是一个同时包括硬件 初始化和软件初始化的过程;而操作系统启动 以前的初始化操作是BSP的主要功能之一
初始化过程总可以抽象为三个主要环境,按照 自底向上、从硬件到软件的次序依次为:
片级初始化 板级初始化 系统级初始化
最新版整理ppt
在Linux内核中,以下内容一般编译成模块:
大多数的驱动程序。包括SCSI设备,CD-ROM,网 络设备,不常用的字符设备,如打印机,watchdog 等。
大多数文件系统,理论上除了根文件系统不能是模 块,其他文件系统都可以是模块。
一些内核支持的不常用的可执行文件格式,如 binfmt_misc。
字符设备(char device) 块设备(block device) 网络设备(network device) 字符设备是指存取时没有缓存的设备
块设备的读写都有缓存来支持,且块设备必须 能够随机存取(random access)
网络设备在Linux里做专门的处理
最新版整理ppt
20
Linux设备驱动程序分类
操作系统相关性
不同的操作系统具有各自的软件层次结 构, 因此,不同的操作系统具有特定的硬件 接口形式
最新版整理ppt
6
BSP的设计与实现
为实现上述两部分功能,设计一个完整 的BSP需要完成两部分工作:
设计初始化过程,完成嵌入式系统的初始化; 设计硬件相关的设备驱动,完成操作系统及应用
程序对具体硬件的操作。
嵌入式系统
最新版整理ppt
1
主要内容
版级支持包 BSP 嵌入式系统初始化以及BSP的设计 Linux系统驱动程序开发
最新版整理ppt
2
BSP的概念
BSP全称“板级支持包”(Board Support Packages),说的简单一点,就是一段启 动代码,和计算机主板的BIOS差不多, 但提供的功能区别就相差很大
驱动程序按需加载,不用时节省内存 驱动程序相对独立于内核,升级模块加载
最新版整理ppt
30
Linux驱动程序开发的任务
规划硬件资源的使用 分离硬件相关和硬件无关的代码 划分驱动程序的抽象层次 移植驱动程序到新的平台
最新版整理ppt
31
Linux驱动程序开发的任务