【大学课件】嵌入式系统软件开发技术.ppt
《【大学课件】嵌入式系统软件开发技术.ppt》由会员分享,可在线阅读,更多相关《【大学课件】嵌入式系统软件开发技术.ppt(179页珍藏版)》请在三一文库上搜索。
1、 嵌入式系统软件开发技术,嵌入式系统,http:/ BSP 嵌入式系统初始化以及BSP的设计 Linux系统驱动程序开发 嵌入式联网,http:/ Support Packages),说的简单一点,就是一段启动代码,和计算机主板的BIOS差不多,但提供的功能区别就相差很大 在Windows CE中,BSP是驱动程序、OEM适应层(OEM Adaptation Layers,OAL)、硬件抽象层(HAL)以及启动设备和使外设正常工作所需BIOS文件的集合。,http:/ BSP是和操作系统绑在一起运行,尽管BSP的开始部分和BIOS所做的工作类似,但是 BSP还包含和系统有关的基本驱动 BIOS
2、程序是用户不能更改,编译编程的,只能对参数进行修改设置,但是程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中,http:/ 即使同一种CPU,由于外设的一点差别BSP相应的部分也不一样,http:/ 因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。 操作系统相关性 不同的操作系统具有各自的软件层次结构, 因此,不同的操作系统具有特定的硬件接口形式,http:/ 设计初始化过程,完成嵌入式系统的初始化; 设计硬件相关的设备驱动,完成操作系统及应用程序对具
3、体硬件的操作。,http:/ 初始化过程总可以抽象为三个主要环境,按照自底向上、从硬件到软件的次序依次为: 片级初始化 板级初始化 系统级初始化,http:/ 主要完成CPU的初始化 设置CPU的核心寄存器和控制寄存器 CPU核心工作模式 CPU的局部总线模式等 片级初始化把CPU从上电时的缺省状态逐步设置成为系统所要求的工作状态 这是一个纯硬件的初始化过程,http:/ 完成CPU以外的其他硬件设备的初始化 同时还要设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境 这是一个同时包含软硬件两部分在内的初始化过程,http:/ 这是一个以软件初始化为主的过程,
4、主要进行操作系统初始化 BSP将控制转交给操作系统,由操作系统进行余下的初始化操作: 包括加载和初始化与硬件无关的设备驱动程序 建立系统内存区 加载并初始化其他系统软件模块(如网络系统、文件系统等) 最后,操作系统创建应用程序环境并将控制转交给应用程序的入口,http:/ 与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程 尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用 而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。,http:/ :
5、 熟悉硬件方面:使用CPU等 熟悉工具方面:电表,示波器,逻辑分析仪,硬件仿真器,仿真调试环境等 语言方面:汇编语言,C语言 BSP开发的一般步骤如下: 硬件主板研制,测试 操作系统的选定,BSP编程 上层应用程序的开发,http:/ 如果应用程序对板卡的操作都直接通过调用BSP中的函数来完成,那将很不利于源程序的调试 ,并降低了程序的可移植性 把能完成某个特定功能的函数封装在一个库文件中,并放在应用程序与BSP之间 对每个芯片来说,都应当有初始化函数和状态读取函数,http:/ 要求掌握操作系统所定义的BSP接口 两种快捷方法 以经典BSP为参考 使用操作系统提供的BSP模板 设计实现BSP
6、两部分功能时应采用以下两种不同方法 “自底向上”地实现BSP中的初始化操作 “自顶向下”地设计硬件相关的驱动程序,http:/ 直接修改相关文件容易造成代码的不一致性,增加软件设计上的隐形错误,从而增加系统调试和代码维护的难度 解决这个问题的一个可行办法是:设计实现一种具有图形界面的BSP开发设计向导,由该向导指导设计者逐步完成BSP的设计和开发,并最终由向导生成相应的BSP文件,而不再由设计人员直接对源文件进行修改。,http:/ Linux允许设备驱动程序作为内核可加载模块实现,即除了可以在系统启动时进行注册外,还可以在启动后进行加载注册。,http:/ 驱动程序的开发周期一般较长,对产品
7、的面世时间有着重要影响 驱动程序质量的好坏,直接关系到系统工作效能和稳定性,对项目的成败起着关键作用,http:/ 检测设备和初始化设备 使设备投入运行和退出服务 从设备接收数据并提交给内核 从内核接收数据送到设备 检测和处理设备错误,http:/ 设备的读写和普通文件一样 Linux系统的设备分为如下三类: 字符设备(char device) 块设备(block device) 网络设备(network device) 字符设备是指存取时没有缓存的设备 块设备的读写都有缓存来支持,且块设备必须能够随机存取(random access) 网络设备在Linux里做专门的处理,http:/ Lin
8、ux的网络系统主要是基于BSD unix的socket 机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递 系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持,http:/ 块设备主要包括硬盘、软盘设备、CD-ROM等 一个文件系统要安装进入操作系统必须在块设备上,http:/ 工业控制常用的串口,并口 人机输入设备如鼠标、键盘,触摸屏 彩色、黑白液晶显示输出 网络的完善支持,包括tcp/ip,udp,firewall,WLAN,ip forwarding,ipsec,vpn Usb的全面支持,包括usb硬盘、u盘,usb摄像头 支持丰富的文
9、件系统,包括FAT32,NTFS,http:/ 收发通讯数据 读写存储介质,比如flash或硬盘 操作输出设备和执行机构,例如打印,开关门禁等,http:/ 应用软件通过驱动程序安全高效的访问硬件 驱动程序文件可以方便的提供访问权限控制 驱动程序作为一个隔离的中间层软件,将底 层细节隐藏起来,提高了软件的可移植性,http:/ 件系统节点 应用程序通过dev文件节点访问驱动 程序 应用程序通过proc文件节点可以查 询设备驱动的信息,http:/ 通常驱动程序占kernel代码的50% Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。
10、 在Linux内核的不断升级过程中,驱动程序的结构还是相对稳定。 在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。,http:/ 嵌入式设备硬件各异 嵌入式计算平台往往资源有限,比如处理速度、存储器容量、总线带宽、电池容量等 通常要求短的开发周期、压力大 开发驱动程序需要丰富的专业知识,包括 硬件和软件知识,http:/ 国际上大的嵌入式芯片提供商如Intel、 Samsung、Freescale、TI、ST每年都有大量新品推出 新的芯片功能总是需要相应的驱动程序支持,http:/ 确定设备驱动程序类别 编写测试用
11、例 搜集可重用的代码 编写自己的驱动程序代码 编码、调试、测试,http:/ 开发环境配置简单 无需网络环境 适用于配置较高的x86机器 主机+目标机 主机可以自由选择Linux或Windows+Cygwin 主机和目标机通过网络共享文件系统 内核崩溃不会影响主机,http:/ 主机运行的工具链cross gcc + glibc + gdb, 如果是windows主机还要有cygwin仿真环境 主机运行远程服务,常用的有tftp用来传送内 核映像、initrd,NFS用来共享文件系统 目标机运行ssh或telnet等远程登陆服务,用来 调试驱动程序,http:/ 驱动程序在内核启动时就已经在内
12、存中 可以保留专用存储器空间 驱动程序以模块形式存储在文件系 统里,需要时动态载入内核 驱动程序按需加载,不用时节省内存 驱动程序相对独立于内核,升级灵活,http:/ 分离硬件相关和硬件无关的代码 划分驱动程序的抽象层次 移植驱动程序到新的平台,http:/ CPU时间片分配 中断处理 系统存储器空间映射,http:/ 划分驱动程序的抽象层次,http:/ 式动态加载 驱动程序可以以私有产权形式进行 商业授权,http:/ register_chrdev() register_blkdev() 设备的打开与释放 open() release() 设备的读写操作 read() write()
13、设备的控制操作 ioctl(),http:/ int func_init(void) Makefile: insmod xx.o lsmod rmmod xx.o 将驱动静态编译到内核里面 int _init func_init(void) Makefile: 启动时自动加载,http:/ 操作系统提供给驱动程序的支持也大致相同 以下简单介绍网络设备驱动程序的一些基本要求,http:/ 这是一个网络设备最基本的功能 如一块网卡所做的无非就是收发工作。所以驱动程序里要告诉系统发送函数在哪里,系统在有数据要发送时就会调用发送程序。 驱动程序由于是直接操纵硬件的,所以网络硬件有数据收到,最先能得到这
14、个数据的也就是驱动程序,它负责把这些原始数据进行必要的处理,然后送给系统。 这里,操作系统必须要提供两个机制: 找到驱动程序的发送函数 驱动程序把收到的数据送给系统,http:/ 几乎所有设备都有输入和输出。每个驱动程序要负责本设备的读写操作。 操作系统不需要知道对设备的具体读写操作怎样进行,这些都由驱动程序屏蔽掉了 操作系统定义好一些读写接口,由驱动程序完成具体的功能 在驱动程序初始化时,需要把具有这种接口的读写函数注册进操作系统,http:/ 中断在现代计算机结构中有重要的地位 操作系统必须提供驱动程序响应中断的能力 一般是把一个中断处理程序注册到系统中去 操作系统在硬件中断发生后调用驱动
15、程序的处理程序 Linux支持中断的共享,即多个设备共享一个中断,http:/ 在实现驱动程序时,很多地方会用到时钟。如某些协议里的超时处理,没有中断机制的硬件的轮询等。 操作系统应为驱动程序提供定时机制 一般是在预定的时间过了以后回调注册的时钟函数,http:/ 用命令insmod插入一个模块到内核中,用命令rmmod卸载一个模块 在Linux内核中,以下内容一般编译成模块: 大多数的驱动程序。包括SCSI设备,CD-ROM,网络设备,不常用的字符设备,如打印机,watchdog等。 大多数文件系统,理论上除了根文件系统不能是模块,其他文件系统都可以是模块。 一些内核支持的不常用的可执行文件
16、格式,如binfmt_misc。,http:/ 和高级模块化,Linux 提供了对模块自动加载和卸载的支持 要利用这一特性,在编译内核前进行的配置中,必须打开对 kmod 的支持选项。 一旦内核试图访问某种资源并发现该资源不可用时,它会对 kmod 子系统进行一次特殊的调用而不仅仅是返回一个错误 按需加载的例子 :ALSA(Advanced Linux Sound Architecture)声卡驱动程序组的实现,http:/ 中断 时钟 I/O 中断打开关闭 输出信息 注册驱动程序,http:/ 与用户模式下的malloc()不同,kmalloc()申请空间有大小限制。长度是2的整次方。可以申
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学课件 大学 课件 嵌入式 系统软件 开发 技术
链接地址:https://www.31doc.com/p-3023620.html