OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(一)

ops/2024/10/18 2:57:46/

往期知识点记录:

  • 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
  • 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
  • 持续更新中……

移植须知

本文详细介绍如何将OpenHarmony小型系统的linux和LiteOS-A内核移植到新的开发板上,要求读者具有一定的嵌入式系统开发经验。建议先查看 入门指导 ,以了解OpenHarmony软件架构、目录结构、内核子系统和驱动子系统相关知识。当前小型系统已适配的开发板如下表所示:

表1 OpenHarmony小型系统已适配的开发板

开发板内核archROMRAM文件系统Flash 类型
hispark_taurusLiteOS-A和linux-4.19ARM cortex-a78G1GBVFAT、EXT4eMMC4.5
hispark_ariesLiteOS-AARM cortex-a716M512MJFFS2SPI NOR

表1中的开发板可作为待移植开发板的参考,当前LiteOS-A和linux-4.19支持的arch、ROM占用、支持的文件系统和支持的Flash类型如下表所示:

表2 OpenHarmony小型系统内核移植信息表

内核支持的archROM文件系统Flash类型
LiteOS-AARMv7> 2MVFAT、JFFS2、YAFFS2SPI NOR、NAND、EMMC
linux-4.19ARM, ARM64、 MIPS、 X86等> 5MVFAT、JFFS2、YAFFS、EXT/2/3/4、NFS等等NOR、NAND、EMMC等

编译构建

编译环境搭建

首先请搭建OpenHarmony基础环境,相关操作请参考 快速入门环境搭建章节 。用户态和LiteOS-A的内核态编译均使用llvm编译器编译,安装方法在搭建基础环境中已提供。若选择移植linux内核,请执行如下命令安装gcc-arm-linux-gnueabi交叉编译工具链,用于编译linux内核态镜像:

sudo apt-get install gcc-arm-linux-gnueabi

编译构建系统介绍

编译构建流程、编译脚本编写、目录规则、独立编译单个组件、独立编译芯片解决方案等介绍请见 编译构建子系统介绍。

新建芯片解决方案

了解编译框架和搭建完编译环境后,请参考如下步骤新建芯片解决方案:

  1. 新建目录

芯片解决方案的目录规则为:device/{芯片解决方案厂商}/{开发板}。以海思的hispark_taurus开发板为例,在代码根目录执行如下命令建立目录:

    mkdir -p device/hisilicon/hispark_taurus
<textarea id="copy1722420153718" style="color: inherit; font: inherit; position: absolute; top: -9999px; left: -9999px; z-index: -9999;"></textarea>
    device                                      └── company                         # 芯片解决方案厂商└── board                       # 开发板名称├── BUILD.gn                # 编译脚本├── hals                    # OS南向接口适配├── linux                   # 可选,linux内核版本│   └── config.gni          # linux版本编译配置└── liteos_a                # 可选,liteos内核版本└── config.gni          # liteos_a版本编译配置

以hispark_taurus移植linux内核为例,目录树应该如下:

    device                  └── hisilicon             └── hispark_taurus          ├── BUILD.gn    ├── hals        ├── ......      └── linux    └── config.gni  

目录树建立后开发板相关的源码放到hispark_taurus目录下。

  1. 配置开发板编译选项

步骤1中的config.gni可配置开发板相关的编译选项,编译构建框架将会遵照该配置文件中的参数编译所有用户态OS组件。其中关键的字段说明如下:

    kernel_type:            开发板使用的内核类型,例如:“liteos_a”, “liteos_m”, “linux”。kernel_version:         开发板使用的内核版本,例如:“4.19”。board_cpu:              开发板CPU类型,例如:“cortex-a7”, “riscv32”。board_arch:             开发板芯片arch, 例如: “armv7-a”, “rv32imac”。board_toolchain:        开发板自定义的编译工具链名称,例如:“gcc-arm-none-eabi”。若为空,则使用默认为ohos-clang。board_toolchain_prefix:编译工具链前缀,例如:“gcc-arm-none-eabi”。board_toolchain_type:  编译工具链类型,目前支持gcc和clang。例如:“gcc” ,“clang”。board_cflags:          开发板配置的c文件编译选项。board_cxx_flags:       开发板配置的cpp文件编译选项。board_ld_flags:        开发板配置的链接选项。

还以海思的hispark_taurus开发板为例,对应的device/hisilicon/hispark_taurus/config.gni内容如下:

    # Board CPU type, e.g. "cortex-a7", "riscv32".board_cpu = "cortex-a7"# Toolchain name used for system compiling.# E.g. gcc-arm-none-eabi, arm-linux-harmonyeabi-gcc, ohos-clang,  riscv32-unknown-elf.# Note: The default toolchain is "ohos-clang". It's not mandatory if you use the default toochain.board_toolchain = "mips-linux-gnu-gcc"# The toolchain path installed, it's not mandatory if you have added toolchain path to your ~/.bashrc.board_toolchain_path = rebase_path("//prebuilts/gcc/linux-x86/arm/arm-linux-ohoseabi-gcc/bin",root_build_dir)# Compiler prefix.board_toolchain_prefix = "arm-linux-ohoseabi-"# Compiler type, "gcc" or "clang".board_toolchain_type = "gcc"# Board related common compile flags.board_cflags = []board_cxx_flags = []board_ld_flags = []# Board related headfiles search path.board_include_dirs = []board_include_dirs += [ rebase_path("//prebuilts/gcc/linux-x86/arm/arm-linux-ohoseabi-gcc/target/usr/include",root_build_dir) ]# Board adapter dir for OHOS components.board_adapter_dir = ""# Sysroot path.board_configed_sysroot = ""# Board storage type, it used for file system generation.storage_type = "emmc"
  1. 编写开发板编译脚本

步骤1中的BUILD.gn为新增的开发板的编译入口,主要用于编译开发板相关的代码,主要为设备侧驱动、设备侧接口适配(媒体,图形等)和开发板的SDK等等。

海思的hispark_taurus开发板的device/hisilicon/hispark_taurus/BUILD.gn可写成:

    # group名称建议与开发板名称一致group("hispark_taurus") {   deps = [ "//kernel/linux/patches:linux_kernel" ] # 拉起内核编译deps += [...... # 开发板其他编译单元]}
  1. 编译调试

在开发板目录下执行hb sethb build即可启动芯片解决方案的编译,编译框架会以开发板下的BUILD.gn为入口启动编译。

最后

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

在这里插入图片描述

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

鸿蒙开发面试真题(含参考答案):

在这里插入图片描述

OpenHarmony_183">OpenHarmony源码解析》:

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片
在这里插入图片描述


http://www.ppmy.cn/ops/122493.html

相关文章

透明物体的投射和接收阴影

1、让透明度测试Shader投射阴影 &#xff08;1&#xff09;同样我们使用FallBack的形式投射阴影&#xff0c;但是需要注意的是&#xff0c;FallBack的内容为&#xff1a;Transparent / Cutout / VertexLit&#xff0c;该默认Shader中会把裁剪后的物体深度信息写入到 阴影映射纹…

view deign 和 vue2 合并单元格的方法

1.vue版本和view design 版本 {"vue": "^2.6.11","view-design": "^4.7.0", }2.Data中定义数据 spanArr: [], // 某一列下需要合并的行数 pos: 0// 索引// 注意点&#xff1a; 在获取列表前&#xff0c;需要重置 this.spanArr [] 注…

Greiner 经典力学(多体系统和哈密顿力学) 第六章 学习笔记

Greiner 经典力学 第六章 学习笔记 6.1 Linear Momentum of the Many-Body System 一个多体系统有N个质点组成&#xff0c;第 v v v 个质点的受力为&#xff1a; F v ∑ f v λ p ˙ v \mathbf F_v\sum \mathbf f_{v \lambda} \dot{\mathbf p}_v Fv​∑fvλ​p˙​v​ 对…

【CSS】position

position: static 静态定位&#xff08;默认&#xff09; position:relative 相对定位 参考物&#xff1a;元素的初始位置 特点&#xff1a;不影响元素本身特性&#xff0c;元素不脱离文档流&#xff0c;相对于原位置进行偏移 position:absolute 绝对定位 参考物&#xff1a;…

王者农药更新版

GPIO简介 STM32开发板有5组GPIO引脚&#xff0c;分别是GPIOA,GPIOB,GPIOC,GPIOD,GPIOE&#xff0c;每组GPIO有16个引脚。 每个引脚都有4个位来配置其端口&#xff0c;可以配置出不同的输入\输出模式。 1、普通推挽输出&#xff08;GPIO_Mode_Out_PP&#xff09;: 使用场合&…

《Linux从小白到高手》理论篇:Linux的系统环境管理

List item 值此国庆佳节&#xff0c;深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。本篇详细深入介绍Linux的系统环境管理。 环境变量 linux系统下&#xff0c;如果你下载并安装了应用程序&#xff0c;很有可能在键入它的名称时出现“command not found”的提示…

Linux 性能调优技巧

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…

【漏洞复现】JeecgBoot 积木报表 queryFieldBySql sql注入漏洞

》》》产品描述《《《 积木报表&#xff0c;是一款免费的企业级Web报表工具&#xff0c;像搭建积木一样在线设计报表!功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等! 》》》漏洞描述《《《 JeecgBoot 积木报表 queryFieldBySq| 接口存在一个 SQL 注入漏洞&…