操作系统及BSP板级支持包
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Xilinx的微核结构
Xilinx的微核
用户的应用程序通过不同的方法和XMK的不同组成部 分进行接口。 除了一些交互外,库之间是独立的。比如,Xilkernel 使用BSP。BSP和Xilinx驱动构成了对底层硬件的抽象。 XMK的库和OS依赖于标准的C库组成部分。数学库 libm.a可以用来和用户的应用程序连接。
异常处理
这个功能在MicroBlaze3.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)
线程安全
标准的C库是单线程环境(非多线程)。上面的 STDIO函数和存储器管理函数都不是线程安全的。 当在多线程环境中使用C库时,必须使用互斥技术来 保护这些不安全的线程。
板级支持包
板级支持包BSP是软件模块的最底层,用来访问处理 器指定的功能。当应用程序直接访问板/处理器使用独立 的BSP,BSP在操作系统层下面。
Xilinx的微核 -Xilkernel
Xilkernel是一个简单的嵌入式处理器的核,能根据系 统进行定制。 Xilkernel有嵌入式核的那些关键的特征: 1)多任务; 2)优先级驱动的抢先调度; 3)进程间通信; 4)同步和中断处理。
Xilinx的微核 -Xilkernel
Xilkernel是一个小的,模块化的,用户定制,能用在 不同的系统配置环境。 应用程序能以不同模式,静态的和Xilkernel连接形成 单独的可执行文件。
标准的C库(lib.a)
Lib.c目录和函数有: _ansi,fastmath.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
数据缓存处理
使用数据缓存函数,必须在源文件中包含头文件 mb_interface.h。MicroBlaze的数据缓存处理函数有: • void microblaze_enable_dcache(void) • void microblaze_disable_dcache(void) • void microblaze_init_dcache_range(int cache_addr,int cache_size) 初始化指令和数据缓存的步骤为: 1)禁止缓存; 2)使缓存无效; 3)如果禁止缓存,则在有效序列开始前使能缓存;
Xilinx的微核 -LibXil MFS
LibXil MFS提供简单的存储文件系统,使得很容易通 过使用输入-输出文件来访问数据。 这个系统通过改变安装区域的源文件,很容易配置满 足工程要求。
Xilinx的微核 -LibXil Flash
LibXil Flash :提供对并行Flash的访问,这些Flash与 普通的Flash接口一致。 支持Intel和AMD的CFI (Common Flash Interface)芯片。
比如: 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处理器和PowerPC处理器C库支持标准的存 储器管理函数,比如malloc(), calloc(), free()。 通过使用堆来动态的分配存储器。堆指针从低向高增 加(运行时不能增加)。分配堆至少128字节,观察函数 返回值以确定正确的分配堆。
算术操作
对所有处理器可以使用libgcc.a库来用软件实现整数和 浮点算术运算。 当硬件不支持使用指令的算术运算原语时,编译器为 所有的处理器插入对这些例程的调用。
指令缓存处理
使用指令缓存函数,必须在源文件中包含头文件 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)
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用来将这些目录添加到库搜索路 径中。
MicroBlaze处理器BSP
当系统使用MicroBlaze处理器,并且没有使用OS时, Libgen自动在libxil.a工程库中建立独立的BSP。 MicroBlaze处理器BSP的函数类型主要有: 中断处理; 异常处理; 指令缓存处理; 数据缓存处理; FSL接口宏; FSL宏标志; pseudo-asm宏; PVR访问例程和宏; 文件处理; 错误码。
Xilinx的微核 -板级支持包BSP
BSP是单线程库。BSP提供对硬件的小的接口。向应 用程序提供所要求的最少的功能。 BSP提供的一些典型的函数包括: 1)设置中断 2)系统异常 3)配置缓存 4)其它硬件指定的功能。
Xilinx的微核 -LibXil驱动程序
LibXil是指设备驱动程序,在软件平台中被包含用来 向系统中的外设提供接口。 这些驱动伴随EDK提供,并且被Libgen配置。 后面详细介绍设备驱动的概念和在软件平台中适配的 方法。
Xilinx的C库为MicroBlaze处理器包含下面的目标文件: 1)_exception_handler.o,_interrupt_handler.o, _program_clean.o,_program_init.o 2)默认情况下提供异常和中断句柄。 libxil.a被自动包含。
输入/输出函数
Xilinx的微核
Xilinx的微核(Xilinx Microkernel,XMK)包含三个 不同的软件实体,通过它用户应用程序可以与标准C和 Math库,LibXil库,Xilkernel或独立运行的操作系统相接。
Xilinx的微核
标准C库由libc组成,该库包含了标准C的函数,比 如,stdio,stdlib,string例程。数学库是一个扩展libm 库,提供了标准的数学函数。 LibXil库由下面构成: 1)LibXil Driver-Xilinx的设备驱动程序 2)LibXil MFS-Xilinx的存储文件系统(Memory File System,MFS) 3)LibXil Flash-并行Flash编程库 4)LibXil lsf-串行Flash编程库 Xilinx的独立板级支持包(Board Support Package, BSP)和Xilkernel是XMK内提供的两个操作系统选择,能 被包含在所设计的应用软件平台中。
标准的C库(lib.a)
该库为MicroBlaze和PowerPC处理器提供了标准的C函 数。可以根据下面路径下的这些标准C函数找到头文件。 <XILINX_EDK>/gnu/<processor>/<platform>/<processorlib>/include 其中: <XILINX_EDK>为EDK的安装路径; <processor>为powerpc-eabi或microblaze; <platform>为sol,nt,lin; <processor-lib>为powerpc-eabi或microblaze-xilinx-elf;
第六章 操作系统及板级支持包
何宾 2009.10
内容概述
该章内容主要包括:Xilinx的微核;lwIP库;Vxwork 操作系统的板级支持包;Linux操作系统的板级支持包。 在Xilinx微核部分介绍了标准的C库,板级支持包, Xilkernel核,LibXil库; 在lwIP部分介绍了建立硬件系统,建立软件系统,软 件API; 在Vxworks操作系统板级支持包部分介绍了Vxworks 启动顺序,BSP的生成,Vxworks6.5 BSP,引导Vxworks, 缓存、MMU和FPU; 在Linux操作系统板级支持包部分介绍了Linux概述, BSP的建立,Linux核的配置,Linux设备参考
中断处理
使用中断处理函数,必须在源文件中包含头文件 mb_interface.h。MicroBlaze的中断管理函数有: • void microblaze_enable_interrupts(void)Leabharlann Baidu• void microblaze_disable_interrupts(void) • void microblaze_register_handle(XInterruptHandler Handler, void *DataPtr)
标准的C库(lib.a)
程序访问标准的C库函数,必须使用如下方式编译: 1)mb-gcc <C file>(对MicroBlaze处理器); 2)powerpc-eabi-gcc<C file>(对PowerPC处理器),访 问libm数学函数,指定lm选项;
Xilinx C库(libxil.a)
EDK库包含标准C函数用于I/O,比如printf和scanf。 这些函数代码太大,不适应嵌入式处理器的应用。这些函 数的原型在stdio.h。 注意:C标准I/O例程比如printf,scanf,vfprintf在默 认情况下是行缓冲的。将其变成无缓冲格式的,必须调用 setvbuf。
输入/输出函数
MicroBlaze处理器 -浮点算术运算
所有的浮点的加、减、乘、除和转换操作使用C库里 的软件函数实现。
PowerPC处理器 整数和浮点算术运算
硬件提供了整数加、减操作。因此对于PowerPC处理 器来说不需要使用软件库来实现这些操作。 PowerPC处理器通过使用标准C库来支持所有的浮点 算术。
MicroBlaze处理器 -整数算术运算
默认情况下,整数乘法通过使用库函数例程_mulsi3 实现(软件)。 如果编译器mb-gcc选择-mno-xl-soft-mul时,整数乘法 可以使用硬件实现。 整数除法和求模操作通过使用库函数例程_divsi3和 _modsi3实现(软件)。可以定制使用硬件除法器来实现 除法指令。 双精度乘法,除法和求模函数使用库函数_muldi3, _divdi3,moddi3实现。 无符号的这些操作相对于有符号的操作就是其前缀为 _u,而不是_。