HarmonyOS设备开发工程师七(HarmonyOS移植)

本文源于HarmonyOS官方教程https://developer.huawei.com/consumer/cn/training/course/introduction/C101635908637340943

如有侵权,联系helloc2333@163.com删除。

HarmonyOS移植


适用于不同场景的物联网设备可能基于各种芯片架构,而开发者期望能使用一个统一的操作系统对所有设备进行控制。

HarmonyOS 可以运行在不同体系架构的处理器和开发板上。一般情况下,操作系统的编写者通常不会一次性完成整个操作系统的代码,而是会把一部分与具
体硬件设备相关的代码作为抽象的接口保留出来,这样可以保证整个操作系统的可移植性。

为什么要移植操作系统?

移植可以有效的降低开发的适配成本。

image-20220104094939986

嵌入式软件系统的组成:Windows VS HarmonyOS

image-20220104095436427

操作系统移植步骤

  • 环境准备

    移植系统前需要进行一系列准备工作,包括下载源码、建立交叉编译环境等。

  • BootLoader移植

    引导加载程序(BootLoader)是设备上电后运行的第一个程序。在完成环境准备之后,需要对BootLoader移植。

  • 编译内核

    在完成BootLoader的移植后,需要对操作系统内核进行配置和编译,如有必要,还需要对源码做一定的修改。

  • 根文件系统制作

    制作根文件系统,并将程序、库、配置文件等文件放入根文件系统中进行调用。如有需要,用户数据和驱动程序也可放入根文件系统。

移植场景对比

image-20220104100638459


系统移植基本知识

编译环境简介:本地编译

  • 对于常见的软件开发,尤其是非嵌入式开发,基本都采用本地编译的方式。本地编译是指在当前的PC中直接编译出来程序或者库文件,这程序或库文件可以直接在当前的环境中运行。
  • 所谓的本地编译,就是在当前目标平台中完成了编译和运行,在这个过程中不需要考虑跨设备与跨平台的情况。

image-20220104101049911

交叉编译

  • 交叉编译是一个和本地编译相对应的概念。
  • 交叉编译是在一种平台上编译,编译出来的程序或者库文件放到别的平台上运行。编译的环境和运行的环境不一样,这称之为交叉
  • 交叉编译这个概念主要和嵌入式开发有关。

image-20220104101422643

为什么需要交叉编译?

  • 主要原因:嵌入式系统中的资源有限。
  • 对于需要进行交叉编译的嵌入式系统而言,由于本地各种资源十分有限,难以进行本地编译。

交叉工具链

  • 交叉工具链是为了达成交叉目的以及生成可运行的程序和库文件所使用的工具链。
  • 交叉工具链内部的执行过程和逻辑主要包含了两个方面:编译和链接

image-20220104101901448

程序编译步骤

image-20220104102020768

编译构建工具-Make

  • 一个C语言源文件从源文件到目标文件的过程叫做编译,但是一个项目中可能存在多个源文件。这就涉及到多个文件的编译顺序问题,程序构建过程就是安排文件的编译先后顺序。
  • Make是一种构建工具,它属于GNU项目。Make命令执行时,需要一个Makefile文件告诉make命令如何去编译和链接程序。在执行make命令的过程中,make会自动查找Makefile文件并执行,这就避免了开发者一步步的手动编译文件。

编译构建工具- Cmake

  • 虽然Make和Makefile简化了手动构建的过程,但是编写Makefile文件仍然有些麻烦,为了进一步简化编译构建的工作,就有了Cmake工具。
  • CMake工具可以通过CMakeLists.txt文件生成Makefile文件,CmakeList.txt的编写难度较Makefile文件的编写有显著的降低。

image-20220104102900674

第三方库移植

什么是库?

  • 库的本质是可执行代码的二进制形式,库文件可以在编译时由编译器直接链接到可执行程序中,也可以在运行时由操作系统的运行环境根据需要动态加载到内存中。
  • 一组库可以形成了一个发布包,具体发布多少个库完全由库的提供商决定。
  • 现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
  • 在 C 语言中, C 标准库是一组 C 内置函数、常量和头文件,例如 <stdio.h> , <stdlib.h> ,<math.h> 等等。这个标准库可以作为 C 程序员的参考手册。

CMake方式库移植-源码目录结构

以完成双精度进制双向转换的 double-conversion 库为例,其部分源码目录结构如下:

image-20220104103343550

CMake 方式库移植 - 移植思路

  • 移植思路:

    通过修改工具链,交叉编译该三方库,生成 HarmonyOS 平台的可执行文件,最后再通过 GN 调用 CMake 的方式添加到 HarmonyOS 工程中。

image-20220104103547166

Makefile 方式库移植 - 源码目录结构

以第三方库 XML 解析器 yxml 为例,其部分源码目录结构如下:

image-20220104105549038

Makefile 方式库移植 - 移植思路

移植思路:

Makefile 方式的库移植思路与 CMake 类似,主要的区别在于 CMake 方式通过修改 CMakeLists.txt 设置工具链,而 Makefile 方式需要自行手动修改 Makefile 文件进行工具链设置,除此之外,在将库添加至工程时创建的适配文件 BUILD.gn 和 condig.gni 与 CMake 方式有区别,其他完全一致。

image-20220104105903310

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信