[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。

属性

  1. [label:]property-name; 属性为空值,如示例代码中20,26行autorepeat;
  2. [label:]property-name=<arrays of cells>; <> 括起来的值内容是32位数据的合集,第11行。
  3. [label:]property-name=“string”;第5行;
  4. [label:]property-name=[bytestring];用[]括起来的表示字符序列,假设属性表示为 memory-addr=[0011223344],这个就等同于memory-addr=[00 11 22 33 44],5 个byte型的数组成,byte 型的数是两位16进制数组成。

标准属性

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 函数

  1. deviec_node 结构体
  2. of_find_node_by_name 函数
  3. of_find_node_by_type 函数
  4. of_find_compatible_node 函数
  5. of_find_node_by_path 函数

提取属性的 of 函数

  1. property 结构体
  2. of_find_property 函数
  3. of_property_read_u32_array 函数
  4. of_property_read_u32 函数
  5. of_property_read_string 函数

[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. 高集成和高吞吐

【文献心得】关于内核在不同芯片平台移植的相关整理相关推荐

  1. OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结

    飞凌官方提供了一键下载烧写linux的方式,相对来说比较方便,但是对于开发来说不够灵活,因此这篇文章把tftp相关的点介绍一下,整理下其中遇到的一些问题. 一键烧写本质上是启动位于SD卡中的Uboot ...

  2. 百行代码解读阿里 AloT 芯片平台无剑 100!

    作者 | 马超 责编 | 胡巍巍 出品 | CSDN(ID:CSDNnews)  今年以来我国IT厂商都在AIot的底层平台建设方面可谓是捷报频传,在操作系统方面有如像腾讯的Tiny OS.阿里的Al ...

  3. ATECC508A芯片开发笔记(十一):NXP 平台移植ATECCx08 CryptoAuthLib库(I2C)

    目录 ATECC508A芯片开发笔记(十一):NXP 平台移植x08库(I2C) 一.CryptoAuthLib 二.Nxp RT10xx平台上移植CryptoAuthLib 2.1.在官网下载最新的 ...

  4. 【ROCKCHIP瑞芯微芯片平台方案介绍】

    瑞芯微芯片平台方案介绍 RK312X RK356X RK3288 RK3308 RK3326 RK3358 RK3399 RK3588 RV1126和RV1109 欢迎加入我们 这里是对本团队做了多年 ...

  5. 【文献心得】Linux 实时化相关

    文章目录 [1]石伟民. 基于ARM9的嵌入式实时linux系统平台构建[D].中北大学,2010. [1]刘涛. 一种嵌入式实时Linux的设计与实现[D].电子科技大学,2007. [1]朱春飞. ...

  6. 阿里平头哥发布AIoT芯片平台“无剑”,可将芯片设计成本降低50%

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 阿里芯片,又有大动作.这次不是AI芯片,而是芯片平台. 世界AI大会期间,平头哥发布AIoT芯片平台,命名"无剑". ...

  7. asr1601芯片平台实现ssl加密的websocket

    首先感谢SGuniver_22,本文实现内容,是在他实现的websocket基础上,移植而来. 他的博客:https://blog.csdn.net/SGuniver_22 他的github:http ...

  8. 紫光云服务器芯片,紫光云与新华三半导体共建芯片设计云2.0 携手打造一站式云端芯片平台...

    原标题:紫光云与新华三半导体共建芯片设计云2.0 携手打造一站式云端芯片平台 2021年是芯片设计云元年,行业需求呈现井喷态势,中国云服务新势力脱颖而出,在世界舞台崭露头角,为中国集成电路行业发展插上 ...

  9. MTK芯片平台,MT6737烧录工具资料(SP_Flash_Tool_exe_Windows_v5.1712.00.000)

    MTK芯片平台,MT6737烧录工具资料分享,希望能对开发者有所帮助. 资料下载,可到我的下载资源界面下载,也可点击下载(MT6737) 另外,附送 一份MT6737的规格书资料----MT6737 ...

  10. Tengine全面支持寒武纪思元芯片平台,共同推进AI芯片加速之路

    近日,OPEN AI LAB(开放智能)面向AIoT场景推出的边缘AI计算框架Tengine与寒武纪达成深度战略合作,全面支持了寒武纪思元220的芯片平台,实现思元220可以加载使用Tengine的t ...

最新文章

  1. 从简单到高并发服务器(一)
  2. 用C语言测试程序运行时间,c语言测试程序执行时间
  3. 传统MapReduce框架
  4. 大话设计模式(三 复制VS复用)
  5. RH124 第六单元   管理物理存储
  6. 《数据库原理与应用(第3版)》——小结
  7. Spring MVC-拦截器
  8. Linux笔记-bash中解决if语句中command not found问题
  9. 《人月神话》读后感一
  10. ServletContext、ServletConfig(FilterConfig)学习笔记
  11. python中的深浅拷贝的区别
  12. ubuntu下python安装pandas和numpy等依赖库版本不兼容的问题RuntimeWarning: numpy.dtype size changed...
  13. php 赋予变量现在时间,PHP关于变量和日期处理的面试题
  14. 5G NR标准协议架构-5G协议应该怎么看?
  15. 机械制图国家标准的绘图模板_JS制图:映射
  16. 区块链开发用什么语言好?
  17. MATLAB的PID调节器
  18. ALPS语言学校(西雅图)|ALPS Language School (Seattle)
  19. eclipse vail_屏幕快照:Windows Home Server Beta“ Vail”安装过程
  20. 【TypeScript】TS与Vue

热门文章

  1. 深棕颜色html的色号,棕色rgb颜色值 有谁知道咖啡色的RGB值?
  2. mysql怎么直接显示对象信息_详解 Navicat 查看方式之对象列表
  3. python xps_python处理xps文件_从XPS文档中提取文本
  4. android获取电话通话记录,Android获取手机通话记录
  5. 数据结构之数组和列表
  6. springboot获取properties文件的配置内容(转载)
  7. android sd卡 spi,SD卡总结-SPI模式
  8. redigo批量lpush/rpush、批量zrem
  9. HDU 4568 Hunter
  10. 关于使用硬改的路由器的各种经历