硬件抽象层ppt课件

上传人:我*** 文档编号:149212593 上传时间:2020-10-25 格式:PPT 页数:58 大小:182.50KB
返回 下载 相关 举报
硬件抽象层ppt课件_第1页
第1页 / 共58页
硬件抽象层ppt课件_第2页
第2页 / 共58页
硬件抽象层ppt课件_第3页
第3页 / 共58页
硬件抽象层ppt课件_第4页
第4页 / 共58页
硬件抽象层ppt课件_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《硬件抽象层ppt课件》由会员分享,可在线阅读,更多相关《硬件抽象层ppt课件(58页珍藏版)》请在金锄头文库上搜索。

1、硬件抽象层,BSP的概念,BSP全称“板级支持包”(Board Support Packages),说的简单一点,就是一段启动代码,和计算机主板的BIOS差不多,但提供的功能区别就相差很大 在Windows CE中,BSP是驱动程序、OEM适应层(OEM Adaptation Layers,OAL)、硬件抽象层(HAL)以及启动设备和使外设正常工作所需BIOS文件的集合。,BSP和BIOS区别,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化.)、装入操作系统并调度操作系统向硬件发出的指令。 BSP是和操作系统绑在一起运行,尽管BSP的开始部分和BIOS所做

2、的工作类似,但是 BSP还包含和系统有关的基本驱动 BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置,但是程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中,不同系统中的BSP,一个嵌入式操作系统针对不同的CPU,会有不同的BSP 即使同一种CPU,由于外设的一点差别BSP相应的部分也不一样,BSP的特点与功能,硬件相关性 因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。 操作系统相关性 不同的操作系统具有各自的软件层次结构,因此,不同的操

3、作系统具有特定的硬件接口形式。,BSP的设计与实现,为实现上述两部分功能,设计一个完整的BSP需要完成两部分工作: (1)设计初始化过程,完成嵌入式系统的初始化; (2)设计硬件相关的设备驱动,完成操作系统及应用程序对具体硬件的操作。,嵌入式系统初始化以及BSP的功能,嵌入式系统的初始化过程是一个同时包括硬件初始化和软件初始化的过程;而操作系统启动以前的初始化操作是BSP的主要功能之一 初始化过程总可以抽象为三个主要环境,按照自底向上、从硬件到软件的次序依次为:片级初始化、板级初始化和系统级初始化。,初始化过程,片级初始化: 主要完成CPU的初始化,包括设置CPU的核心寄存器和控制寄存器,CP

4、U核心工作模式以及CPU的局部总线模式等。片级初始化把CPU从上电时的缺省状态逐步设置成为系统所要求的工作状态。这是一个纯硬件的初始化过程。 板级初始化: 完成CPU以外的其他硬件设备的初始化。除此之外,还要设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。这是一个同时饮食软硬件两部分在内的初始化过程。 系统级初始化: 这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系

5、统创建应用程序环境并将控制转交给应用程序的入口。,硬件相关的设备驱动程序,BSP另一个主要功能是硬件相关的设备驱动。 与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。 尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用 而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。,BSP开发的前提和步骤,开发的前提 : 熟悉硬件方面:使用CPU等 熟悉工具方面:电表,示波器,逻辑分析仪,硬件仿真器,仿真调试环境。 语言方面:汇编语言,C语言。 BS

6、P开发的一般步骤如下: 硬件主板研制,测试。 操作系统的选定,BSP编程。 上层应用程序的开发。,编写函数,对板卡中每个芯片的操作都通过多个函数来完成 如果应用程序对板卡的操作都直接通过调用中的函数来完成,那将很不利于源程序的调试 ,并降低了程序的可移植性 把能完成某个特定功能的函数封装在一个库文件中,并放在应用程序与之间 对每个芯片来说,都应当有初始化函数和状态读取函数,设计实现BSP的一般方法,BSP的开发需要具备一定的硬件知识 要求掌握操作系统所定义的BSP接口 两种快捷方法 以经典BSP为参考 使用操作系统提供的BSP模板 设计实现BSP两部分功能时应采用以下两种不同方法 “自底向上”

7、地实现BSP中的初始化操作 “自顶向下”地设计硬件相关的驱动程序,BSP设计方法的不足与改进,目前BSP的设计与实现主要是针对某些特定的文件进行修改 直接修改相关文件容易造成代码的不一致性,增加软件设计上的隐形错误,从而增加系统调试和代码维护的难度 解决这个问题的一个可行办法是:设计实现一种具有图形界面的BSP开发设计向导,由该向导指导设计者逐步完成BSP的设计和开发,并最终由向导生成相应的BSP文件,而不再由设计人员直接对源文件进行修改。,驱动程序,嵌入式Linux驱动程序开发 常用的系统支持 Linux系统网络设备驱动程序 编写Linux网络驱动程序中需要注意的问题,LINUX驱动开发,A

8、genda,基本原理 内核模块 设备驱动的结构 Linux 2.6内核设备模型 中断处理 各种接口设计与驱动开发实例,Linux系统驱动,Linux中设备被抽象出来,所有设备都看成文件 设备的读写和普通文件一样 设备驱动程序主要完成这些功能: 探测设备和初始化设备 从设备接收数据并提交给内核 从内核接收数据送到设备 检测和处理设备错误,Linux设备驱动程序分类,Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network device)三种 字符设备是指存取时没有缓存的设备。 块设备的读写都有缓存来支持,并且块设备必须能够随机存取(

9、random access) 网络设备在Linux里做专门的处理,编写驱动程序的一些基本概念,读写 几乎所有设备都有输入和输出。每个驱动程序要负责本设备的读写操作。操作系统的其他不需要知道对设备的具体读写操作怎样进行,这些都由驱动程序屏蔽掉了。操作系统定义好一些读写接口,由驱动程序完成具体的功能。在驱动程序初始化时,需要把具有这种接口的读写函数注册进操作系统。 中断 中断在现代计算机结构中有重要的地位。操作系统必须提供驱动程序响应中断的能力。一般是把一个中断处理程序注册到系统中去。操作系统在硬件中断发生后调用驱动程序的处理程序。Linux支持中断的共享,即多个设备共享一个中断。 时钟 在实现驱

10、动程序时,很多地方会用到时钟。如某些协议里的超时处理,没有中断机制的硬件的轮询等。操作系统应为驱动程序提供定时机制。一般是在预定的时间过了以后回调注册的时钟函数。,LINUX设备的分类,字符设备 串口,终端,触摸屏 ls -l /dev/ttyS0 crw-rw-rw- 1 root uucp 4, 64 4月 1 19:56 /dev/ttyS0 块设备 FLASH,RAMDISK,硬盘 ls -l /dev/mtdblock3 brw-r-r- 1 505 505 31, 3 Feb 19 2005 /dev/mtdblock3 网络设备 ifconfig -a,设备文件与设备号,用户通过

11、设备文件访问设备 每个设备用一个主设备号和次设备号标识,设备驱动的功能,管理I/O设备 上层软件的抽象操作与设备操作的转换,内核模块,Linux内核运行时动态扩展的一种技术 一组可以动态加载/卸载的代码 Linux驱动以内核模块的方式实现,LINUX内核模块的框架,static int init_routine (void) void cleanup_routine(void) module_init(init_routine); module_exit(cleanup_routine); MODULE_LICENSE(GPL);,内核模块的编译和加载,Kconfig Makefile,Kco

12、nfig与Makefile的关系,Kconfig,语法 config config options 类型定义 依赖性定义 帮助定义,Kconfig示例,Makefile示例,定义示例 obj-y += hello.o obj-m += hello.o obj-$(CONFIG_HELLO_MODULE) += hello.o 编译 make -C M = $PWD modules,设备驱动的结构,驱动与内核的接口 注册/卸载 VFS接口 数据交互 中断注册 硬件设备接口 硬件探测 初始化 读写访问 设备控制,设备驱动与VFS的接口,简单字符设备驱程的框架,static struct file_

13、operations driver_fops = ; int _init init_routine (void) cdev_add(); return 0; void cleanup_routine(void) cdev_del(); ,内核与用户空间数据交换方法,copy_to_user(void _user *to, const void *from, unsigned long n); copy_from_user(void *to, const void _user *from, unsigned long n);,Linux 2.6内核设备模型,Linux 2.6内核在整个系统范围内

14、对硬件设备进行抽象,建立了一个统一的设备模型 四个重要的数据结构 struct kobject struct kset struct kobj_type struct subsystem,什么是中断 Linux中的中断处理 中断处理程序的编写 中断处理程序的注册与释放,中断处理,工作推后执行的机制,中断处理程序要求短小,处理快。 为了尽快处理中断,以免发生中断丢失,实时性要求不高的工作推后执行。 给LINUX带来实时性不好恶名的bottom half机制在2.6内核中已不再使用。,工作推后执行的机制,软中断 Tasklet 工作队列(work queue),软中断,执行频率或连续性要求很高的强

15、实时性系统工作,一般不用。 HI_SOFTIRQ优先级高的tasklets TIMER_SOFTIRQ定时器软中断 NET_TX_SOFTIRQ网络数据包TX NET_RX_SOFTIRQ网络数据包RX SCSI_SOFTIRQSCSI软中断 TASKLET_SOFTIRQtasklets软中断,tasklets,最常用的延迟执行机制,与软中断类似 通过软中断实现,接口更简单,工作队列(work queue),将工作交给内核线程执行 允许重新调度或睡眠 通常可以用内核线程代替 与tasklet使用的区别 若推后执行的任务不需要休眠taklet/softirq,内核模块,模块是内核的一部分,但是

16、并没有被编译到内核里去。它们被分别编译和连接成目标文件。 用命令insmod插入一个模块到内核中,用命令rmmod卸载一个模块 在Linux内核中,以下内容一般编译成模块: 大多数的驱动程序。包括SCSI设备,CD-ROM,网络设备,不常用的字符设备,如打印机,watchdog等。 大多数文件系统,理论上除了根文件系统不能是模块,其他文件系统都可以是模块。 一些内核支持的不常用的可执行文件格式,如binfmt_misc。,kmod 和高级模块化,Linux 提供了对模块自动加载和卸载的支持 要利用这一特性,在编译内核前进行的配置中,必须打开对 kmod 的支持选项。 一旦内核试图访问某种资源并发现该资源不可用时,它会对 kmod 子系统进行一次特殊的调用而不仅仅是返回一个错误 按需加载的例子 :ALSA(Advanced Linux Sound Architecture)声卡驱动程序组的实现,常用的系统支持,内存申请和释放 中断 时钟 I/O 中断打开关闭 打印信息 注册驱动程序,内存申请和释放,include/linux/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号