OpenHarmony富设备移植指南(三)—OH编译框架适配与定制

系统 OpenHarmony
小米6先以树莓派移植时比较顺利的OH3.2 beta3版本进行移植,勇于尝试的同学可以基于最新的OH3.2 beta5版本。

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

1、OH编译框架适配

特别说明:

OH3.2 beta4我移植过多款设备,输入子系统会开机崩溃,还没找到具体原因,移植的时候OH3.2 beta5还没出来了,所以小米6先以树莓派移植时比较顺利的OH3.2 beta3版本进行移植,勇于尝试的同学可以基于最新的OH3.2 beta5版本。

修改编译框架需要GN相关的知识,同时社区也有丰富的文章讲解鸿蒙的编译框架,有疑问时可以先查看社区文章进行学习。

OH编译框架适配新设备时,在3.2版本的前提下,需要新增3个文件夹,以下为我适配小米6的目录

/device/board/xiaomi/sagit
/device/soc/qualcomm/
/vendor/xiaomi/sagit

基本配置思路是参考官方开发板,复制hihope的rk3568,替换成自己的,比如小米6的代号是sagit,需要把rk3568替换成sagit。以下进行简单举例,详细移植方法之前有发过移植适配的文章,可以先看,别的大神也都发过,编译框架的移植适配套路都差不多,在此不再重复讲解,文章中的代码是beta1的,查看代码仓时请切换到beta3分支。

修改配置文件:config.json

修改GN编译文件:各级目录下的x.gn,x.gni,x.build

config.json举例:

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

.build文件举例:

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

.gn文件文件举例:

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

定制部分可以先不做,先把编译需要的文件补充完整,并修改替换掉必要的部分。

hihope ---> xiaomi
rk3568 ---> sagit(soc目录下是rk3568 ---> msm8998)
rockchip ---> qualcomm

修改完成之后执行编译。

./build.sh --product-name sagit --ccache1.

修改时会不断有修改漏的或者错的地方,没有经验的话可能会花比较长的时间,新手需要注意,成功的标志是编译完成并显示build successful。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

2、OH编译框架定制

(1)vendor部分的定制修改

OH编译的起点是从vendor下的config.json开始的,我们首先进行这个配置文件的修改,首先加密相关的这两个选项关掉,降低移植难度。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

ril蜂窝网络相关,xiaomi6没有驱动进行使能,去掉,新增graphic配置,覆盖掉rich.json继承过来的配置,配置关闭gpu渲染。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

ab分区启动不适配,设置成false。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

config.json可以在subsystems内配置完所有组件,但是那样组件列表会很长,不同的设备配置会有大量重复的配置,所以大部分重复的组件都添加到了rich.json这个文件中,源码在productdefine/common/inherit下,方便开发者继承引用,如果开发者需要定制某项组件的属性,只要像我一样在产品的config.json中再声明一遍即可覆盖,其他文件没有特别需要定制修改的地方,这里不再做讲解。

(2)board部分的定制修改

在board中,我删掉了bootanimation,updater,定制了kernel,增加了frimware,test。

删掉bootanimation是因为这个是厂商根据OH动画生成工具生成的动画,我不需要定制开机画面所以去掉了bootanimation,updater也是一样,我不需要更新分区,所以不需要配置也删掉了。

我也定制了kernel的编译方式,因为OH官方的编译方式是从board仓中统一转到kernel/linux/build下,调用里面的编译脚本,采用官方OH内核+soc厂商patch+config的形式进行编译,我是采用第三方内核的方式进行移植,所以不适用官方的编译方式,需要自己定制编译脚本。

增加frimware是为了在ramdisk中添加驱动固件,test是自己找的一些测试例子,用来辅助移植。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

定制kernel编译方式

官方的编译方式可以概括为:

  1. 复制kernel源码到out/KERNEL_OBJ/kernel/src_tmp目录下。
  2. 打上hdf.patch(使内核支持hdf驱动框架)。
  3. 打上soc.patch(使内核支持对应的芯片平台)。
  4. 复制config(复制对应芯片平台的内核配置到out下的kernel目录)。
  5. 编译内核,设备树。

我是参考了官方的build方式,精简不用的判断,定制了自己的编译方式,概括为:

  1. 复制我定制的kernel源码到out/KERNEL_OBJ/kernel/src_tmp目录下。
  2. 打上hdf.patch(使内核支持hdf驱动框架)。
  3. 复制config(修改复制为放置在我board仓下的config)。
  4. 编译内核,设备树。

内核源码我是采用了pmOS的msm8998的主线代码:

​Qualcomm Snapdragon 835 Mainline / Linux · GitLab​

根据pmOS移植教程我找到了xiaomi6的内核编译配置,可以看到是采用Linux 6.0版本。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

克隆代码到kernel目录下:

git clone https://gitlab.com/msm8998-mainline/linux.git -b mainline/6.0 
linux-sagit1.

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

修改定制自己内核编译的一些信息,完整代码参考树莓派移植board仓。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

定制ramdisk

把上一篇解包得到的固件放到源码目录中。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

新建BUILD.gn,每个文件都写一个配置。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

四个文件写完配置之后放到一个分组里。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

对应到上层目录的BUILD.gn。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

定制分区配置

根据上一篇我们获取到的分区信息,修改分区配置,另外rk3568的data分区采用f2fs格式,我们采用ext4格式,所以和采用的是旧的格式,可以参考fstab.A311D的配置。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

定制test

这个目录下是我自己添加的辅助移植测试显示基本功能的例子,来源自csdn【何小龙】的drm系列文章,用于学习drm和测试显示屏驱动,大家感兴趣的话可以去看看何小龙的文章,不懂如何添加到OH编译框架的话可以去我开源的树莓派board仓参考:

​​rpi4/test · Diemit/device_board_raspberrypi - 码云 - 开源中国 (​gitee.com​​)​

(3)soc部分的定制修改

soc目录是为了适配各种硬件的比如显示,GPU,WIFI等待,这里我只定制了display,目标不要太大,使用cpu渲染适配display就可以显示开机了。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

display源码是采用OH官方的示例,源代码在。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

直接复制到qualcomm/msm8998/hardware下并改名成display。

修改drm_display.cpp文件

修改drm驱动名称为【msm】

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

驱动名新手可能怎么找可能会比较懵,可以进入内核源码目录下的driver/gpu/drm/对应的gpu,找到有xxxdrv.c的文件,找到drm_driver结构体,找到name属性。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

树莓派的gpu是vc4。


OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

高通的是msm。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

修改drm_allocator.cpp文件

注释掉海思的私有函数,我们不需要,顺便删掉hisilicon_drm.h的引用和hisilicon_drm.h文件。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

添加display_gfx.c文件

内部不用实现,这部分是2d图形加速适配的,先不适配。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

修改BUILD.gn文件

修改基本原则是把def去掉,include改为自己的目录。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

display_device需要部分修改适配,根据树莓派移植经验。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

添加display_gfx的动态库编译配置。

OpenHarmony富设备移植指南(3)OH编译框架适配与定制-开源基础软件社区

display这部分的移植都可以参照我之前移植树莓派的教程,源码也开源的,这里只是部分讲解,完整代码请去代码仓查看

至此OH编译框架适配说明完毕,执行编译命令,确保能够编译成功!

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

责任编辑:jianghua 来源: 51CTO 开源基础软件社区
相关推荐

2023-02-08 15:46:50

设备移植第三方内核适配

2023-04-06 09:10:13

设备移植鸿蒙

2023-03-06 16:11:00

设备移植开源GPU驱动

2023-03-10 09:47:45

OpenGL渲染设备移植

2023-02-06 16:21:48

2023-02-28 15:40:16

鸿蒙CPU渲染

2023-03-23 16:02:07

树莓派4GPU调试

2023-02-14 17:06:31

设备移植打包刷机

2023-02-07 15:43:13

三方库适配鸿蒙

2023-05-16 14:49:25

鸿蒙内核移植

2023-05-05 16:05:26

设备内核移植鸿蒙

2022-04-18 10:47:55

UI框架鸿蒙操作系统

2022-03-17 15:55:19

播放数字音频解码鸿蒙

2022-05-11 15:08:52

驱动开发系统移植

2021-12-02 10:05:01

鸿蒙HarmonyOS应用

2023-06-12 15:43:44

鸿蒙智能家居开发

2022-09-13 16:10:15

鸿蒙操作系统

2022-10-11 15:04:28

NAPI开发鸿蒙

2023-05-08 15:59:27

UI自动化脚本鸿蒙

2022-04-15 14:31:02

鸿蒙操作系统
点赞
收藏

51CTO技术栈公众号