嵌入式系统软件开发技术BSP和驱动.ppt_第1页
嵌入式系统软件开发技术BSP和驱动.ppt_第2页
嵌入式系统软件开发技术BSP和驱动.ppt_第3页
嵌入式系统软件开发技术BSP和驱动.ppt_第4页
嵌入式系统软件开发技术BSP和驱动.ppt_第5页
已阅读5页,还剩174页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统软件开发技术,嵌入式系统,主要内容,版本级支持包BSP嵌入式系统初始化和BSP设计Linux系统驱动开发嵌入式网络,BSP概念,BSP全称“主板支持包”,简单来说,就是一个启动代码,类似于计算机主板的BIOS。但是,所提供的功能非常不同。在Windows CE中,BSP是启动设备和使外围设备正常工作所需的驱动程序、原始设备制造商适配层(OAL)、硬件抽象层(HAL)和基本输入输出系统文件的集合。基本输入输出系统和基本输入输出系统的区别在于,基本输入输出系统主要负责检测和初始化系统设备(设置堆栈指针、中断分配、内存初始化等)。),加载操作系统,并在计算机打开时将操作系统发送的指令分派给

2、硬件。BSP与操作系统紧密相连。虽然BSP的开始部分类似于基本输入输出系统所做的工作,但BSP也包含与系统相关的基本驱动程序,用户不能更改,只能修改和设置参数。然而,程序员也可以通过编程来修改BSP,随意添加一些与系统无关的驱动程序或程序,甚至把所有的上层开发都放到BSP中。BSP在不同的系统中,一个嵌入式操作系统对于不同的处理器,会有不同的BSP,甚至对于同一个处理器,由于外设的不同,BSP的相应部分也不同,BSP的特点和功能与硬件的相关性,因为嵌入式实时系统的硬件环境具有应用的相关性,所以作为高级软件和硬件之间的接口,BSP必须为操作系统提供操作和控制特定硬件的方法。具有不同操作系统依赖性

3、的操作系统有它们自己的软件层次结构。因此,不同的操作系统有特定的硬件接口形式,以及BSP的设计和实现。为了实现以上两个功能,设计一个完整的BSP需要两个部分:设计初始化过程和完成嵌入式系统的初始化;设计硬件相关的设备驱动程序,通过操作系统和应用程序完成特定硬件的操作。嵌入式系统初始化和BSP功能。嵌入式系统的初始化过程同时包括硬件初始化和软件初始化。操作系统启动前的初始化操作是BSP的主要功能之一。初始化过程可以抽象为三个主要环境,即:芯片级初始化、板级初始化、系统级初始化、芯片级初始化:主要完成中央处理器的初始化,设置中央处理器的核心寄存器和控制寄存器,中央处理器的本地总线模式等。并将中央处

4、理器从开机时的默认状态逐渐设置为系统所需的工作状态。这是一个纯硬件的初始化过程,初始化过程(续1),板级初始化:完成除中央处理器以外的硬件设备的初始化,同时设置一些软件的数据结构和参数,为后续的系统级初始化和应用程序运行建立软硬件环境。这是一个包括软件和硬件的初始化过程,初始化过程(续2),系统级初始化:这是一个主要基于软件初始化的过程。BSP主要用于初始化操作系统。BSP将控制权转移给操作系统,操作系统执行其他初始化操作,包括加载和初始化与硬件无关的设备驱动程序、建立系统内存区域、加载和初始化其他系统软件模块(如网络系统、文件系统等)。)。最后,操作系统创建一个应用程序环境,并将控制转移到应

5、用程序的入口,硬件相关的设备驱动程序。与初始化过程相反,硬件相关设备驱动程序的初始化和使用通常是一个从上到下的过程。虽然BSP包含与硬件相关的设备驱动程序,但这些设备驱动程序通常不会被BSP直接使用,而是在系统初始化过程中由BSP与操作系统中的通用设备驱动程序相关联,并在后续应用中被通用设备驱动程序调用以实现硬件设备的操作。,BSP开发的前提和步骤,开发的前提:熟悉硬件:使用熟悉的工具如CPU:电流表、示波器、逻辑分析仪、硬件模拟器、模拟调试环境等。语言:汇编语言,C语言。BSP开发的一般步骤如下:硬件主板的开发,测试操作系统的选择,BSP编程上层应用程序的开发,编写BSP函数,板中的每个芯片

6、都由BSP通过多种功能进行操作。如果应用程序对板卡的操作是通过调用BSP中的函数直接完成的,这将非常不利于源程序的调试,降低程序的可移植性。能够完成特定功能的函数被打包在一个库文件中,并放在应用程序和BSP之间。对于每个芯片,应该有一个初始化功能和一个状态读取功能。为了设计和实现平衡计分卡的一般方法,平衡计分卡的开发需要具备一定的硬件知识,并掌握操作系统定义的平衡计分卡接口。在以操作系统提供的BSP模板为参考来设计和实现BSP的两个功能时,应该采用以下两种不同的方法来实现BSP中自下而上的初始化操作和自上而下的硬件相关驱动程序设计。目前,BSP的设计和实现主要是针对某些特定文件的修改,这很容易

7、导致代码不一致,增加软件设计中的隐藏错误,从而增加系统调试和代码维护的难度。解决这一问题的一个可行方法是设计并实现一个带有图形界面的BSP开发设计向导,该向导将引导设计者逐步完成BSP的设计和开发,最终由向导生成相应的BSP文件,而不是由设计者直接生成源文件。Linux设备驱动程序和开发Linux设备驱动程序概述Linux设备驱动程序是用于处理或操作硬件控制器的软件,它集成在内核中,是内存驻留的低级硬件处理程序的共享库。设备驱动是系统对设备的抽象管理和控制。Linux允许将设备驱动程序实现为内核可加载模块,也就是说,它不仅可以在系统启动时注册,还可以在启动后加载和注册。Linux驱动程序开发、

8、嵌入式Linux平台的搭建、驱动程序的移植和编写往往是最具挑战性的任务。驱动程序的开发周期通常很长,这对产品的发布时间有重要影响。它直接关系到系统的工作效率和稳定性,对项目的成败起着关键作用。设备驱动程序的主要功能设备驱动程序主要执行以下功能:检测设备并初始化设备,将设备投入运行并退出服务,从设备接收数据并将其提交给内核,从内核接收数据并将其发送给设备以检测和处理设备错误,对Linux设备驱动程序进行分类,对Linux中的所有设备进行抽象,文件设备的读写被视为与普通文件相同。Linux系统设备分为以下三类:计费设备、块设备、网络设备。字符设备是指访问时没有缓存的设备。缓存支持块设备的读写。而阻

9、塞设备必须能够随机访问网络设备,才能在Linux中进行特殊处理。Linux设备驱动程序被分类,网络设备在Linux中进行特殊处理。Linux的网络系统主要基于BSD unix套接字机制。在系统和驱动程序之间为数据传输定义了一个特殊的数据结构(sk_buff)。该系统支持发送数据和接收数据的缓存,提供流量控制机制,支持多协议,并对Linux设备驱动程序进行分类。典型的字符设备包括鼠标、键盘、串口和其他块设备,主要包括硬盘、软盘设备、光盘等。必须在块设备上安装文件系统才能进入操作系统。Linux驱动程序的引入,嵌入式Linux驱动程序已经支持了广泛的设备,这已经成为优于其他嵌入式操作系统的一大优势

10、。工业控制中常用的串口、鼠标、键盘等并口人机输入设备,完美支持触摸屏彩色和黑白液晶输出网络,包括tcp/ip、udp、防火墙、无线局域网、ip转发、ipsec、vpn usb,包括Usb硬盘、u盘、Usb摄像头,支持丰富的文件系统,包括FAT32、NTFS、嵌入式设备框图、驱动功能、1。驱动器直接控制硬件发送和接收通信数据,读写存储介质,如闪存或硬盘,以操作输出设备和执行机构,如打印、打开和关闭门禁等。以及驱动程序的功能(续);2.驱动程序提供了软件访问硬件的机制。应用软件可以通过驱动程序安全高效地访问硬件驱动程序文件,这可以方便地提供访问权限,作为一个独立的中间层软件来控制驱动程序。隐藏底层

11、的细节,提高软件的可移植性,并访问Linux设备驱动程序。该设备提供开发文件系统节点和进程文件系统节点。应用程序可以通过开发文件节点访问驱动程序。应用程序可以通过proc文件节点查询设备驱动程序的信息和驱动程序的位置。驱动程序位于驱动程序目录中。通常,驱动程序占内核代码的50%。Linux设备驱动程序占了Linux内核源代码的很大一部分。源代码的长度日益增加,主要是因为驱动程序的增加。在Linux内核升级过程中,驱动程序的结构相对稳定。在从2.0.xx到2.2.xx的更改中,在驱动程序的编写方面做了一些更改,但是从2.0.xx迁移到2.2.xx只需要做少量的工作。,Linux驱动程序的特点,嵌

12、入式Linux驱动程序的要求是多样的,而嵌入式计算平台往往在资源上是有限的,如处理速度、内存容量、总线带宽、电池容量等。它通常需要很短的开发周期和很大的压力。开发驱动程序需要丰富的专业知识,包括硬件和软件知识,以及嵌入式Linux驱动程序的特点。嵌入式系统硬件的更新速度正在加快。英特尔、三星、飞思卡尔、ti和ST等国际大型嵌入式芯片供应商每年都会推出大量新产品。新的芯片功能总是需要相应的驱动程序支持。Linux驱动着开发过程。熟悉设备的特点,确定设备驱动的类别,编写测试用例,收集可重用代码,编写自己的驱动代码,调试和测试,开发Linux驱动的环境。本机编译、调试和开发环境配置简单,不需要网络环

13、境。它适用于配置更高的x86机器。目标机器可以自由选择Linux或Windows Cygwin主机和目标机器通过网络共享文件系统。内核崩溃不会影响主机和Linux驱动程序的开发环境(续)。主机目标环境包括由主机运行的工具链交叉gcc glibc gdb。如果它是一个windows主机,它还需要一个cygwin模拟环境主机来运行远程服务。tftp通常用于传输内核映像和initrd,NFS用于共享文件系统,目标机器运行远程登录服务(如ssh或telnet)来调试驱动程序。Linux驱动程序的加载模式:驱动程序直接编译到内核驱动程序中,内核启动时可以在内存中保留特定的内存空间。驱动程序以模块的形式存

14、储在文件系统中。必要时,内核驱动程序被动态加载并按需加载,从而在不使用时节省内存。驱动程序相对独立于内核,升级灵活,加载Linux驱动程序模块,开发Linux驱动程序。规划硬件资源的使用从驱动程序的抽象层分离硬件相关和硬件无关的代码将驱动程序移植到新平台,Linux驱动程序开发任务,规划硬件资源的使用CPU时间片分配中断处理系统内存空间映射,设备内存映射,Linux驱动程序开发任务,从驱动程序的抽象层分离硬件相关和硬件无关的代码,Linux驱动程序开发的任务,将驱动程序移植到新平台,GPL对驱动程序开发的影响, 实现非GPL授权的方法,以私有产权的形式动态加载驱动程序,设备驱动程序的代码,驱动

15、程序的注册和注销注册寄存器chrdev()寄存器blkdev()设备打开和释放打开()释放()设备读()写()设备控制操作ioctl(),设备驱动程序加载,使用模块动态加载驱动程序int func _ init(void)makefile : in mod xx。 o lsmod rmmod xx。o将驱动程序静态编译到内核int _ init _ func _ init(void)makefile :中,并在启动时自动加载。Linux驱动模块加载,编写一些驱动的基本概念,不管什么操作系统驱动,都有一些共同的概念。操作系统向驱动程序提供的支持大致相同。下面简要介绍网络设备驱动程序的一些基本要求

16、,编写网络驱动程序,发送和接收。这是网络设备最基本的功能。例如,网卡所做的只是发送和接收。因此,驱动程序应该告诉系统发送函数在哪里,当有数据要发送时,系统会调用发送程序。因为驱动程序直接控制硬件,所以网络硬件接收数据,而驱动程序是第一个获得这些数据的,它负责处理必要的原始数据,然后将其发送到系统。在这里,操作系统必须提供两种机制:找到驱动程序的发送函数。驱动程序将接收到的数据发送到系统,写入驱动程序,并进行读写。几乎所有的设备都有输入和输出。每个驱动程序负责读写设备。操作系统不需要知道如何在设备上执行特定的读写操作,这些操作是由驱动程序屏蔽的。操作系统定义了一些读写接口,驱动程序完成特定的功能

17、。在初始化驱动程序时,有必要将具有这种接口的读写功能注册到操作系统中,并写入驱动程序。中断中断在现代计算机结构中起着重要的作用。操作系统必须提供驱动程序响应中断的能力。通常,中断处理程序在系统中注册。硬件中断发生后,操作系统调用驱动程序的处理程序。Linux支持中断共享,也就是说,多个设备共享一个中断,写驱动程序,并且在实现驱动程序时,时钟被用在许多地方。例如某些协议中的超时处理、无中断机制的硬件轮询等。操作系统应该为驱动程序提供一个定时机制,它通常在预定时间过去后调用注册的时钟函数。内核模块是内核的一部分,但是它还没有被编译到内核中。它们分别被编译和连接成目标文件。使用insmod命令将模块插入内核,并使用rmmod命令卸载Linux内核中的模块。以下内容通常被编译成模块:大多数驱动程序。包括SCSI设备、光盘、网络设备和特殊字符设备,如打印机和看门狗。大多数文件系统,除了根文件系统理论上不能是模块,所有其他文件系统都可以是模块。内核支持一些不同寻常的可执行文件格式,如binfmt_misc、kmod和高级模块化

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论