【教学课件】第八章Xilinx操作系统及库.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《【教学课件】第八章Xilinx操作系统及库.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第八章Xilinx操作系统及库.ppt(145页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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的微核(Xilinx Microkernel,
2、XMK)包含三个不同的软件实体,通过它用户应用程序可以与标准C和Math库,LibXil库,Xilkernel或独立运行的操作系统相接。标准C库由newlib和libc组成,该库包含了标准C的函数,例如,stdio,stdlib,string例程。数学库是newlib数学库的扩展,提供了标准的数学函数。Xilinx的微核 LibXil库由下面构成:1)LibXil Driver-Xilinx的设备驱动程序;2)LibXil MFS-Xilinx的存储文件系统(Memory File System,MFS);3)LibXil Flash-并行Flash编程库;4)LibXil lsf-串行Fla
3、sh编程库;Xilinx提供独立板级支持包(Board Support Package,BSP,后来Xilinx称为Standard平台)和Xilkernel。Xilinx的微核结构图图8.1 XMK结构结构用户应用程序用户应用程序XilkernelXilFlashXil MFSXil lsf独立独立BSPXilinx驱动驱动C,Math和和GCC库库Xilinx的微核 用户的应用程序通过不同的方法和XMK的不同组成部分进行接口。除了一些交互外,库之间是独立的。比如,Xilkernel使用BSP。BSP和Xilinx驱动构成了对底层硬件的抽象。XMK的库和OS依赖于标准的C库组成部分。数学库l
4、ibm.a可以用来和用户的应用程序连接。Xilinx的微核-板级支持包BSP BSP是单线程库。BSP提供对硬件的小的接口。向应用程序提供所要求的最少的功能。BSP提供的一些典型的函数包括:(1)设置中断 (2)系统异常 (3)配置缓存 (4)其它硬件指定的功能。Xilinx的微核-LibXil驱动程序 LibXil是指设备驱动程序,在软件平台中被包含用来向系统中的外设提供接口。这些驱动伴随EDK提供,并且被Libgen配置。后面详细介绍设备驱动的概念和在软件平台中适配的方法。Xilinx的微核-Xilkernel Xilkernel是一个简单的嵌入式处理器的核,能根据系统进行定制。Xilke
5、rnel有嵌入式核的那些关键的特征:(1)多任务;(2)优先级驱动的抢先调度;(3)进程间通信;(4)同步和中断处理。Xilinx的微核-Xilkernel Xilkernel是一个小的,模块化的,用户定制,能用在不同的系统配置环境。应用程序能以不同模式,静态的和Xilkernel连接形成单独的可执行文件。Xilinx的微核-LibXil MFS LibXil MFS提供简单的存储文件系统,使得很容易通过使用输入-输出文件来访问数据。这个系统通过改变安装区域的源文件,很容易配置满足工程要求。Xilinx的微核-LibXil Flash LibXil Flash:提供对并行Flash的访问,这些
6、Flash与普通的Flash接口一致。支持Intel和AMD的CFI(Common Flash Interface)芯片。Xilinx的微核-LibXil lsf LibXil lsf是一个系统内Flash库。支持Xilinx系统内Flash和外部的串行Flash(Atmel的AT45XXXD,Intel的S33和ST的M25PXX)。该库使得高层软件能和串行Flash通信。标准C库 EDK库和设备驱动提供标准C库函数和访问外设的函数。EDK库由Libgen根据MSS文件为每个工程自动配置。这些库和include文件保存在当前工程lib和include目录下。mb-gcc的选项-l和-L用来将
7、这些目录添加到库搜索路径中。标准的C库(lib.a)该库为MicroBlaze和PowerPC处理器提供了标准的C函数。可以根据下面路径下的这些标准C函数找到头文件。/gnu/include 其中:为EDK的安装路径;为powerpc-eabi或microblaze;为sol,nt,lin;为powerpc-eabi或microblaze-xilinx-elf;标准的C库(lib.a)Lib.c目录和函数有:_ansi,fastmath.h,machine/,reent.h,stdlib.h,utime.h,_syslist.h,fcnt1.h,malloc.h,regdef.h,string
8、.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标准的C库(lib.a)程序访问标准的C库函数,必须使用如下方式编译:1)mb-gcc(对MicroBlaze处理器);2)powerpc-eabi-gcc(对PowerP
9、C处理器),访问libm数学函数,指定lm选项;Xilinx C库(libxil.a)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。这些函数代码太大,不适应嵌入式处理器的应用。这些函数的原型在stdio.h。注意:C标准I/O例程比如printf,scanf,vfprintf在默认情
10、况下是行缓冲的。将其变成无缓冲格式的,必须调用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函数类似,但代码 更小,不支持浮点数)存储器管理函数 MicroBlaze处理器和
11、PowerPC处理器C库支持标准的存储器管理函数,比如malloc(),calloc(),free()。通过使用堆来动态的分配存储器。堆指针从低向高增加(运行时不能增加)。分配堆至少128字节,观察函数返回值以确定正确的分配堆。算术操作 对所有处理器可以使用libgcc.a库来用软件实现整数和浮点算术运算。当硬件不支持使用指令的算术运算原语时,编译器为所有的处理器插入对这些例程的调用。MicroBlaze处理器-整数算术运算 默认情况下,整数乘法通过使用库函数例程_mulsi3实现(软件)。如果编译器mb-gcc选择-mno-xl-soft-mul时,整数乘法可以使用硬件实现。整数除法和求模操
12、作通过使用库函数例程_divsi3和_modsi3实现(软件)。可以定制使用硬件除法器来实现除法指令。双精度乘法,除法和求模函数使用库函数_muldi3,_divdi3,moddi3实现。无符号的这些操作相对于有符号的操作就是其前缀为_u,而不是_。MicroBlaze处理器-浮点算术运算 所有的浮点的加、减、乘、除和转换操作使用C库里的软件函数实现。板级支持包 板级支持包BSP是软件模块的最底层,用来访问处理器指定的功能。当应用程序直接访问板/处理器使用独立的BSP,BSP在操作系统层下面。MicroBlaze处理器BSP 当系统使用MicroBlaze处理器,并且没有使用OS时,Libge
13、n自动在libxil.a工程库中建立独立的BSP。MicroBlaze处理器BSP的函数类型主要有:中断处理;异常处理;指令缓存处理;数据缓存处理;FSL接口宏;FSL宏标志;pseudo-asm宏;PVR访问例程和宏;文件处理;错误码。中断处理 使用中断处理函数,必须在源文件中包含头文件 mb_interface.h。MicroBlaze的中断管理函数有:void microblaze_enable_interrupts(void)void microblaze_disable_interrupts(void)void microblaze_register_handle(XInterrup
14、tHandler Handler,void *DataPtr)异常处理 这个功能在MicroBlaze3.0以前不可用。使用异常处理函数,必须在源文件中包含头文件mb_interface.h。当在MHS中正确的配置了硬件异常处理,这些函数才能正常运行。MicroBlaze的异常处理函数有:void microblaze_disable_exceptions(void)void microblaze_enable_exceptions(void)void microblaze_register_exception_handle(Xuint8 Exceptionld,XExceptionHandl
15、er Handler,void*DataPtr)指令缓存处理 使用指令缓存函数,必须在源文件中包含头文件mb_interface.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 micro
16、blaze_enable_dcache(void)使能Microblaze处理器的数据缓存 (2)void microblaze_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_dc
17、ache()使数据缓存无效 (6)void microblaze_flush_invalidate_range(unsigned int cache_addr,unsigned int cache_len)使指定范围的数据缓存无效 下面给出初始化指令和数据缓存的一段代码:1初始化指令Cache microblaze_invalidate_icache();microblaze_enable_icache();数据缓存处理 2初始化数据DCache microblaze_invalidate_dcache();microblaze_enable_dcache();3在程序的结尾,应该使用下面的代
18、码对缓存进行恢复操作。#if XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK=0 microblaze_invalidate_dcache();#endif microblaze_disable_dcache();/*Clean up ICache*/microblaze_invalidate_icache();microblaze_disable_icache();FSL接口宏 BSP提供了FSL接口宏,用于访问通过FSL连接的硬件加速器。FSL接口宏主要包括:(1)getfslx(val,id,flags)在Microblaze的输入FSL上,执行得到功能。指令的
19、语义由FSL 的宏flag确定;(2)putfslx(val,id,flags)在Microblaze的输出FSL上,执行输出功能。指令的语义由FSL的宏flag确定;(3)tgetfslx(val,id,flags)在Microblaze的输入FSL上,测试得到功能。指令的语义由FSL的宏flag确定;(4)tputfslx(val,id,flags)在Microblaze的输出FSL上,测试输出功能。指令的语义由FSL的宏flag确定;FSL接口宏 (5)getdfslx(val,id,flags)在Microblaze的输入FSL上,执行得到功能。指令的语义由FSL的宏flag确定;(6
20、)putdfslx(val,id,flags)在Microblaze的输出FSL上,执行输出功能。指令的语义由FSL的宏flag确定;(7)tgetdfslx(val,id,flags)在Microblaze的输入FSL上,测试得到功能。指令的语义由FSL的宏flag确定;(8)tputdfslx(val,id,flags)在Microblaze的输出FSL上,测试输出功能。指令的语义由FSL的宏flag确定;(9)fsl_isinvalid(invalid)测试最后的FSL操作返回为有效数据;(10)fsl_iserror(error)检查最后的FSL操作设置一个错误标志;FSL宏标志 FS
21、L的宏标志包含:FSL_DEFAULT,FSL_NONBLOCKING,FSL_EXCEPTION,FSL_CONTROL,FSL_ATOMIC,FSL_NONBLOCKING_EXCEPTION,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_EXC
22、EPTION_CONTROL_ATOMICpseudo-asm宏 BSP提供了访问MicroBlaze不同寄存器的宏,为了使用这些宏,必须在源文件中包含mb_interface.h。这些宏主要有:(1)mggpr(rn):从通用寄存器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)microb
23、laze_getfpex_operand_a():返回最后缺陷浮点指令的操 作数A;(9)microblaze_getfpex_operand_b():返回最后缺陷浮点指令的操 作数B;PVR访问例程和宏 MicroBlaze提供了可配置的处理器版本寄存器PVR。PVR的内容使用pvr_t数据结构获得,该数据结构是32位的数组,数组的每个字对应PVR寄存器。PVR字的数目由配置所决定。为了使用宏,必须在源文件中包含pvr.h头文件。访问PVR的方法:1)使用microblaze_get_pvr()函数来填充PVR数据到pvr_t数据结构 中;2)在随后的步骤中,可以使用PVR访问宏得到PVR的
24、数据;PVR访问函数为:int microblaze_get_pvr(pvr_t*pvr)文件处理 文件处理的函数有:int fcnt1(int fd,int cmd,long arg)该函数通过cmd命令对文件描述符fd进行操作。由于独立的BSP不提供文件系统,这个函数只用来作为完整性。Xilinx硬件抽象层 Xilinx硬件抽象层包含下面:类型(xil_types);寄存器IO(xil_io);异常(xil_exception);缓存(xil_cache);断言(xil_assert);外部头文件;测试存储器(xil_testmem);测试寄存器(xil_testio);测试缓存(xil_
25、testcache)。由于API函数封装了这些底层的硬件抽象层操作,对于程序设计来说,很少直接使用这些硬件抽象层操作,所以对该部分不进行进一步的介绍,如果需要的话,参考Xilinx的库参考手册。Xilkernel核 XilKernel核是一个小的、健壮的和模块化的核:1)允许定制,使得设计者可以根据大小和功能对核进行裁减;2)在嵌入式核(kernel)内,使用POSIX(Portable Operating System Interface,可移植操作系统接口)API支持核(core)的 特征 3)支持MicroBlaze、PowerPC405和PowerPC440处理器 XilKernel的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第八 Xilinx 操作系统
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内