第八章Xilinx操作系统及库课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第八章Xilinx操作系统及库课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 Xilinx 操作系统 课件
- 资源描述:
-
1、第八章 Xilinx操作系统及库 何宾 2012.02 本章主要介绍操作系统及板级支持包。该章内容主要包括:(1)Xilinx微核接口;(2)LibXil标准C库;(3)板级支持包;(4)Xilkernel核;(5)LibXil库。其中重点介绍了Xilkernel核,内容包括:Xilkernel核概述、Xilkernel构成、建立Xilkernel应用程序、Xilkernel处理模型、Xilkernel调度模型、POSIX接口、Xilkernel API接口、存储器保护、系统初始化、Xilkernel定制等内容。Xilinx的微核(Xilinx Microkernel,XMK)包含三个不同的软
2、件实体,通过它用户应用程序可以与标准C和Math库,LibXil库,Xilkernel或独立运行的操作系统相接。标准C库由newlib和libc组成,该库包含了标准C的函数,例如,stdio,stdlib,string例程。数学库是newlib数学库的扩展,提供了标准的数学函数。LibXil库由下面构成:1)LibXil Driver-Xilinx的设备驱动程序;2)LibXil MFS-Xilinx的存储文件系统(Memory File System,MFS);3)LibXil Flash-并行Flash编程库;4)LibXil lsf-串行Flash编程库;Xilinx提供独立板级支持包(
3、Board Support Package,BSP,后来Xilinx称为Standard平台)和Xilkernel。图图8.1 XMK结构结构用户应用程序用户应用程序XilkernelXilFlashXil MFSXil lsf独立独立BSPXilinx驱动驱动C,Math和和GCC库库 用户的应用程序通过不同的方法和XMK的不同组成部分进行接口。除了一些交互外,库之间是独立的。比如,Xilkernel使用BSP。BSP和Xilinx驱动构成了对底层硬件的抽象。XMK的库和OS依赖于标准的C库组成部分。数学库libm.a可以用来和用户的应用程序连接。BSP是单线程库。BSP提供对硬件的小的接口
4、。向应用程序提供所要求的最少的功能。BSP提供的一些典型的函数包括:(1)设置中断 (2)系统异常 (3)配置缓存 (4)其它硬件指定的功能。LibXil是指设备驱动程序,在软件平台中被包含用来向系统中的外设提供接口。这些驱动伴随EDK提供,并且被Libgen配置。后面详细介绍设备驱动的概念和在软件平台中适配的方法。Xilkernel是一个简单的嵌入式处理器的核,能根据系统进行定制。Xilkernel有嵌入式核的那些关键的特征:(1)多任务;(2)优先级驱动的抢先调度;(3)进程间通信;(4)同步和中断处理。Xilkernel是一个小的,模块化的,用户定制,能用在不同的系统配置环境。应用程序能
5、以不同模式,静态的和Xilkernel连接形成单独的可执行文件。LibXil MFS提供简单的存储文件系统,使得很容易通过使用输入-输出文件来访问数据。这个系统通过改变安装区域的源文件,很容易配置满足工程要求。LibXil Flash:提供对并行Flash的访问,这些Flash与普通的Flash接口一致。支持Intel和AMD的CFI(Common Flash Interface)芯片。LibXil lsf是一个系统内Flash库。支持Xilinx系统内Flash和外部的串行Flash(Atmel的AT45XXXD,Intel的S33和ST的M25PXX)。该库使得高层软件能和串行Flash通
6、信。EDK库和设备驱动提供标准C库函数和访问外设的函数。EDK库由Libgen根据MSS文件为每个工程自动配置。这些库和include文件保存在当前工程lib和include目录下。mb-gcc的选项-l和-L用来将这些目录添加到库搜索路径中。该库为MicroBlaze和PowerPC处理器提供了标准的C函数。可以根据下面路径下的这些标准C函数找到头文件。/gnu/include 其中:为EDK的安装路径;为powerpc-eabi或microblaze;为sol,nt,lin;为powerpc-eabi或microblaze-xilinx-elf;Lib.c目录和函数有:_ansi,fast
7、math.h,machine/,reent.h,stdlib.h,utime.h,_syslist.h,fcnt1.h,malloc.h,regdef.h,string.h,utmp.h,ar.h,float.h,math.h,setjmp.h,sys/,assert.h,grp.h,paths.h,signal.h,termios.h,ctype.h,ieeefp.h,process.h,stdarg.h,time.h,dirent.h,limits.h,pthread.h,stddef.h,unctrl.h,errno.h,locale.h,pwd.h,stdio.h,unistd.h 程
8、序访问标准的C库函数,必须使用如下方式编译:1)mb-gcc(对MicroBlaze处理器);2)powerpc-eabi-gcc(对PowerPC处理器),访问libm数学函数,指定lm选项;Xilinx的C库为MicroBlaze处理器包含下面的目标文件:1)_exception_handler.o,_interrupt_handler.o,_program_clean.o,_program_init.o 2)默认情况下提供异常和中断句柄。libxil.a被自动包含。EDK库包含标准C函数用于I/O,比如printf和scanf。这些函数代码太大,不适应嵌入式处理器的应用。这些函数的原型在
9、stdio.h。注意:C标准I/O例程比如printf,scanf,vfprintf在默认情况下是行缓冲的。将其变成无缓冲格式的,必须调用setvbuf。比如:setvbuf(stdout,NULL,_IONBF,0);这些输入/输出例程要求在新一行用CR和LF结束。除了标准的C函数,EDK处理器库提供了下面的小的I/O函数:1)void print(char*);(打印字符串到MSS文件中指定的标准输 出的外设)2)void putnum(int);(转换整数到16进制的字符串,并打印字 符串到外设)3)void xil_printf(const*char ctl1,)(与printf函数类
10、似,但代码 更小,不支持浮点数)MicroBlaze处理器和PowerPC处理器C库支持标准的存储器管理函数,比如malloc(),calloc(),free()。通过使用堆来动态的分配存储器。堆指针从低向高增加(运行时不能增加)。分配堆至少128字节,观察函数返回值以确定正确的分配堆。对所有处理器可以使用libgcc.a库来用软件实现整数和浮点算术运算。当硬件不支持使用指令的算术运算原语时,编译器为所有的处理器插入对这些例程的调用。默认情况下,整数乘法通过使用库函数例程_mulsi3实现(软件)。如果编译器mb-gcc选择-mno-xl-soft-mul时,整数乘法可以使用硬件实现。整数除法
11、和求模操作通过使用库函数例程_divsi3和_modsi3实现(软件)。可以定制使用硬件除法器来实现除法指令。双精度乘法,除法和求模函数使用库函数_muldi3,_divdi3,moddi3实现。无符号的这些操作相对于有符号的操作就是其前缀为_u,而不是_。所有的浮点的加、减、乘、除和转换操作使用C库里的软件函数实现。板级支持包BSP是软件模块的最底层,用来访问处理器指定的功能。当应用程序直接访问板/处理器使用独立的BSP,BSP在操作系统层下面。当系统使用MicroBlaze处理器,并且没有使用OS时,Libgen自动在libxil.a工程库中建立独立的BSP。MicroBlaze处理器BS
12、P的函数类型主要有:中断处理;异常处理;指令缓存处理;数据缓存处理;FSL接口宏;FSL宏标志;pseudo-asm宏;PVR访问例程和宏;文件处理;错误码。使用中断处理函数,必须在源文件中包含头文件 mb_interface.h。MicroBlaze的中断管理函数有:void microblaze_enable_interrupts(void)void microblaze_disable_interrupts(void)void microblaze_register_handle(XInterruptHandler Handler,void *DataPtr)这个功能在MicroBlaz
13、e3.0以前不可用。使用异常处理函数,必须在源文件中包含头文件mb_interface.h。当在MHS中正确的配置了硬件异常处理,这些函数才能正常运行。MicroBlaze的异常处理函数有:void microblaze_disable_exceptions(void)void microblaze_enable_exceptions(void)void microblaze_register_exception_handle(Xuint8 Exceptionld,XExceptionHandler Handler,void*DataPtr)使用指令缓存函数,必须在源文件中包含头文件mb_in
14、terface.h。MicroBlaze的指令缓存处理函数有:void microblaze_enable_icache(void)void microblaze_disable_icache(void)void microblaze_init_icache_range(int cache_addr,int cache_size)使用数据缓存函数,必须在源文件中包含头文件mb_interface.h。MicroBlaze的数据缓存处理函数有:(1)void microblaze_enable_dcache(void)使能Microblaze处理器的数据缓存 (2)void microblaze
15、_disable_dcache(void)禁止Microblaze处理器的数据缓存 (3)void microblaze_flush_dcache()刷新整个数据缓存,当使用回写缓存时,使用这个函数 (4)void microblaze_flush_dcache_range(unsigned int cache_addr,unsigned int cache_len)刷新指定的数据缓存的范围 (5)void microblaze_invalidate_dcache()使数据缓存无效 (6)void microblaze_flush_invalidate_range(unsigned int c
16、ache_addr,unsigned int cache_len)使指定范围的数据缓存无效 下面给出初始化指令和数据缓存的一段代码:1初始化指令Cache microblaze_invalidate_icache();microblaze_enable_icache();2初始化数据DCache microblaze_invalidate_dcache();microblaze_enable_dcache();3在程序的结尾,应该使用下面的代码对缓存进行恢复操作。#if XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK=0 microblaze_invalidate_d
17、cache();#endif microblaze_disable_dcache();/*Clean up ICache*/microblaze_invalidate_icache();microblaze_disable_icache();BSP提供了FSL接口宏,用于访问通过FSL连接的硬件加速器。FSL接口宏主要包括:(1)getfslx(val,id,flags)在Microblaze的输入FSL上,执行得到功能。指令的语义由FSL 的宏flag确定;(2)putfslx(val,id,flags)在Microblaze的输出FSL上,执行输出功能。指令的语义由FSL的宏flag确定;
18、(3)tgetfslx(val,id,flags)在Microblaze的输入FSL上,测试得到功能。指令的语义由FSL的宏flag确定;(4)tputfslx(val,id,flags)在Microblaze的输出FSL上,测试输出功能。指令的语义由FSL的宏flag确定;(5)getdfslx(val,id,flags)在Microblaze的输入FSL上,执行得到功能。指令的语义由FSL的宏flag确定;(6)putdfslx(val,id,flags)在Microblaze的输出FSL上,执行输出功能。指令的语义由FSL的宏flag确定;(7)tgetdfslx(val,id,flag
19、s)在Microblaze的输入FSL上,测试得到功能。指令的语义由FSL的宏flag确定;(8)tputdfslx(val,id,flags)在Microblaze的输出FSL上,测试输出功能。指令的语义由FSL的宏flag确定;(9)fsl_isinvalid(invalid)测试最后的FSL操作返回为有效数据;(10)fsl_iserror(error)检查最后的FSL操作设置一个错误标志;FSL的宏标志包含:FSL_DEFAULT,FSL_NONBLOCKING,FSL_EXCEPTION,FSL_CONTROL,FSL_ATOMIC,FSL_NONBLOCKING_EXCEPTION
20、,FSL_NONBL OCKING_ATOMIC,FSL_EXCEPTION_CONTROL,FSL_EXCEPTION_ATOMIC,FSL_CONTROL_ATOMIC,FSL_NONBLOCKING_EXCEPTION_CONTROL,FSL_NONBLOCKING_EXCEPTION_ATOMIC,FSL_EXCEPTION_CONTROL_ATOMIC,FSL_NONBLOCKING_EXCEPTION_CONTROL_ATOMIC BSP提供了访问MicroBlaze不同寄存器的宏,为了使用这些宏,必须在源文件中包含mb_interface.h。这些宏主要有:(1)mggpr(rn
21、):从通用寄存器rn中返回值;(2)mfmsr():从MSR寄存器中返回当前值;(3)mfesr():从异常状态寄存器ESR中返回当前值;(4)mfear():从异常地址寄存器EAR中返回当前值;(5)mffsr():从浮点状态寄存器FPS中返回当前值;(6)mtmsr(v):将值v移到msr寄存器中;(7)mtgpr(rn,v):将值v移动到通用寄存器rn中;(8)microblaze_getfpex_operand_a():返回最后缺陷浮点指令的操 作数A;(9)microblaze_getfpex_operand_b():返回最后缺陷浮点指令的操 作数B;MicroBlaze提供了可配置
22、的处理器版本寄存器PVR。PVR的内容使用pvr_t数据结构获得,该数据结构是32位的数组,数组的每个字对应PVR寄存器。PVR字的数目由配置所决定。为了使用宏,必须在源文件中包含pvr.h头文件。访问PVR的方法:1)使用microblaze_get_pvr()函数来填充PVR数据到pvr_t数据结构 中;2)在随后的步骤中,可以使用PVR访问宏得到PVR的数据;PVR访问函数为:int microblaze_get_pvr(pvr_t*pvr)文件处理的函数有:int fcnt1(int fd,int cmd,long arg)该函数通过cmd命令对文件描述符fd进行操作。由于独立的BSP
23、不提供文件系统,这个函数只用来作为完整性。Xilinx硬件抽象层包含下面:类型(xil_types);寄存器IO(xil_io);异常(xil_exception);缓存(xil_cache);断言(xil_assert);外部头文件;测试存储器(xil_testmem);测试寄存器(xil_testio);测试缓存(xil_testcache)。由于API函数封装了这些底层的硬件抽象层操作,对于程序设计来说,很少直接使用这些硬件抽象层操作,所以对该部分不进行进一步的介绍,如果需要的话,参考Xilinx的库参考手册。XilKernel核是一个小的、健壮的和模块化的核:1)允许定制,使得设计者可
24、以根据大小和功能对核进行裁减;2)在嵌入式核(kernel)内,使用POSIX(Portable Operating System Interface,可移植操作系统接口)API支持核(core)的 特征 3)支持MicroBlaze、PowerPC405和PowerPC440处理器 XilKernel的进程间通信IPC服务用来实现高层服务(比如网络,视频和音频),并且使用这些服务来运行程序。下面给出了那些影响在下一个工程中使用核的决定性因素:1)典型的嵌入式控制应用由多个任务组成,这些任务需要按照一个特定的序列或安排来执行。随着所涉及的控制任务的增加,人工组织子任务和分时享用所要求的工作变得
25、十分困难。当复杂度增加时,这样一个程序的响应能力和性能大大降低。2)分解这些任务作为单独的应用程序,并且在一个操作系统上实现这些应用程序会变得更加直观。3)一个核允许在一个抽象层上编写代码,而不是在微控制器级独立代码上编写代码。4)很多普通常规的应用程序都依赖于操作系统的服务,比如文件系统,时间管理等。5)Xilkernel是一个小的库,它提供了这些必须的服务。移植或使用通用和开放的源码库(比如图像或网络协议)也要求某些形式的OS服务。1、通过裁减功能,使其对一个系统具有高度的可扩展性 2、通过XPS在很短时间内完成核的配置和使用 3、核的健壮性:通过参数有效性检查保护系统调用,并且正确 的返
展开阅读全文