#星光计划2.0# linux内核增加HDF驱动子系统 原创 精华
【本文正在参与51CTO HarmonyOS技术社区创作者激励计划-星光计划2.0】
@[TOC]目录
前言
HDF驱动子系统是OpenHarmony重要的特色功能之一,其主要的功能是实现驱动程序在多内核多平台的物联网环境,实现一次驱动开发,多端部署。之前移植OHOS3.0使用了传统的linux驱动,比较遗憾,今天尝试将HDF驱动子系统加入编译框架。开始前先了解几个名词。
HCS(HDF Configuration Source)是 HDF 驱动框架的配置描述源码,JSON存储。
HC-GEN(HDF Configuration Generator)是 HCS 配置转换工具,可以将 HDF 配置文件HCS转换为二进制HCB
HCB(HDF Configuration Binary)二进制文件,驱动可使用 HDF 框架提供的配置解析接口获取配置。
内核打补丁
如何在内核加入HDF驱动,linux内核下主要实现是下面两个目录:
drivers\adapter\khdf\linux 和 drivers\framework
这两个目录是通过链接的方式加入到内核编译的,流程如下
kernel\linux\build\kernel.mk:75
可以参考3516的HDF补丁:kernel\linux\patches\linux-5.10\hi3516dv300_patch\hdf.patch
内核配置
只是打上补丁还不行,还得在内核的编译配置文件中加入HDF选项。最开始的做法就是参考3516的配置选择,但是发现有些配置会导致编译失败。测试发现下面的配置是可以编译成功的。
[*] Enable HDF linux test 是需要设置的,如果没有设置CONFIG_DRIVERS_HDF_TEST,目录结构就出问题了,会报这样的错误。
下面3个选项要关闭,不然会报下面的错误。
[ ] Enable HDF platform sdio driver
[ ] Enable HDF platform emmc driver
[ ] Enable HDF wifi
编译过程
为了方便测试可以单独进行内核编译,比如我的编译命令是这样的。
可以分析下HDF这部分的编译过程。
linux-5.10\drivers\hdf\Makefile,hdf.patch会添加这个Makefile,将khdf文件夹加入编译。
linux-5.10\drivers\hdf\khdf\Makefile
drivers\adapter\khdf\linux\Makefile:会调用 obj-(PRODUCT_PATH)/hdf_config/$(SUB_DIR)/hdf_test/ 这是OHOS3.0默认的HCS文件存放路径。官方的注释也说明了,所以将设备对应的*.hcs存放到 vendor\raspberrypi\RPI4B\hdf_config\khdf 文件夹,参考 3516 的 vendor\hisilicon\Hi3516DV300\hdf_config\khdf\hdf.hcs 就可了。
参考 3516 的 vendor\hisilicon\Hi3516DV300\hdf_config\khdf\Makefile
其中:PRODUCT_PATH环境变量的来源:kernel/linux/build/kernel_module_build.sh:42:export PRODUCT_PATH=$4
查看结果
编译完成后,可以上传内核镜像到开发板,来查看HDF驱动框架是否启动成功。
加入HDF前
加入HDF后
基本算是启动成功了,接下来考虑打算用HDF的方式添加一下设备。来验证HDF驱动框架是否运转正常。
期待后续验证