赞
踩
本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开发者,介绍一种借助三方芯片平台自带 Linux 内核的现有能力,快速移植 OpenHarmony 到三方芯片平台的方法。
为了更好的解释整个内核移植,首先需要介绍一些概念:
我们可以把 OpenHarmony 简单的分为
OpenHarmony = OpenHarmony 内核态层 + 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)
而将前两项组合,标准 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。
整个移植流程可以分为三步:
下面以树莓派 3b (BCM2837) 为例,演示将 OpenHarmony 移植到树莓派的过程。
- 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
- # 进入树莓派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
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 补丁。
在 Linux 内核打 HDF 补丁时,执行补丁 shell 脚本合入 HDF 补丁。
./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 # 设备名.
配置 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 目录下):
- # 执行编译命令
- make ${MAKE_OPTIONS} -j33 zImage
简介
HDF(Hardware Driver Foundation)自测试用例,用于测试 HDF 框架和外设的基本功能,本文主要介绍 HDF 内核态用例测试方法。
预置条件
测试前需要在 menuconfig 里检查 HDF 测试开关 CONFIG_DRIVERS_HDF_TEST=y,代码全量编译通过。
用例编译和测试方法
通过 hdc_std 工具把用例执行文件推送到设备中,然后执行用例即可,操作步骤如下:
编译 hdf 测试用例。
用 hdc_std 工具推送测试文件到设备中。
进入设备 data/test 目录,执行测试文件即可。
用例编译和测试详细步骤如下:
编译 hdf 测试用例。
编译 hdf 测试用例命令和文件路径如下:
./build.sh --product-name hispark_taurus_standard --build-target hdf_test
等待编译完成。
将测试文件移动到目标移植设备上(以树莓派为例)。
方法一:使用 hdc_std 工具。
mkdir -p data/test
- 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
执行测试
cd /data/test
chmod 777 hdf_adapter_uhdf_test_config DevMgrTest OsalTest SbufTest
- ./hdf_adapter_uhdf_test_config
- ./DevMgrTest
- ./OsalTest
- ./SbufTest
- ./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学习资料
HarmonOS基础技能
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
OpenHarmony北向、南向开发环境搭建
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。