分享一种快速移植OpenHarmony Linux内核的方法

这篇具有很好参考价值的文章主要介绍了分享一种快速移植OpenHarmony Linux内核的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

移植概述

本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开发者,介绍一种借助三方芯片平台自带 Linux 内核的现有能力,快速移植 OpenHarmony 到三方芯片平台的方法。

移植到三方芯片平台的整体思路

内核态层和用户态层

为了更好的解释整个内核移植,首先需要介绍一些概念:
我们可以把 OpenHarmony 简单的分为
OpenHarmony = OpenHarmony 内核态层 + OpenHarmony 用户态层

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

其中 OpenHarmony 内核层就是上图的紫色部分,可以看到,它主要由内核本身(如 Linux Kernel,LiteOS),和一些运行在内核态的一些特性组成,比如 HDF 等。

而 OpenHarmony 用户态层,在上图,就是紫色之外的部分。可以看到,由下往上看,它主要由系统服务层,框架层,应用层组成。在这儿我们将这三层整体称为“OpenHarmony 用户态层”。

为什么这么区分呢?因为我们这篇文章主要是要讨论如何快速的把 OpenHarmony 移植到三方芯片平台上。而 OpenHarmony 的用户态层,整体来说和三方芯片平台的耦合度不高,移植较为方便。

而内核态层中的内核本身以及 HDF 驱动框架等,和三方芯片平台的耦合度较高,是移植的重难点。我们先做这个区分,就是为了先把聚光灯打到我们最需要关注的 OpenHarmony 内核态层上,开始分析和解题。另外说明,本文只包含 Linux 内核的快速移植,不包含 LiteOS 的移植。

获得内核态层的两种方法

为了表述方便,我们在下文部分地方用“OH”代替“OpenHarmony”。
将 OH 内核态层继续分解
OH 内核态层 = OH Linux 内核 + OH 内核态特性(可选特性或者必选特性,如必选特性 HDF,今后的可选特性 HMDFS 等)
而 OH Linux 内核 = 标准 LTS Linux 内核 + 三方 SoC 芯片平台代码 + OH 内核态基础代码(支撑 OH 用户态层运行的最基础代码)
因此 OH 内核态层 = 标准 LTS Linux 内核 + 三方 SoC 芯片平台代码 + OH 内核态基础代码 + OH 内核态特性(如 HDF)

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

而将前两项组合,标准 LTS Linux 内核 + 三方 SoC 芯片平台代码,其实就是一个三方 Linux 内核的基础组成。从上面的推导可以看出,OpenHarmony 内核态层其实能够由两种方法得到:

方法一:OH 内核态层 = 三方 Linux 内核 + OH 内核态基础代码 + OH 内核态特性(如 HDF,今后的 HMDFS 等)
也就是直接借助三方 Linux 内核,再加上基础 OH 内核态基础代码、以及 HDF 等 OH 内核态特性。

方法二:OH 内核态层 = OH Linux 内核 + OH 内核态特性(如 HDF,今后的 HMDFS 等)
也就是直接采用 OHLinux 内核,然后再加入 OH 的其他内核态特性。

当前方法二中 OHLinux 内核支持的三方芯片平台还不够丰富。为了能够响应三方开发者快速移植 OpenHarmony 的要求,下文会着重介绍方法一,即借助三方已有的 Linux 内核,来快速移植 OpenHarmony。

借助已有 Linux 内核来移植 OpenHarmony 的流程

整个移植流程可以分为三步:

  1. 准备整体构建环境,包括将三方芯片平台的现有内核代码拷贝到 OpenHarmony 的整体编译环境下。
  2. OpenHarmony 内核态基础代码的移植。
  3. OpenHarmony 内核态必选特性(如 HDF 等)的移植。
    详细步骤在接下来的章节中介绍。

移植到三方芯片平台的步骤

下面以树莓派 3b (BCM2837) 为例,演示将 OpenHarmony 移植到树莓派的过程。

准备整体构建环境

  1. 将三方内核纳入 OpenHarmony 编译环境。
    完整编译过一遍标准 Hi3516DV300 的内核之后,clone 树莓派内核源码并复制到 manifest 输出目录下:
    export PROJ_ROOT=[OpenHarmony manifest]
    git clone https://gitee.com/xfan1024/oh-rpi3b-kernel.git
    cp -r oh-rpi3b-kernel $PROJ_ROOT/out/KERNEL_OBJ/kernel/src_tmp/linux-rpi3b
  2. 配置树莓派内核编译环境。
    # 进入树莓派kernel目录
    cd out/KERNEL_OBJ/kernel/src_tmp/linux-rpi3b
    # 配置编译环境,使用工程项目自带的clang
    export PATH=$PROJ_ROOT/prebuilts/clang/ohos/linux-x86_64/llvm/bin:$PROJ_ROOT/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/:$PATH
    export MAKE_OPTIONS="ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- CC=clang HOSTCC=clang"
    export PRODUCT_PATH=vendor/hisilicon/hispark_taurus_linux
  3. 注释掉 clang 不识别的 flag。
    PROJ_ROOT/out/KERNEL_OBJ/kernel/src_tmp/linux-rpi3b/arch/arm/Makefile 注释掉以下这一行:
    KBUILD_CFLAGS  +=-fno-omit-frame-pointer -mapcs -mno-sched-prolog

移植内核态基础代码

目前 OpenHarmony 内核态的基础代码,主要是日志服务相关。轻量化内核日志服务代码包含:

drivers/staging/hilog
drivers/staging/hievent

将以上代码,从 OpenHarmony 内核代码目录 kernel/linux/linux-4.19/drivers/staging 中,拷贝到 out/KERNEL_OBJ/kernel/src_tmp/linux-rpi3b/drivers/staging 下。
在三方内核的 drivers/staging/Kconfig 文件内增加如下代码:

source "drivers/staging/hilog/Kconfig"
source "drivers/staging/hievent/Kconfig"

在三方内核的 drivers/staging/Makefile 文件内增加如下代码:

obj-$(CONFIG_HILOG)             += hilog/
obj-$(CONFIG_HIEVENT)           += hievent/

在内核 config 项中打开对应的 CONFIG 控制宏:CONFIG_HILOG 和 CONFIG_HIEVENT。

移植内核态必选特性 HDF

  1. 打 HDF 补丁。
    在 Linux 内核打 HDF 补丁时,执行补丁 shell 脚本合入 HDF 补丁。

    1. 配置 HDF 补丁脚本的四个变量参数。
    2. 获取 patch_hdf.sh 脚本。
    3. 执行 patch_hdf.sh 脚本依次传入四个变量参数。
      patch_hdf.sh 脚本四个参数含义为:第一个入参为工程根目录路径,第二入参为内核目录路径,第三个入参为内核版本路径,第四个参数是当前设备名。
    ./patch_hdf.sh [工程根目录路径] [内核目录路径] [内核补丁路径] [设备名]

    以树莓派 3b 为示例介绍:

    # 进入树莓派kernel目录
    PROJ_ROOT/drivers/hdf_core/adapter/khdf/linux/patch_hdf.sh \
    PROJ_ROOT  # 指定工程根目录路径 \
    PROJ_ROOT/out/KERNEL_OBJ/kernel/src_tmp/linux-rpi3b  # 打补丁的内核目录路径 \
    PROJ_ROOT/kernel/linux/patches/linux-4.19 # 内核补丁路径.\
    hi3516dv300 # 设备名.
  2. 配置 config。
    提供 HDF 基本配置,如果需要其他功能,通过 menuconfig 打开对应驱动开关即可。
    HDF 补丁执行成功后,默认 HDF 开关是关闭的,打开 HDF 基本配置选项如下:

    CONFIG_DRIVERS_HDF=y
    CONFIG_HDF_SUPPORT_LEVEL=2
    CONFIG_DRIVERS_HDF_PLATFORM=y
    CONFIG_DRIVERS_HDF_PLATFORM_MIPI_DSI=y
    CONFIG_DRIVERS_HDF_PLATFORM_GPIO=y
    CONFIG_DRIVERS_HDF_PLATFORM_I2C=y
    CONFIG_DRIVERS_HDF_PLATFORM_UART=y
    CONFIG_DRIVERS_HDF_TEST=y

    或者通过 menuconfig 界面打开 HDF 相关配置,命令如下:

    # 生成 .config 配置文件
    make ${MAKE_OPTIONS} rpi3b_oh_defconfig
    # 更改HDF内核配置
    make ${MAKE_OPTIONS} menuconfig
    # [*] Device Drivers
    # [*]   HDF driver framework support --->

    配置如下(在 Device Drivers -> HDF driver framework support 目录下):

    openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

编译 Image

# 执行编译命令
make ${MAKE_OPTIONS} -j33 zImage

编译和运行 HDF 测试用例(可选)

简介
HDF(Hardware Driver Foundation)自测试用例,用于测试 HDF 框架和外设的基本功能,本文主要介绍 HDF 内核态用例测试方法。
预置条件
测试前需要在 menuconfig 里检查 HDF 测试开关 CONFIG_DRIVERS_HDF_TEST=y,代码全量编译通过。
用例编译和测试方法
通过 hdc_std 工具把用例执行文件推送到设备中,然后执行用例即可,操作步骤如下:

  1. 编译 hdf 测试用例。

  2. 用 hdc_std 工具推送测试文件到设备中。

  3. 进入设备 data/test 目录,执行测试文件即可。
    用例编译和测试详细步骤如下:

  4. 编译 hdf 测试用例。
    编译 hdf 测试用例命令和文件路径如下:

    ./build.sh --product-name hispark_taurus_standard --build-target hdf_test

    等待编译完成。

  5. 将测试文件移动到目标移植设备上(以树莓派为例)。
    方法一:使用 hdc_std 工具。

    1. 先在树莓派里新建 data/test 目录。
      mkdir -p data/test
    2. 推送依赖库和测试用例到树莓派。
      hdc file send XXX\out\{device_name}\hdf\hdf\libhdf_test_common.z.so  /system/lib
      hdc file send XXX\out\{device_name}\tests\unittest\hdf\config\hdf_adapter_uhdf_test_config  /data/test
      hdc file send XXX\out\{device_name}\tests\unittest\hdf\devmgr\DevMgrTest  /data/test
      hdc file send XXX\out\{device_name}\tests\unittest\hdf\osal\OsalTest  /data/test
      hdc file send XXX\out\{device_name}\tests\unittest\hdf\sbuf\SbufTest  /data/test

    方法二:移动到储存卡内,启动树莓派之后装载。1. 拔掉树莓派连接电脑的串口、USB 线,然后拔下数据卡。
    2. 将数据卡插入到电脑的读取口,将编译好的 zImage 和测试文件夹 test/下载到电脑,然后移动到数据卡的根目录下。zImage 文件会被替换,请提前做好备份。
    3. 最后将数据卡插回树莓派。

    # 让树莓派文件系统读取储存卡根目录
    mount -t vfat /dev/block/mmcblk0p1 /boot
    cd /boot/[测试文件目录]
    # 允许修改系统文件
    mount -o remount,rw /
    # 安装测试用库
    mv libhdf_test_common.z.so /system/lib
    mkdir /data/test
    mv * /data/test
  6. 执行测试

    1. 进入目录执行测试文件目录 data/test。
      cd /data/test
    2. 修改文件执行权限。
      chmod 777 hdf_adapter_uhdf_test_config DevMgrTest OsalTest SbufTest
    3. 开始测试。
      ./hdf_adapter_uhdf_test_config
      ./DevMgrTest
      ./OsalTest
      ./SbufTest
    4. 如果所有测试文件输出均显示 PASSED,那么 HDF 功能即安装成功。
      示例:DevMgrTest 用例成功结果显示:
      ./DevMgrTest
      Running main() from gmock_main.cc
      [==========] Running 1 test from 1 test case.
      [----------] Global test environment set-up.
      [----------] 1 test from DevMgrTest
      [ RUN      ] DevMgrTest.DriverLoaderTest_001
      [       OK ] DevMgrTest.DriverLoaderTest_001 (0 ms)
      [----------] 1 test from DevMgrTest (0 ms total)
      [----------] Global test environment tear-down
      Gtest xml output finished
      [==========] 1 test from 1 test case ran. (0 ms total)
      [  PASSED  ] 1 test.

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

  •  HarmonOS基础技能

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

  • HarmonOS就业必备技能 openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统
  •  HarmonOS多媒体技术

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

  • 鸿蒙NaPi组件进阶

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

  • HarmonOS高级技能

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

  • 初识HarmonOS内核 openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统
  • 实战就业级设备开发

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

《鸿蒙生态应用开发V2.0白皮书》

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

openharmony menuconfig,OpenHarmony,鸿蒙,linux,harmonyos,嵌入式硬件,OpenHarmony,前端,鸿蒙,鸿蒙系统文章来源地址https://www.toymoban.com/news/detail-858597.html

到了这里,关于分享一种快速移植OpenHarmony Linux内核的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (三)内核移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

    目录 一、bootloader、kernel、rootfs联系 二、内核移植 1. 内核源码获取 2. 内核配置与编译 🍍 基础配置与编译 🍍 TF卡分区 🍍 内核烧录 三、参考内容 kernel可以理解为一个 庞大的裸机程序 ,和uboot以及其他比如点灯类似的裸机程序没有本质区别,只是kernel分为 用户态和内核态

    2024年02月15日
    浏览(84)
  • i.MX6ULL移植NXP官方Linux内核imx_5.4.47_2.2.0

    系统:Ubuntu18.04 参考资料:百问网 IMX6ULL开发板(从零移植篇-预览版)-V0.1,正点原子驱动开发指南 开发板:100ask i.MX6ULL PRO 交叉编译工具链的获取就不写了 打开 .bashrc 文件。 vi ~/.bashrc 。在该文件最后面添加如下(根据自己的交叉编译工具链) (1)直接从官网下载,非常慢而

    2024年02月12日
    浏览(62)
  • C++哈希表:一种快速查找和插入的方法

    哈希表是一种非常重要的数据结构,它在各种场合中都有广泛的应用。在C++中,哈希表通常是通过 标准模板库(STL)中的unordered_map或unordered_set来实现 的。本篇文章将向读者介绍哈希表的基本概念、原理、实现方法以及优化策略。通过掌握哈希表,我们可以实现高效的查找和插

    2024年02月08日
    浏览(44)
  • 深度学习论文解读分享之diffGrad:一种卷积神经网络优化方法

    diffGrad: An Optimization Method for Convolutional Neural Networks Shiv Ram Dubey , Member, IEEE, Soumendu Chakraborty , Swalpa Kumar Roy , Student Member, IEEE, Snehasis Mukherjee, Member, IEEE, Satish Kumar Singh, Senior Member, IEEE, and Bidyut Baran Chaudhuri, Life Fellow, IEEE Adaptive moment estimation (Adam), difference of gradient, gradient descent,

    2024年01月17日
    浏览(52)
  • OpenHarmony移植OpenSSH-9.6p1

    本文主要介绍如何在OpenHarmony系统下通过ndk工具移植OpenSSH-9.6p1。 未编译过ohos-sdk的话,先执行下面的命令编译sdk: 编译好ohos-sdk之后,可以直接从编译路径下拷贝到指定路径,当然也可以直接将out目录下的ohos sdk的native路径作为NDK的路径。如果下载的public-sdk,也可以从压缩包

    2024年01月22日
    浏览(55)
  • 移植speexdsp到OpenHarmony标准系统②

    在linux上生成speexdsp的so动态链接库和.a静态链接库 make和make install后会生成speexdsp的.so动态链接库和.a静态链接库 其中build/lib目录下: linux下的so、o、lo、a、la文件 o: 编译的目标文件 a: 静态库,其实就是把若干o文件打了个包 so: 动态链接库(共享库) 动态库文件必须以lib开头

    2024年04月22日
    浏览(30)
  • OpenHarmony实战:瑞芯微RK3566移植案例(中)

    上篇文章:OpenHarmony实战:瑞芯微RK3566移植案例(上) 常见的INPUT设备有键盘、鼠标、游戏杆、Touch Screen等。Touch 设备与主机通讯采用标准 I2C 总线,触屏 IC 提供中断支持,提高了触屏数据的实时性。本项目的触摸屏器件IC 为 GT911。 驱动框架模型 INPUT驱动模型 INPUT 驱动模型核

    2024年04月23日
    浏览(48)
  • STM32F407移植OpenHarmony笔记1

    参考文档: OpenAtom OpenHarmony width=device-width,initial-scale=1.0 https://docs.openharmony.cn/pages/v3.2/zh-cn/device-dev/get-code/gettools-acquire.md/ 搭建环境 安装linux系统: Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-91-generic x86_64) 下载源代码:我选择的是V3.2.4版本 https://repo.huaweicloud.com/openharmony/os/3.2.4/code-v3.2.4-Rele

    2024年01月25日
    浏览(55)
  • 瑞芯微rk3568移植openharmony3.1(鸿蒙)

    openharmony的移植推荐使用Ubuntu18.04,需要安装的依赖库文件。 获取openharmony官方源码。 下载完成后,可以改一下调试口的波特率,因为默认的是1500000,串口工具会有乱码,或者出现无法输入的问题,修改为115200。可以直接修改脚本文件。脚本文件有规则限制,只改一下波特率

    2024年02月11日
    浏览(58)
  • 一种使用Java的快速将Web中表格转换成Excel的方法

            随着后疫情时代的到来,在过去的2022年,全国的经济情况,想必是很多学者和研究对象都非常关心的事。而这些数据在国家统计局网站上都有相应的记录。通过分析这些数据,可以从某一个角度来验证和观察当下的经济情况。         全国共计有1279个县级单

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包