RTEMS目录树

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情


RTEMS版权所有,转载请注明来源www.rtems.net,作者ray@rtems 
 第 1 节: 介绍 
 
 本章介绍了RTEMS开发环境,包括 
 
     * 
       RTEMS的目录结构, 
     * 
       GNU Make在 RTEMS 开发环境中的用法 
     * 
       示例应用 
     * 
       RTEMS特性工具 
 
 RTEMS被设计成一个可以重用的组件。像是RTEMS这样高度可重用的软件, 通常以原始码的形式典型地被分配,在分发的时候没有提供任何的软件支持工具。 RTEMS中包含了一个包括板支持包(BSP),设备驱动和支持库。RTEMS开发环境不是CASE工具,而是为了方便设计和维护而提供的工具集合。 
 
 RTEMS开发环境主要是用的是GNU的工具链。他包括编译程序,汇编程序,连接器。GNU工具链不但源代码开放,而且支持的处理器非常多,可以说没有GUN编译环境,就没有开源世界的今天。 
 
 所以,为了使用好RTEMS,必须熟悉GNU的开发环境(哈哈,地球人都知道)。RTEMS的程序模块性非常强,而且所有的代码根据功能分别存放在不同的目录中。不同硬件体系的代码放在不同的目录下,能有效的系统的消除硬件依赖,使系统的移植能力更强。 
 1.1: 硬件相关源代码 
 
 硬件相关包括处理器相关和目标硬件板BSP相关。处理器相关的代码主要是线程上下文切换和中断处理子程序。RTEMS支持的处理器类别可以在 cpukit/score/cpu目录下找到。如果需要将RTEMS移植到新的处理器上面,可以参考no_cpu目录,该目录有处理器相关代码的原型。 
 
 处理器相关又可以细分为不同的子类。例如ARM处理器就可以分为ARM7系列和ARM9等系列。这不同系列存在一些差异,移植的时候必须将这些因素考虑进去。 
 
 与硬件的源文件包括: 
 
     * 
       处理器相关的文件 
     * 
       文件板相关的文件 
     * 
       外围设备相关的文件 
     * 
       文件的相关问题 
     * 
       CPU相关的执行文件 
     * 
       CPU相关的支持文件 
     * 
       板支持包结构 
 
 RTEMS通过将系统分为多个层来提高系统的可移植性,同时也增加了系统软件的可复用性。RTEMS系统中大多数软件模块都可以在不同的硬件系统上面运行。RTEMS中,和硬件相关的代码分为下面几类: 
 
     * 
       处理器相关 
     * 
       目标板相关 
     * 
       外围设备相关 
 
 RTEMS中源代码按照功能和硬件依赖关系组织在不同目录里面,如果程序员需要为自己的硬件设备上移植RTEMS,就需要熟悉这些文件的存放规则。 
 第 2 章: 目录结构 
 
 随着系统的发展,RTEMS的目录结构在各个版本中也有了不少的变化,但是通常来说,目录设计符合下列的需求: 
 
     * 
       鼓励程序的模块化,组件化 
     * 
       将RTOS与目标硬件部分隔离,提高复用 
     * 
       允许多个RTEMS同时为不同的硬件平台产生目标代码而不产生冲突 
     * 
       生成的目标代码以及中间代码(obj文件)会根据硬件体系不同存放在不同位置,这样不同交叉编译器产生的中间代码不会弄混淆。 
 
 同时,根据不同硬件BSP存放目标文件还有一个好处,比如同一个处理器的两块电路板,一个有64kb的RAM,另一个有1Mb的RAM,那么在第一个系统中,内存的优化就很重要,需要注意字节的对齐以及在内存中的排列,而第二个系统对这些因素不必考虑得太多。在RTEMS中,可以方便的实现这样的需求。 
 
 处理器相关的代码主要是线程上下文切换和中断处理子程序。RTEMS支持的处理器类别可以在cpukit/score/cpu目录下找到。如果需要将RTEMS移植到新的处理器上面,可以参考no_cpu目录,该目录有处理器相关代码的原型。 
 
 处理器相关又可以细分为不同的子类。例如ARM处理器就可以分为ARM7系列和ARM9等系列。这不同系列存在一些差异,移植的时候必须将这些因素考虑进去。 
 
 RTEMS 源代码被组织成下面的部分: 
 
 功能性组件, 
 
 目标处理器(例如ARM系列,MPC系列), 
 
 目标处理器模型(例如ARM中的ARM7TDMI,ARM920T等), 
 
 外围设备以及目标板 
 
 下面将考察源代码的目录结构,为了方便,将目录树的根记为 
 
 ${RTEMS_ROOT} 。 
 
                       rtems- 版本 ( 如 4.6.2) 
                                                    | 
            +--------+-------+---------+---------+---------+---------+-------+------+ 
            |            |          |            |             |            |            |           |        | 
         aclocal automake c        contrib    cpukit      doc     make    scripts tools 
 
 ${RTEMS_ROOT}/aclocal/ 
 
 该目录存放了 autoconf 使用的 M4 宏。 autoconf 解释 configure.ac 文件 , 这些文件在定制、剪裁 RTEMS、为不同硬件体系产生不同目标文件这一系列过程中起着重大作用。 
 
 ${RTEMS_ROOT}/automake/ 
 
 该目录包含automake使用的脚本,他们用来创建Makefile.am。 
 
 ${RTEMS_ROOT}/c/ 
 
 该目录存放的文件是必须根据不同硬件结构剪裁的BSP,这个目录下面还有很多子目录,将在下一节讨论。 
 
 ${RTEMS_ROOT}/contrib/ 
 
 该目录存放了Cygwin和Solaris平台下的交叉编译器相关的资料和文件。 
 
 ${RTEMS_ROOT}/cpukit/ 
 
 该目录是RTEMS的库文件(例如C语言库libc.a)以及硬件无关的操作系统核心源代码。该目录将在后面详细说明。 
 
 ${RTEMS_ROOT}/doc/ 
 
 存放 TeXinfo 和 HTML 格式的文档 
 
 ${RTEMS_ROOT}/make/ 
 
 Makefile 的配置文件 , 例如 make/custom 子目录中每个 .cfg 文件都对应了一个 BSP 的配置 , 包括处理器模式、编译选项等。这些配置在BSP章节中会有说明。 
 
 ${RTEMS_ROOT}/scripts/ 
 
 该目录存放了 RPM 包的说明 , 每个 RPM 包占用一个子目录 , 包括 binutils/ 、 gcc3newlib/ 、 gdb/ 等。 
 
 ${RTEMS_ROOT}/tools/ 
 
 该目录包含 RTEMS 专用的一些工具。这些工具有目标硬件相关的,也有用来升级RTEMS源代码的。 
 5.2.1: c/目录 
 
 ${RTEMS_ROOT}/ c/ 目录从前是所有 RTEMS 代码的根目录。现在,它包含了和目标CPU以及周边硬件相关的代码,如BSP等。该目录包含下列的子目录: 
 
 ${RTEMS_ROOT}/c/src/ 
 
 该目录是和嵌入式处理器以及目标板相关的代码。他是BSP以及对应的测试码的根目录。 
 
 ${RTEMS_ROOT}/c/make/ 
 
 该目录是用来产生target.cfg文件。这些文件让各种不同的Makefile 变量,这样能方便的将RTEMS代码剪裁以适应目标处理器和BSP 。 
 5.2.1.1: c/src/目录 
 
 c/src/lib/ libbsp目录是处理器模型和BSP代码的根目录。他包含如下的子目录。 
 
 ${RTEMS_ROOT}/c/src/ada-test/ 
 
 该目录为包含了ada API的测试代码。 
 
 ${RTEMS_ROOT}/c/src/lib/ 
 
 该目录包含目录 libbsp 和 libcpu两个子目录。这两个目录分被对应了板支持包 (BSP)和处理器结构相关的源代码。 libbsp根据嵌入式处理器的种类和BSP来组织目录。libcpu则存放了不同嵌入式处理器相关的代码。 
 
 ${RTEMS_ROOT}/c/src/libchip/ 
 
 该目录存放了各种不同的外围设备芯片的驱动。包括串口、网路芯片、时钟等多种驱动。 
 
 ${RTEMS_ROOT}/c/src/libmisc/ 
 
 该目录包含了一些不容易归类的RTEMS的常用工具。例如shell,单调周期任务监视程序,/dev/null设备驱动,栈溢出检查程序, ROM监视器等等。 
 
 ${RTEMS_ROOT}/c/src/libnetworking/ 
 
 该目录包含网络代码分量。包括了RTEMS telnetd , httpd 和 ftpd 服务器,这些代码需要根据对应的BSP剪裁与配置。 
 
 ${RTEMS_ROOT}/c/src/librdbg/ 
 
 该目录包含以以太网为基础的远程调试接口。该软件一定要和处理器以及BSP配合使用。 
 
 ${RTEMS_ROOT}/c/src/librtems++/ 
 
 该目录包含 RTEMS API 的 C++ 封装。 
 
 ${RTEMS_ROOT}/c/src/make/ 
 
 不同 API, 系统组件的测试程序源代码。 
 
 ${RTEMS_ROOT}/c/src/optman/ 
 
 可选的 RTEMS API 的桩模块。该目录中所有的 API 实现都返回 E_NOTCONFIGURED 。 
 
 ${RTEMS_ROOT}/c/src/test/ 
 
 该目录为各种不同的API和支持库提供的测试程序。 
 
 ${RTEMS_ROOT}/c/src/wrapup/ 
 
 该目录负责将所有的RTEMS组件以及API捆绑成单一的RTEMS 库 librtemsbsp.a。 该库包含所有的 BSP 和处理器特性。 
 5.2.1.1.1: c/src/lib/libbsp BSP 目录 
 
 " libbsp" 包含了RTEMS为不同嵌入式处理器家族建立的目录。每个目录下为该处理器家族的中不同的处理器都建立了单独的目录。 
 
 " libbsp" 目录中是RTEMS能提供的所有的稳定BSPs。每种BSP又分成若干的子目录。 " shmdr" 子目录中是为多处理系统提供的共享内存驱动程序。此外两个目录为新的BSP设计提供了样板。" no_cpu" 提供了新处理器家族的BSP模板。此外是 “ bare ” 目录,他提供了一个最简单的BSP模板。 
 
 每种BSP一般都包含了 "clock", "console", "include", "shmsupp", "startup", 和 "timer" 这样几个目录。如下所示: 
 
                            Each BSP 
                                             | 
           +-----------+-----------+---------+-------------+----------+----------+ 
           |                |               |            |                 |              |              | 
         clock       console    include   shm          supp           startup      timer 
 5.2.1.2: c/src/tests/ Test 目录 
 
 该目录提供所有的 RTEMS 组件的测试程序 , 这些测试程序可以作为程序写作的样本。包含下面的子目录。 
 
 ${RTEMS_ROOT}/c/src/test/itrontests/ 
 
 itron API 测试程序。 
 
 ${RTEMS_ROOT}/c/src/test/libtests/ 
 
 各种 RTEMS 库的测试 
 
 ${RTEMS_ROOT}/c/src/test/mptests/ 
 
 多处理器支持测试。${RTEMS_ROOT}/c/src/测试/psxtests/ 
 
 该目录为 RTEMS POSIX 美国石油协会包含测试套件。 
 
 ${RTEMS_ROOT}/c/src/test/psxtests/ 
 
 RTEMS POSIX API测试代码 
 
 ${RTEMS_ROOT}/c/src/tests/samples/ 
 
 该目录提供了一些RTEMS的标准测试程序,一般用测试新移植好的RTEMS。 
 
 ${RTEMS_ROOT}/c/src/test/sptests/ 
 
 该目录提供RTEMS标准API的测试程序。他提供了大部分SuperCore模块的测试代码。 
 
 ${RTEMS_ROOT}/c/src/test/support/ 
 
 该目录为各种测试提供了一些支持文件。 
 
 ${RTEMS_ROOT}/c/src/test/tmitrontests/ 
 
 RTEMS ITRON API 的执行时间测试代码。 
 
 ${RTEMS_ROOT}/c/src/test/tmtests/ 
 
 RTEMS 标准 API 的执行时间测试代码。 这些测试代码提供了SuperCore 执行的时间性能指标。这些指标对于系统规划和优化将非常重要能够。 
 
 ${RTEMS_ROOT}/c/src/test/tool/ 
 
 测试使用到的工具, difftest用于比较测试结果。 
 5.2.2: CPUKit目录 
 
 cpukit/ 目录包含一组包含源的子目录。这些代码是构成RTEMS目标可执行文件以及可移植性库(例如C库)的关键源代码。 (我不知道为什么RTEMS将他的关键代码放在这个目录下面,开始的确让我很不习惯) 
 
 下面是cpukit/中各个目录的包含代码的描述 
 
 ${RTEMS_ROOT}/cpukit/aclocal/ 
 
 该目录包含了配置目标代码的并且生成Makefile文件的M4宏脚本。 
 
 ${RTEMS_ROOT}/cpukit/ada/ 
 
 Ada API 的实现代码。 
 
 ${RTEMS_ROOT}/cpukit/automake/ 
 
 该目录包含 Makefile 文件的 .am 文件 , 脚本语言使用该目录下的文件产生 Makefile 
 
 ${RTEMS_ROOT}/cpukit/include/ 
 
 RTEMS内核代码的头文件。 
 
 ${RTEMS_ROOT}/cpukit/itron/ 
 
 ITRON API的实现代码。 
 
 ${RTEMS_ROOT}/cpukit/libblock/ 
 
 使用块设备(硬盘、CD_ROM等)所需的库文件实现代码。 
 
 ${RTEMS_ROOT}/cpukit/libcsupport/ 
 
 线程安全的C语言库。同时能提供类是UNIX系统调用(例如open,chdir等)的实现。 
 
 ${RTEMS_ROOT}/cpukit/libfs/ 
 
 文件系统的实现代码,包括IMFS、miniIMFS、FAT等。 ${RTEMS_ROOT}/cpukit/libnetworking/ 
 
 BSD的TCP/IP代码的实现。 
 
 ${RTEMS_ROOT}/cpukit/librpc/ 
 
 该目录包含对 RTEMS 的 FreeBSD RPC/ XDR 源代码。 
 
 ${RTEMS_ROOT}/cpukit/posix/ 
 
 POSIX API 的的 RTEMS 实现。 
 
 ${RTEMS_ROOT}/cpukit/rtems/ 
 
 RTEMS标准API的实现。 
 
 ${RTEMS_ROOT}/cpukit/sapi/ 
 
 RTEMS系统服务实现代码。 
 
 ${RTEMS_ROOT}/cpukit/score/ 
 
 RTEMS 的 " SueperCore" 。他是RTEMS的核心和精华,所有的API(RTEMS C/C++ API、POSIX API、ITRON API等)和其他组件都是构建在score上面的。在他下面又有几个子目录,其中CPU目录包含了目标处理器相关的底层代码 
 
 ${RTEMS_ROOT}/cpukit/wrapup/ 
 
 将用户需要的库文件打包成单一的RTEMS库 librtemscpu.a。 该库包含所有的目标嵌入式处理器模块与BSP。 
 
 Sample目录与tools目录 
 5.3.1: ${RTEMS_ROOT}/c/src/tests/samples/ 目录 
 
 该目录包含了RTEMS的范例代码。 
 
 Hello World ${RTEMS_ROOT}/c/src/test/sample/ hello/ 这个就不用说了吧,不过该代码作为测试BSP的 
 
 时钟 ${RTEMS_ROOT}/ c/src/tests/samples/ticker 测试BSPs 时钟设备驱动的代码。 
 
 基本单处理器测试 ${RTEMS_ROOT}/c/src/test/sample/base_sp/ 单处理器测试代码 多处理器测试 
 
 ${RTEMS_ROOT}/c/src/test/sample/base_mp/. 测试MPCI的代码。MPCI是RTEMS多处理器处理处理代码。 
 
 ${RTEMS_ROOT}/c/src/tests/samples/cdtest/ C++的构造函数和析构函数测试代码。 浮点运算库测试 
 
 ${RTEMS_ROOT}/c/src/tests/samples/paranoia/ 可测试处理器浮点运算器以及浮点库。 最小系统测试 
 
 ${RTEMS_ROOT}/c/src/src/samples/minimum/ 包含了一个REMS最小系统的示例代码。 无限对象分配 
 
 ${RTEMS_ROOT}/c/src/tests/samples/unlimited/ 动态分配无限多个对象的示例 网络Loopback 测试 
 
 ${RTEMS_ROOT}/c/src/tests/samples/loopback/ 使用网络套接字的简单例子。 
 其他 RTEMS 工具 
 
 packhex 压缩 hex 格式文件的工具 
 
 Unhex 将 hex 格式文件变成 bin 格式 
 
 size_rtems 测试 RTEMS 系统运行是对 ROM 和 RAM 的需求。可以提供 RTEMS 中各个组件占用的系统资源 
 RTEMS专有数据结构 
 摘要 
 
    本节介绍RTEMS专用的数据结构,这些结构能帮助读者尽快对RTEMS有个全面的了解。 
 
 rtems_address 
          
 
 用于 处理地址的数据结构,相当于void * 
 
 rtems_asr 
          
 
 RTEMS异步处理例程ASR(asynchronous signal routine) 数据类型。 
 
 rtems_asr_entry 
          
 
 RTEMS异步处理程ASR的 入囗地址。 
 
 rtems_attribute 
          
 
 RTEMS 对象的属性。用在对象创建例程中 , 叙述新建对象的特性。 
 
 rtems_boolean 
          
 
 RTEMS 中的布尔值 
 
 rtems_context 
          
 
 和嵌入式处理器体系结构相关的进程上下文数据结构。包含了进程切换时需要保存的整形寄存器信息。 
 
 rtems_context_fp 
          
 
 和 rtems_context结构相似, 不同点在于包含的信息是进程切换时需要保存的浮点寄存器信息。 
 
 rtems_device_driver 
          
 
 RTEMS驱动程序例程返回值的数据结构 
 
 rtems_device_driver_entry 
          
 
 RTEMS 驱动程序例程的入囗 
 
 rtems_device_major_number 
          
 
 设备主设备号 
 
 rtems_device_minor_number 
          
 
 设备的从设备号 
 
 rtems_double 
          
 
 符合在目标硬件上的双倍精度浮点数据类型 
 
 rtems_event_set 
          
 
 外部事件的逻辑集合 , 用于事件管理器管理 RTEMS 事件 
 
 rtems_extension 
          
 
 RTEMS 用户扩展例程返回值的数据类型 
 
 rtems_fatal_extension 
          
 
 不可恢复异常错误处理例程入囗 
 
 rtems_id 
          
 
 RTEMS 对象的标示符 
 
 rtems_interrupt_frame 
          
 
 中断处理例程 ISR(Interrupt Service Routine) 使用到栈帧 ( Stack Frame) 的数据结构。对于不支持栈帧的处理器,对应的数据结构无效。 
 
 rtems_interrupt_level 
          
 
 被 rtems_interrupt_disable, rtems_interrupt_enable 和 rtems_interrupt_flash 例程使用的数据结构。 该数据类型和中处理中断的中断掩码相关 
 
 rtems_interval 
          
 
 处理时间间隔数据类型。 
 
 rtems_isr 
          
 
 RTEMS ISR 例程的返回值类型。 
 
 rtems_isr_entry 
          
 
 RTEMS ISR 例程的入囗地址 
 
 rtems_mp_packet_classes 
          
 
 枚举型数据结构,用来叙述多进程处理使用的消息 
 
 rtems_mode 
          
 
 操纵 RTEMS 任务执行模式使用到的数据类型 
 
 rtems_mpci_entry 
          
 
 RTEMS多处理器通信接口MPCI(Multiprocessor Communications Interface) 例程返回值的数据类型 
 
 rtems_mpci_get_packet_entry 
          
 
 MPCI 中消息包获取例程的入囗的地址 
 
 rtems_mpci_initialization_entry 
          
 
 MPCI 中初始化例程的入囗地址 
 
 rtems_mpci_receive_packet_entry 
          
 
 MPCI 中接收消息包例程的入口。 
 
 rtems_mpci_return_packet_entry 
          
 
 MPCI 中返回消息包例程的入囗地址 
 
 rtems_mpci_send_packet_entry 
          
 
 MPCI 中发送消息包例程的入囗地址 
 
 rtems_mpci_table 
          
 
 MPCI配置信息的数据结构 
 
 rtems_option 
          
 
 例程的运行参数,方便函数的调用者对程序的运行作控制。例如控制当错误发生的时候,函数是立刻返回还是被阻塞 
 
 rtems_packet_prefix 
          
 
 多处理器系统中传递的消息的第一个字节。通常包含了 MPCI中需要使用的例程信息 
 
 rtems_signal_set 
          
 
 信号管理器处理RTEMS信号使用的数据类型。 
 
 rtems_signed8 
          
 
 8位的有符号数 
 
 rtems_signed16 
          
 
 16位的有符号数 
 
 rtems_signed32 
          
 
 32位的有符号数 
 
 rtems_signed64 
          
 
 64位的有符号数 
 
 rtems_single 
          
 
 单精度浮点数 
 
 rtems_status_codes 
          
 
 RTEMS任务的返回数据类型 
 
 rtems_task 
          
 
 RTEMS 任务的数据类型 
 
 rtems_task_argument 
          
 
 是被传给每个 RTEMS 任务的函数中的独立变数的数据结构 
 
 rtems_task_begin_extension 
          
 
 定义任务的入口,该任务开始用户扩展句柄例程 
 
 rtems_task_create_extension 
          
 
 定义任务的入口,该任务创建用户扩展句柄例程 
 
 rtems_task_delete_extension 
          
 
 定义任务的入口,该任务销毁用户扩展句柄例程 
 
 rtems_task_entry 
          
 
 RTEMS ASR例程的入口 
 
 rtems_task_exitted_extension 
          
 
 定义任务的入口,该任务退出用户扩展句柄例程 
 
 rtems_task_priority 
          
 
 处理任务优先级的数据结构 
 
 rtems_task_restart_extension 
          
 
 定义任务的入口,该任务重新开始用户扩展句柄例程 
 
 rtems_task_start_extension 
          
 
 定义任务的入口,该任务启动用户扩展句柄例程 
 
 rtems_task_switch_extension 
          
 
 定义任务的入口,该任务开始用户扩展句柄例程的任务切换 
 
 rtems_tcb 
          
 
 RTEMS的任务控制块 
 
 rtems_time_of_day 
          
 
 在RTEMS中处理时间 
 
 rtems_timer_service_routine 
          
 
 RTEMS计时器服务例程的返回值使用的类型 
 
 rtems_timer_service_routine_entry 
          
 
 RTEMS实践服务TSR(Time Service Rountin)的地址入口。 
 
 rtems_unsigned8 
          
 
 无符号 8位整数 
 
 rtems_unsigned16 
          
 
 无符号 16位整数 
 
 rtems_unsigned32 
          
 
 无符号 32位整数 
 
 rtems_unsigned64 
          
 
 无符号 64位整数 
 
 rtems_vector_number 
          
 
 处理中断向量数目 
 
 RTEMS的初始化管理器 
          
 
 
 RTEMS的初始化管理器 
 
 作者 Ray 
 
 RTEMS版权所有,转载请注明来源www.rtems.net,作者ray@rtems 
 7.1 摘要 
 
        初始化管理器负责启动和关闭 RTEMS 。 启动RTEMS包括创建并且启动所有的配置好的初始化任务, 并且初始化RTEMS系统使用到的设备驱动程序。 在多处理器系统中,初始化管理器也设定处理器间通信层的初值。 由初始化管理器提供的指令是: 
 
 rtems_initialize_executive- 初始化 RTEMS 
 
 rtems_initialize_executive_early- 初始化 RTEMS ,但是和 rtems_initialize_executive 不同的是, 该函数并不启动 RTEMS 的多任务。 
 
 rtems_initialize_executive_late- 完成初始化而且启动 多任务 
 
 rtems_shutdown_executive- 关闭 RTEMS 
 7.2 背景知识 
 7.2.1初始化任务 
 
 初始化任务将初始化 RTEMS ,然后将处理器控制移交到用户应用程序。初始化任务和其他应用层任务不同。初始化任务定义在用户初始化任务表中,由 RTEMS 创建并且启动。由于初始化任务和其他任务一样接受 RTEMS 任务管理器的调度,所以为了保证在其它应用任务启动前初始化任务能先启动,必须分配给它一个较高的优先级。虽然系统初始化任务可以是一个,也可以是多个,并且在个数上没有上限,但是至少要有一个。 
 
 标准的初始化任务创建并且启动配置好的应用程序,也可以创建应用任务需要的对象。一般来说,对于设计良好的初始化任务代码,在初始化结束的时候,必须将自己删除,并且释放自己占用的资源。初始化任务也可以转换成普通的应用任务。在做这样的转换的时候必须更该任务的优先级。通常来说, RTEMS 并不会自动删除初始化任务。 
 7.2.2: 系统初始化任务 
 
 系统初始化任务负责初始化所有的设备驱动,在多处理器系统中,系统初始化任务还负责初始化多处理器通信接口层(MPCI)。 为保证直到所有的器件驱动器被正确初始化,其他的应用任务才会运行。 因而,该任务相对于其他任务来说有一个较高的优先级,在单处理器系统中,设备初始化之后,任务将会划除它本身。 
 
 系统初始化任务需要有充足的栈空间,否则无法初始化所有的设备驱动。在初始化多处理器系统时,需要初始化处理器配置表,该表包含一个字段,该字段允许动态增加分派给应用或 BSP 的栈空间的尺寸。 
 
 在多处理器系统中,系统初始化任务在初始化设备驱动后不删除它本身。 相反,它把它本身转变成多处理服务任务,该任务设定多处理器通信接口层,核查多处理器系统一致性, 而且处理来自远端结点所有的请求。 
 7.2.3: 空闲任务 
 
 只有当没有其他的任务准备好运行的时候,空闲任务是一个优先级最低的任务(该任务本身就是一个消耗CPU时间的无限循环)。 当其他任务就绪时,空闲任务使用处理器的权力就会被剥夺 
 7.2.4: 初始化管理器失效 
 
 出现初始化失效错误时,rtems_initialize_executive 将会调用rtems_ifatal_error_occurred 指令,常见的初始化错误包括: 
 
 1 没有被提供处理器配置表格或处理器相关的信息表格。 
 
 2 如果处理器配置表格中提供的RTEMS在RAM储存器工作空间中入口地址是空值或者没有按照四字节的格式对齐(也就是说入口地址不是4的整数倍)。 
 
 3 如果 RTEMS 系统的RAM 储存器工作空间的大小,不够设定初始化系统。 
 
 4 如果被指定的中断栈大小太小。 
 
 5 如果是多处理器系统,但是多处理器配置表格的结点数目无效(不在1和 maximum_nodes 之间)。 
 
 6 如果配置成多处理器系统,但是没有分配多处理器通信接口层。 
 
 7 如果没有配置用户初始化任务。为了正确的将控制权从系统转移到应用任务,必须至少有一个初始化任务。 
 
 8 如果用户初始化任务中有一个不能够被成功地创建或启动。 
 
 
 7.3: 操作 
 7.3.1: 初始化 RTEMS 
 
 当板级支持包(BSP)完成初始化的动作后,BSP会调用rtems_initialize_executive 指令。 rtems_initialize_executive 指令通过完成下列的行动实现系统的初始化: 
 
    1. 
       初始化RTEMS 内部变量变量; 
    2. 
       分派系统资源; 
    3. 
       创建并且开始系统初始化任务; 
    4. 
       创建并且开始空闲任务; 
    5. 
       创建并且开始用户初始化任务; 并且且 
    6. 
       开始多任务处理。 
 
 rtems_initialize_executive 指令一定要在其他所有的 RTEMS 指令之前被调用。 因为在初始化函数 rtems_initialize_executive 完成前,任何 RTEMS 系统调用的结果都是不可预知的。 在初始化时所做的动作基本上是以配置表格和处理器相关信息表格为基础。 这两个表的配置后面章节还会有详细说明。 
 
 初始化序列的最后步骤是启动多任务管理器。 当调度和分派程序启动,他们会拥有最高的优先级,准备好的任务将会被调度。在任务调度器启动后,程序的控制逻辑将不被回到BSP,除非是调用了rtems_shutdown_executive。 
 
 rtems_initialize_executive 指令提供一个概念简单的方法初始化 RTEMS 。 然而,在特定的情况,如果不能使用该机制,RTEMS还提供了一个更为灵活的方案。该方案使用rtems_initialize_executive_early 和 rtems_initialize_executive_late 指令初始化RTEMS。rtems_initialize_executive_early 指令在启动启动多任务处理之前回返。 rtems_initialize_executive_late 指令用于启动多任务。 需要注意的是在RTEMS中只能使用一种方案初始化系统,也就是说不能重复初始化。 
 
 
 7.3.2: 关闭 RTEMS 
 
 rtems_shutdown_executive 指令被结束对板的多任务处理和回返控制支持包裹的应用叫唤。 板支持包裹在 [代]码重新开始执行立刻跟随 rtems_initialize_executive 指令的启用。 
 7.3.2: 关闭 RTEMS 
 
 在应用任务结束的时候使用rtems_shutdown_executive函数结束多任务处理和并且将控制权交还给BSP。BSP将执行rtems_initialize_executive 指令调用后的后序指令。 
 7.4: 指令 
 
 初始化管理器 INITIALIZE_EXECUTIVE- 初始化 RTEMS 
 
 初始化管理器 INITIALIZE_EXECUTIVE_EARLY- 初始化 RTEMS 但是不启动多任务 
 
 INITIALIZE_EXECUTIVE_LATE- 接在INITIALIZE_EXECUTIVE_EARLY后面,完成初始化并且启动多任务管理器 
 
 初始化管理器 SHUTDOWN_EXECUTIVE- 关闭 RTEMS 
 
 本节将更为深入的介绍初始化管理器的指令使用。包括每一个初始化管理器的指令相关的相关的常量,用法和状态编码。 
 7.4.1: INITIALIZE_EXECUTIVE- 初始化 RTEMS 
 
 指令格式 : 
 
 void rtems_initialize_executive( 
 
 rtems_configuration_table *configuration_table, 
 
 rtems_cpu_table *cpu_table 
 
 ); 
 
 描述 : 
 
 当 BSP 的初始化已经完成 , 它允许 RTEMS 初始化 RTOS, 初始化信息参数包括 configuration_table 和 cpu_table 。其中configuration_table的定义如下: 
 
 typedef struct { 
 
 void *work_space_start; 
 
 rtems_unsigned32 work_space_size; 
 
 rtems_unsigned32 maximum_extensions; 
 
 rtems_unsigned32 microseconds_per_tick; 
 
 rtems_unsigned32 ticks_per_timeslice; 
 
 rtems_unsigned32 maximum_devices; 
 
 rtems_unsigned32 maximum_drivers; 
 
 rtems_unsigned32 number_of_device_drivers; 
 
 rtems_driver_address_table *Device_driver_table; 
 
 rtems_unsigned32 number_of_initial_extensions; 
 
 rtems_extensions_table *User_extension_table; 
 
 rtems_multiprocessing_table *User_multiprocessing_table; 
 
 rtems_api_configuration_table *RTEMS_api_configuration; 
 
 posix_api_configuration_table *POSIX_api_configuration; 
 
 itron_api_configuration_table *ITRON_api_configuration; 
 
 } rtems_configuration_table; 
 
 他包含了设备表用户扩展表 ( User_extension_table), 用于配置多处理器和多处理器通信层的多任务的多处理配置表 ( User_multiprocessing_table), 用户扩展表 ( User_extension_table), 此外该表的最后三个表项指向上层 API,API 的表项可以不用全部填充 , 不需要的 API 填充 NULL 就可以了。函数的第二个参数rtems_cpu_table定义了多CPU的配置参数。该指令被调用后,该指令启动多任务管理器,然后在后台运行直到调用 rtems_shutdown_executive 指令。 
 
 注意: 
 
 该指令必须是RTEMS调用的第一个指令,而且它不会返回,而是变成后台线程,直到调用 rtems_shutdown_executive 。 
 
 该指令导致系统的所有结点的配置一保持一致性。 如果一个不一致性被发现,然后一个致命的差错被产生。 
 7.4.2 INITIALIZE_EXECUTIVE_EARLY-初始化 RTEMS但不开启多任务管理器: 
 
 rtems_interrupt_level rtems_initialize_executive_early( 
 
 rtems_configuration_table*configuration_table, 
 
 rtems_cpu_table *cpu_table 
 
 ); 
 
 当BSP已经完成它的初始化,函数的参数和rtems_initialize_executive相同。该指令在完成基本的 RTEMS 初始化之后会返回。 当指令调用结束时,会返回当前的优先级,该优先级将会作为 rtems_initialize_executive_late 的优先级。 
 7.4.3 INITIALIZE_EXECUTIVE_LATE- 完成初始化并启动多任务处理 
 
 void rtems_initialize_executive_late( 
 
 rtems_interrupt_level bsp_level 
 
 ); 
 
 描述: 
 
 该指令在rtems_initialize_executive_early 指令后调用,参数bsp_level一般采用rtems_initialize_executive_early 指令返回值。反映了BSP任务的当前优先级状况。当rtems_shutdown_executive指令调用后。 
 
 注意: 
 
 rtems_initialize_executive_late必须和rtems_initialize_executive_early配对使用。该指令执行后会一直在后台运行,直到调用 rtems_shutdown_executive 。 
 
 该指令也会同步系统所有结点。如果出现不一致的状况,函数会产生异常。 
 7.4.4: SHUTDOWN_EXECUTIVE- 关闭 RTEMS 
 
 void rtems_shutdown_executive( 
 
 rtems_unsigned32 result 
 
 ); 
 
 描述: 
 

 当应用程序愿关闭 RTEMS 的系统服务并且将对CPU的控制权交还给BSP板支持包裹时,就会调用该指令。BSP将会执行rtems_initialize_executive指令的后序命令。



RTEMS目录结构介绍

一篇uboot的移植文档(转载)  一篇uboot的移植文档(转载)1     uboot的介绍及体系结构... 21.1 uboot的介绍... 21.2 uboot的体系结构... 22     uboot的运行过程分析... 32.1 启动模式介绍... 32.2 运行过程... 32.3      本开发板的地址分布(leopard2a)... 52.4      运行代码分析... 阅读详情

相关推荐

RTEMS介绍-中文

中文介绍了RTEMS,包括简介,性能,支持的处理器,系统架构,主要的几个版本合入特性,代码获取方式,系统覆盖测试,shell,任务调度策略,同步与互斥方法以及虚拟化

Rtems 入门

RTEMS是一个成熟的实时操作系统,最初于1988年由NASA Ames Research Center和On-Line Applications Research Corporation(OAR)共同开发,旨在为航天器和地面控制系统提供可靠的实时任务调度和资源管理。如今,RTEMS已经成为了一个独立的开源项目,得到了全球各地开发者的贡献和支持。

villeepeng的博客 892

易语言-目录树支持库1.3#6版(第三方)

易语言eDirTree.fne支持库中文名为易语言目录树支持库,本易语言支持库显示目录的树形结构,并返回用户选择的目录。 易语言eDirTree.fne支持库为一般支持库,需要易语言系统3.0版本的支持,需要易语言系统核心支持库3.0版本的支持,提供了1种库定义数据类型,提供了2种命令。 易语言目录树支持库为易语言第三方支持库。 操作系统需求: Windows 易语言官方论坛

RTEMS 开发环境指南

RTEMS 开发环境指南 develenv.RTEMS开发环境指南.双语.V20131224.pdf RTEMS 的develenv文档的原创翻译。 目录 1 简介 7 2 目录结构 9 2.1 c/ 目录 14 2.1.1 c/src/ 目录 15 2.1.1.1 c/src/lib/libbsp BSP目录 18 2.2 CPU工具箱目录 19 2.3 testsuites/测试套件 24 2.4 Documentation目录 26 3 示例应用程序 31

天又亮了 1957

RTEMS 开发环境建立 (Linux)

已经写了Cygwin下的RTEMS方式的建立,但是思前想后,还是把Linux的也写了吧。先对比一下cygwin和linux的开发环境的优缺点。1.cygwin 方式 –下载相关的GNU Tools的压缩包并安装; –编译速度慢,但开发界面友好。 2.纯 linux 方式 –下载相关的GNU Tools的RPM包并安装;–编译速度快,但Linux下较难找到合适的编辑工具;–可以使用wine,将source insight 运行起来。 3.虚拟机 + linux 方式 –建立虚拟机环境;–下载相关的

雪松's RTEMS 1万+

RTEMS-BSP-开发中文参考手册

RTEMS BSP 开发中文参考手册 RTEMS 版权所有,转载请注明来源www.rtems.net,作者ray@rtems 与BSP 相关的目录: CPU 相关:cpukit/score/cpu 例如 i386, MIPS, ARM(4.6.99 version),对 应目录为: cpukit/score/cpu/CPU CPU 支持文件c/src/lib/libcpu(将CPU 分

mark_wally的博客 1495

Rtems的体系结构

Rtems的体系结构如下: 系统部件包括: Rtems源代码树按照如下的分类进行组织: 功能模块 目标处理器家族 目标处理器型号 外围电路模块 目标板模块 源代码树的顶级目录结构如下: ${trems_root}/aclocal/        这个目录下的内容主要是定制的M4宏,这些宏被G

andy205214的专栏 1574

搭建RTEMS的交叉工具链-针对arm,powerpc,i386

最近在调研实时操作系统的SMP扩展时,偶尔瞅了瞅RTEMS实时操作系统,深深的被它的性能和与众不同的结构所吸引,于是下决心把RTEMS的内核研读一下。在读它的内核代码之前,按照我的习惯首先搭建RTEMS的交叉编译器O(∩_∩)O~。 备注: 关于RTMES系统参考: http://www.rtems.org/ http://www.rtems.net/index.htm

u012129372的专栏 1193

rtems 文件系统(15)-jffs2 研究(2)

接着之前的说 step6: 1:接下来调用 jffs2_build_filesystem 函数去建立文件系统,首先是设置scan flag位,进入scan.c中进行扫描,调用的函数是jffs2_scan_medium 其中有个配置是关于nand flash的CONFIG_JFFS2_FS_WRITEBUFFER,我使用的是nor,所以用不到,在网上找到解释如下 JFFS2_FS_WRI

wangbinyantai的专栏 1293

u-boot 的介绍及系统结构

u-boot 介绍 U­boot 是德国 DENX 小组的开发用于多种嵌入式 CPU 的 bootloader 程序, U­Boot 不仅仅支持嵌入式 Linux 系统的引导,当前,它还支持 NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS 嵌入式操作系统。U­Boot 除 了支持 PowerPC 系列的处理器外,还能支持 MIPS、 x86、ARM、N...

weixin_30877181的博客 208

uboot

uboot的介绍 uboot的介绍2008-08-22 16:37 uboot的介绍 1.1 uboot的介绍 Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot除了支持Powe

zjjdyb的专栏 697

uboot移植总结

1.uboot的介绍及体系结构   1.1 uboot的介绍   Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、

u014353386的博客 3144

PC上建立RTEMS开发环境

neil wang先生详细的介绍了在PC上建立RTEMS开发环境的步骤,对学习RTEMS很有帮助。

uboot介绍

1.1 uboot的介绍 Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系

1405

uboot的介绍

1.1 uboot的介绍 Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的

xiaoaide01的专栏 904

1uboot移植要点[原创☆☆]

----- 一:我们先来了解下实际内存: nand、nor、ram。 所以从CPU是从那部分启动的呢? 答:要看主控芯片的boot如何设置(正如分的启动方式和下载方式一样)。 uboot:sd卡→iRAM(DDR3) 作用简述: 他的作用就是硬件→OS;相当于OS和硬件的一个桥梁 Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小...

488

操作系统简介

操作系统是计算机系统的核心软件,负责管理硬件资源、提供用户界面和应用程序运行环境。主要功能包括进程管理、内存管理、文件系统管理、设备管理和安全管理。常见操作系统分为桌面型(如Windows、macOS)、服务器型(如Linux)、移动型(如Android、iOS)和嵌入式系统(如FreeRTOS)。关键概念涵盖进程/线程、虚拟内存、文件系统和调度算法等。现代操作系统发展趋势包括云计算支持、物联网优化和AI集成。掌握操作系统原理对计算机系统开发和性能优化至关重要,建议通过实践命令操作、多线程编程和系统监控工具

m0_57545130的博客 1153

uboot移植文档

  1     uboot的介绍及体系结构... 21.1 uboot的介绍... 21.2 uboot的体系结构... 22     uboot的运行过程分析... 32.1 启动模式介绍... 32.2 运行过程... 32.3      本开发板的地址分布(leopard2a)... 52.4      运行代码分析... 52.4.1 sta

袁裕飞的专栏 1万+

UBOOT介绍

1 uboot的介绍 Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的

ascend的专栏 588
上一篇: Rtems的体系结构
下一篇: 将VirtualBox(vdi)的虚拟硬盘格式转换为VMWare (vmdk) 格式
andy205214
博客等级 码龄20年 35粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值