更多开源信息请访问:开源基础软件社区https://ost.51cto.com1.OH编译框架适配特别说明:我从OH3.2beta4移植了很多设备,输入子系统开始崩溃。我还没有找到具体原因。我移植的时候,OH3.2beta5还没出来。所以小米6首先移植了树莓派移植时比较顺利的OH3.2beta3版本。勇于尝试的同学可以使用最新的OH3.2beta5版本。修改编译框架需要GN相关知识。同时,社区也有丰富的讲解鸿蒙编译框架的文章。有问题可以先查看社区文章学习。OH编译框架适配新设备时,在3.2版本的前提下,需要新增3个文件夹。下面是我适配小米6的目录/device/board/xiaomi/sagit/device/soc/qualcomm//vendor/xiaomi/sagit的基本配置思路是参考官方开发板,copyhihope的rk3568,换成自己的。比如小米6的代号是sagit,需要把rk3568换成sagit。下面是一个简单的例子。在详细的移植方法之前,我发过一篇移植适配的文章。您可以先阅读它。其他高手也发过。编译框架的移植适配路线类似。在此不再赘述。文章中的文章代码为beta1,查看代码仓库请切换到beta3分支。修改配置文件:config.json修改GN编译文件:各级目录下的x.gn、x.gni、x.buildconfig.json示例:.build文件示例:.gn文件示例:自定义部分不能做首先,先完成编译所需的文件,修改替换必要的部分。hihope--->xiaomirk3568--->sagit(soc目录下的rk3568--->msm8998)rockchip--->qualcomm修改完成后,执行编译。./build.sh--product-namesagit--ccache1。修改的时候,会出现遗漏或者错误的地方。如果您没有经验,可能需要很长时间。新手需要注意。成功的标志是编译完成,显示buildsuccessful。2.OH编译框架的定制(1)vendor部分的定制和修改。OH编译的起点从vendor下的config.json开始。我们先修改这个配置文件。首先,关闭加密相关的两个选项,降低移植难度。ril蜂窝网络相关,xiaomi6没有驱动开启,去掉,添加图形配置,覆盖继承自rich.json的配置,配置关闭gpu渲染。ab分区不适合启动,设置为false。config.json可以配置子系统中的所有组件,但是组件列表会很长,而且针对不同的设备配置会有很多重复的配置,所以大部分重复的组件都添加到rich.json文件中。源码在productdefine/common/inherit下,方便开发者继承引用。如果开发者需要自定义某个组件的属性,只需要在产品的config中重新声明即可,这里不再解释。(2)板子部分自定义修改在板子里,我删除了bootanimation和updater,自定义了内核,增加了frimware和test。之所以删除bootanimation,是因为这是厂家基于OH动画生成工具生成的动画。我不需要自定义开机画面所以删除了bootanimation,updater也是一样的。我不需要更新分区,所以我也没有配置删除它。我还自定义了内核的编译方式,因为OH官方的编译方式是从板子仓库转到kernel/linux/build,调用里面的编译脚本,以官方OH内核+soc厂商补丁+config的形式编译,我移植的是第三方内核,所以官方的编译方式不适用,需要自己自定义编译脚本。添加frimware的目的是给ramdisk添加驱动固件,测试是我自己找的一些测试用例,辅助移植。自定义内核编译方式官方编译方式可以概括为:将内核源码复制到out/KERNEL_OBJ/kernel/src_tmp目录下。标有hdf.patch(使内核支持hdf驱动框架)。标记soc.patch(使内核支持相应的芯片平台)。Copyconfig(将芯片平台对应的内核配置复制到out下的内核目录下)。编译内核,设备树。我参考了官方的构建方式,精简了不必要的判断,自定义了自己的编译方式,总结为:将我自定义的内核源码复制到out/KERNEL_OBJ/kernel/src_tmp目录下。标有hdf.patch(使内核支持hdf驱动框架)。复制config(修改后复制到我板子仓库下的config)。编译内核,设备树。我用的内核源码是pMOS的msm8998的主线代码:高通骁龙835主线/LinuxGitLab根据pMOS移植教程找到了xiaomi6的内核编译配置,可以看出是用Linux6.0版本。将代码克隆到内核目录:gitclonehttps://gitlab.com/msm8998-mainline/linux.git-bmainline/6.0linux-sagit1。修改一些自定义自己编译内核的信息,完整代码仓库参考树莓派移植板。自定义ramdisk,将上一篇文章解压出来的固件放到源码目录下。新建一个BUILD.gn,为每个文件写一个配置。四个文件在写完配置后放到一个组里。对应上层目录的BUILD.gn。自定义分区配置根据我们在上一篇文章中获取的分区信息,修改分区配置。另外,rk3568的数据分区采用的是f2fs格式,而我们用的是ext4格式,所以还是用老格式。可以参考fstab.A311D的配置。自定义测试目录是我自己添加的辅助移植测试的基本功能示例。出自csdn【何小龙】的drm系列文章,用于学习drm,测试显示驱动。如果你有兴趣,你可以去看看。小龙的文章,不知道怎么加入OH编译框架的可以去我的开源树莓派板子仓库参考:rpi4/test·diemit/device_board_raspberrypi-码云-开源中国(gitee.com)(3)soc部分的自定义修改soc目录的目的是适配显示器、GPU、WIFI等各种硬件,这里我只自定义显示器,目标不要太大,使用cpu渲染适配显示器显示和开机。显示源码是OH官方的例子,源码在这里。直接复制到qualcomm/msm8998/hardware下,重命名为display。修改drm_display.cpp文件,修改drm驱动名称为[msm]。新手可能对如何查找驱动程序名称感到困惑。可以进入内核源码目录下的driver/gpu/drm/对应的gpu,找到xxxdrv.c的文件,找到drm_driver结构体,找到name属性。树莓派的gpu是vc4。高通的是msm。修改drm_allocator.cpp文件,注释掉海思的私有函数,我们不需要,顺便删除hisilicon_drm.h和hisilicon_drm.h文件的引用。添加display_gfx.c文件不需要在内部实现。这部分适配2D图形加速,先不适配。修改BUILD.gn文件修改的基本原则是去掉def,include到自己的目录下。display_device需要根据树莓派移植经验进行部分修改适配。添加display_gfx动态库编译配置。显示部分的移植可以参考我之前树莓派的移植教程。源代码也是开源的。这里只作部分解释。完整代码请到代码仓库查看OH编译框架适配说明。执行编译命令,确保可以编译成功!了解更多开源信息,请访问:开源基础软件社区https://ost.51cto.com
