4

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

 1 year ago
source link: https://www.51cto.com/article/745925.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
644d28e70ba1fa72dbd5809ea3f0ff182079e1.png

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

​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​


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK