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