花了三个月,从零开始搭建产品,终于在展讯平台上适配了 OH 3.2.2, 是基于 Android 13/Kernel 5.4 的版本做适配。前期当然是亮屏,显示和 GPU 适配最费事,还有 hdc 调试功能,不然 hilog 都抓不到,还搞啥,虽然 Kernel 有 USB 转串的特性。

这里简单韶韶有哪些事情,先聊聊 Android 13:首先是动态分区,OH 就不支持。对于 A/B 分区 OH 是支持的,还有个 vbmeta,如何适配比较合适?另外,我们用的是 Kernel 5.4,不是官方的 5.10。还有 GKI,一堆 ko,Android 专门为此写了个 modprobe,OH 压根就不支持这个命令,只支持 insmod, 而在线 sh 几乎没法调。

对于刚接触 OH 的同学(比如我),要熟悉它的方方面面,比如如何编译,如何写编译脚本,如何抓log,反正 Android 那一套基本都要会,不然怎么调试,让你整个模块,你都不知道从哪入手。好在 OH 和 Android 多少还是有些相似的,所以不会有那种完全陌生的赶脚。但是,我只想说一句,任何东西都是说起来容易!

适配的重点除了 modem 侧的东东(我不懂,我也不想懂,除非。。。),那就是显示了,需要 debug drm driver 和 OH render_service。

GPU 我们是 mali-g57, 是一种新架构,5.4 内核不支持,官方的 5.10 也不支持,自带的 mesa3d 库也不支持。理论上 mesa3d 编译出来应该就能用,可我们偏偏遇到了bug,我想说 mesa3d 真的不好调, 一堆 so 和中间文件,谁调谁知道,和 Kernel 不是一个风格。

相对困难一点的我觉得就是 HDI gfx 图形加速适配了,这玩意要下点功夫。

最后,吐槽下 OH 那些提交日志,和 Linux 内核比起来,都不能入眼,不知道是不是有意的,这都给新平台适配带来一些麻烦,当然能力强的人除外!