[1]张中前.基于STM32单片机的uC/OS-Ⅱ操作系统移植[J].机电元件,2020,40(06):57-61.
所谓移植,就是一个实时操作系统能够在某个微处理器平台上或微控制器平台上运行。
[1]王浩天,汲伟明.基于SOPC的华为鸿蒙LiteOS操作系统移植[J].科技经济导刊,2021,29(12):19-21.
相较于直接操作底层硬件,嵌入式实时操作系统能够更合理、更有效地利用系统资源,其在方案制定和实现阶段有着低成本,短开发周期的特点。
SOPC(System on Programmable Chip,可编程片上系统),即用可编程逻辑技术将整个系统集成到一块芯片上。SPOC 通常是指 FPGA 的带 1 个或多个软核或者硬核微处理器以及一些外围设备的片上系统。目前主流的嵌入式软核处理器有:Nios Ⅱ处理器和 MicroBlaze 处理器以及ARM公司提供的软核(如Cortex-M3)。
[1]赵娜靖,佟志勇,李超然,李勇,杨自恒.基于设备树平台下Exynos4412嵌入式Linux系统移植[J].黑龙江大学工程学报,2020,11(04):75-80.
设备树功能模块能够精炼重构内核代码框架,实现内核启动过程的优化透明,将内核和硬件资源描述相对独立,有利于规范化的硬件描述,精简驱动代码,极大简便了内核的移植以及调试。设备树的引入有利于底层硬件规范化描述,使代码不再冗余;内核镜像能支持多种平台,即只需要更换设备树文件便可以实现不同主板之间的无差异支持。
设备树包含DTC、DTS 和 DTB。
- DTS:dts 文件是对设备树的描述,放置在内核的/arch/arm/boot/dts 目录下。一个*.dts 文件对应一个 ARM 的 machine。dts 文件描述了目标板的硬件资源。
- DTC:DTC 为编译工具,它将*.dts 编译成*.dtb 文件。
- DTB:二进制文件,bootloader 在引导内核时,会预先读取*.dtb 文件到内存,进而由内核解析。
- DTSI:由于同一个 SOC 可能有多个不同的电路板,每个电路板拥有一个*.dts ,这些*.dts 会存在许多共通的部分,为了减少代码的冗余,设备树将这些共同部分凝炼保存在*.dtsi文件中,供不同的*.dts 共同使用。
设备树的作用:1. 平台(板级)识别,让内核识别当前使用的是哪个开发板,识别方式是 root 节点下的 compatible 字段;2. 内核启动时启动参数的配置(bootargs 的配置、ramdisk 的起时和结束地址);3. 设备信息集合,集合了各种设备控制器。
嵌入式系统移植需要搭建硬件和软件交叉开发环境、移植引导加载程序、移植内核、设备树、根文件系统、项目需要的移植和开发相关的设备驱动程序移植。
额外补充:
普通节点:
DTS 文件中,设备用节点来表示,格式为:
[label:]node-name[@unit-address]{[properties definitions]
[child nodes]
};
- node-name:设备节点名称,根节点用 / 表示。
- unit-address:一般指代设备地址或寄存器首地址。
- label:设备别称,用于便捷访问节点。如一个名称slcr@f8000000的节点,正常要访问的话,需要用名称slcr@f8000000去访问,如果给这个节点加上标签 slcr1:slcr@f8000000,访问节点只需要使用&slcr1即可。
- {} 的是节点的内容,节点内容有两类,[properties definitions]是节点属性,[chile nodes]是挂在在这个设备节点上的子节点。
特殊节点 —— aliases
aliases{ethernet0 = "&gem0";
serial0 = "&uart1";
};
之后便可以使用 &gem 来访问节点 ethernet。
属性
标准属性
compatible 属性也叫兼容性,它的值是字符串列表,是设备和驱动关联的关键,在驱动代码中定义一个 OF 匹配表和 compatible 属性对应。如 17 行,节点 gpio-keys 的 compatible=“gpio-keys”,那么在对应的驱动代码中,就会有以下定义来与之对应:
static const struct of_device_id gpiokeys_ids[] = {{.compatible = "gpio-keys",},
{/*sentinel*/}
};
struct of_device_id 是 OF 匹配表的数据类型。当驱动程序 OF 匹配表中的 compatible 值与设备树节点中的 compatible 相对应时,这个节点就会使用这个驱动程序。
根节点中的 compatible 属性表示这个板子兼容哪些平台,一般有两个值,前者表示板子的型号,后者表示使用的芯片。
model 属性
model 属性的值也是字符串,一般用来表示板子的名称,与根节点中的 compatible 属性类似。
#address-cells、#size-cells 和 reg 属性
- #address-cells 属性表示当前节点子节点的 reg 属性中,使用多少个 u32 整数来描述地址 address。
- #size-cells 属性表示当前节点子节点的 reg 属性中,使用多少个 u32 整数来描述大小 length。
- reg 属性一般用于描述某个外设的寄存器地址范围信息,格式 reg=<address1 length1 address2 length2 address3 length3 …>。
- 父节点的#address-cells 属性即指代 reg 属性中 address 的大小,#size-cells 即指代 reg 属性中 length 的大小。
子节点 ax-son 的 reg 属性有 6 个 u32 的数据,父节点 ax-parent 中 #address-cells 等于 2,因此子节点 ax-son 的 reg 属性的值中表示 address 的有两个 u32 的数(0x00000001、0x00000002),这两个数据都是 address 的值,#size-cells等于1,length1的值仅有一个u32的数据(0x00000003),最后三个数是address2和length2的值。
device_type 属性
这个属性只能用于 cpu 节点或者 memory 节点,在 cpu 节点中 device_type=“cpu”,在memory节点中,device_type=“memory”。
phandle属性
该属性的取值必须是唯一的,他的作用与 label 标签类似,用来引用节点。
ax-node-1{phandle=<1>;
interrupt-controller;
}
ax-node-2{
interrupt-parent = <1>;
}
在文件系统中查看设备树
cd /proc/device-tree
进入对应的节点中,能查看到节点的各个属性。cd memory/
修改设备树
我们在修改设备树时,需要遵循标准,可以在内核源码目录 /Documentation/devicetree/bindings 中查看说明和指导。
of 函数
Linux 内核提供了 of 函数来获取设备树中的信息。原型定义在 include/linux/of.h 中。
查找结点的 of 函数
提取属性的 of 函数
[1]刘长勇,王宜怀,彭涛,孙亚军,程宏玉.实时操作系统mbedOS的移植方法[J].计算机系统应用,2020,29(05):117-122.
MbedOS 是 ARM 公司于 2014 年开始推出的一款面向只能终端与物联网节点的实时操作系统,主要用于对相应时间有较高实时性要求的嵌入式系统。在深入分析 mbedOS 的基本功能、调度机制、延时函数机制、任务间通信机制等基础上,以可移植的mbedOS工程框架为基础,分析移植的共性问题,给出具体的移植方法。
本文在深入剖析 mbedOS 的基本功能和实时性要求上,根据嵌入式软件工程的基本思想,以可扩充、可移植的 mbedOS 工程框架为基础,分析了移植的共性问题和注意事项,给出了具体的移植方法,解决了 mbedOS 在不同的内核、MCU、开发环境等上的移植关键技术问题,为 mbedOS 的应用研究提供了基础,为 mbedOS 的移植提供了一条简洁、有效的路径。
无操作系统工程框架 SD-NOS 和可移植的 SD-mbedOS 工程框架的构建。1. 根据无操作系统软件最小系统的含义,建立包括说明文档、内核相关文件、微控制器相关文件、用户板构件、软件构件、中断服务程序和无操作系统主程序等嵌入式系统工程最基本要素的无操作系统工程框架 SD-NOS。2. 提出 RTOS 软件最小系统的含义,将任务管理、调度管理、内存管理、中断管理、时间管理以及同步与通信等 RTOS 最基本功能要素,以构件的形式添加到无操作系统软件最小系统上,构成能至少实现对两个任务进行调度的工程框架。3. 按照“分门别类、各有归处”的原则,对工程框架的文件夹和共性文件进行归纳分类,以编号的形式建立相应的文件夹存放源程序和头文件。
本文涉及到的 MCU 虽然内核不相同、所采用的开发环境也不一样,但都属于 ARM Cortex-M 处理器范畴,都遵循微控制器接口标准(CMSIS),当在不同 MCU 上进行 mbedOS 移植时,必须分析开发环境、编译器和内核等方面的设置和使用问题。
mbedOS 的移植方法。分析 mbedOS 代码结构,根据应用开发的实际从中抽取相关文件加入到工程中,然后在工程中编译,修改相关的错误。步骤:1. 构建无操作系统工程框架;2. 复制 mbedOS 文件;3. 设置内核与 MCU 相关文件;4. 设置工程属性;5. 与应用开发相关的内容设置;6. 编译工程。
mbedOS 移植后的测试。本测试工程涉及到 RTOS 的任务调度、时间滴答、延时函数、事件、消息队列等基本要素。
[1]王兆滨,韩鹏程.MSP432的RT-Thread操作系统移植[J].单片机与嵌入式系统应用,2021,21(05):39-42.
RT-Thread 是由中国公司开发的开源实时操作系统,易剪裁、支持各类标准接口、支持各种 MCU 架构,并且还具有 AT 命令、TCP/IP 协议栈、图形用户界面等多种功能组件。
RT-Thread 系统移植过程:裁剪 RT-Thread 源代码、修改配置文件、修改系统时钟、创建任务等工作。
[1]刘睿洋.ARM平台下Linux嵌入式系统的移植[J].电子技术与软件工程,2020,{4}(03):40-41.
ARM 的编址上,内存与I/O设备是同时进行的,指令系统得到优化,指令的灵活度比较高,也提高了系统运行效率。ARM 将存储器使用寄存器代替,系统的运行速度得到提升。在编址的时候,将大端格式和小端格式结合,灵活的组织形式使得操作更加方便。
[1]戈孜荣. 面向ARM架构的HPC系统性能评测及应用移植优化[D].兰州大学,2020.
ARM 共规划设计了三类处理器:A 架构,主要针对复杂的计算应用程序领域,比如移动和企业等高性能市场;R 架构,主要针对实时性要求较高的嵌入式市场,比如医疗设备、车辆转向等信号处理和制动等;M 架构,主要应用于对能效、功耗和尺寸有所要求的场合,比如小型传感器,智能穿戴和智能家居的通信模块等。
采用哈佛体系结构的 ARM 处理器具有两个明显的特点:第一,将数据和指令独立存储;第二,拥有独立的两条总线,分别作为 CPU 与存储器之间的通信路径。采用冯诺依曼体系结构的 x86 CPU,其处理器包括存储器、控制器、运算器等,其中数据和指令混合存储。
ARM 架构处理器特点:1. 低成本和高性能;2. 体积小、低功耗和高效能;3. 多核心和多内存通道;4. 高集成和高吞吐