0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙富设备移植指南:编译框架适配

OpenHarmony技术社区 来源:OST开源开发者 2023-02-08 09:15 次阅读

上一篇我们成功将 OpenHarmony 移植到小米 6 手机上,今天给大家讲解 OpenHarmony 编译部分。

OH 编译框架适配

特别说明:OH 3.2 beta4 我移植过多款设备,输入子系统会开机崩溃,还没找到具体原因。

移植的时候 OH 3.2 beta5 还没出来了,所以小米 6 先以树莓派移植时比较顺利的 OH 3.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 分支。

https://ost.51cto.com/posts/14280

修改配置文件:config.json;修改 GN 编译文件:各级目录下的 x.gn,x.gni,x.build。

config.json 举例:

0238dd6c-a735-11ed-bfe3-dac502259ad0.png

.build 文件举例:

024a3030-a735-11ed-bfe3-dac502259ad0.png

.gn 文件文件举例:

0259f628-a735-11ed-bfe3-dac502259ad0.png

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

hihope--->xiaomi

rk3568--->sagit(soc目录下是rk3568--->msm8998)

rockchip--->qualcomm
修改完成之后执行编译:
./build.sh--product-namesagit--ccache

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

02684e30-a735-11ed-bfe3-dac502259ad0.png

OH编译框架定制

①vendor 部分的定制修改

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

027a9806-a735-11ed-bfe3-dac502259ad0.png

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

028f7762-a735-11ed-bfe3-dac502259ad0.png

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

02b14b76-a735-11ed-bfe3-dac502259ad0.png

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

②board 部分的定制修改

在 board 中,我删掉了 bootanimation,updater,定制了 kernel,增加了 frimware,test。 删掉 bootanimation 是因为这个是厂商根据 OH 动画生成工具生成的动画,我不需要定制开机画面所以去掉了 bootanimation,updater 也是一样,我不需要更新分区,所以不需要配置也删掉了。 我也定制了 kernel 的编译方式,因为 OH 官方的编译方式是从 board 仓中统一转到 kernel/linux/build 下,调用里面的编译脚本,采用官方 OH 内核+soc 厂商 patch+config 的形式进行编译。 我是采用第三方内核的方式进行移植,所以不适用官方的编译方式,需要自己定制编译脚本。

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

02c3a6b8-a735-11ed-bfe3-dac502259ad0.png

定制 kernel 编译方式,官方的编译方式可以概括为:

复制 kernel 源码到 out/KERNEL_OBJ/kernel/src_tmp 目录下

打上 hdf.patch(使内核支持 hdf 驱动框架)

打上 soc.patch(使内核支持对应的芯片平台)

复制 config(复制对应芯片平台的内核配置到 out 下的 kernel 目录)

编译内核,设备树

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

复制我定制的 kernel 源码到 out/KERNEL_OBJ/kernel/src_tmp 目录下

打上 hdf.patch(使内核支持 hdf 驱动框架)

复制 config(修改复制为放置在我 board 仓下的 config)

编译内核,设备树

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

QualcommSnapdragon835Mainline/Linux·GitLab
https://gitlab.com/msm8998-mainline/linux
根据 pmOS 移植教程我找到了 xiaomi6 的内核编译配置,可以看到是采用 Linux 6.0 版本。

02e4f3b8-a735-11ed-bfe3-dac502259ad0.png

克隆代码到 kernel 目录下:

gitclonehttps://gitlab.com/msm8998-mainline/linux.git-bmainline/6.0linux-sagit
03171992-a735-11ed-bfe3-dac502259ad0.png 修改定制自己内核编译的一些信息,完整代码参考树莓派移植 board 仓。 0326b154-a735-11ed-bfe3-dac502259ad0.png

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

033342b6-a735-11ed-bfe3-dac502259ad0.png

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

0345ef92-a735-11ed-bfe3-dac502259ad0.png

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

035e8340-a735-11ed-bfe3-dac502259ad0.png

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

036d6f2c-a735-11ed-bfe3-dac502259ad0.png

定制分区配置:根据上一篇我们获取到的分区信息,修改分区配置,另外 rk3568 的 data 分区采用 f2fs 格式,我们采用 ext4 格式。

所以采用的是旧的格式,可以参考 fstab.A311D 的配置。

0381e1aa-a735-11ed-bfe3-dac502259ad0.png

定制 test:这个目录下是我自己添加的辅助移植测试显示基本功能的例子,来源自【何小龙】的 drm 系列文章,用于学习 drm 和测试显示屏驱动,大家感兴趣的话可以去看看何小龙的文章。

不懂如何添加到 OH 编译框架的话可以去我开源的树莓派 board 仓参考:

https://gitee.com/diemit/device_board_raspberrypi/tree/OpenHarmony-3.2-Beta4/rpi4/test

③soc 部分的定制修改

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

039d8180-a735-11ed-bfe3-dac502259ad0.png display 源码是采用 OH 官方的示例,源代码在: 03b18e1e-a735-11ed-bfe3-dac502259ad0.png 直接复制到 qualcomm/msm8998/hardware 下并改名成 display。

修改 drm_display.cpp 文件:修改 drm 驱动名称为【msm】。

03c6f506-a735-11ed-bfe3-dac502259ad0.png

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

04079462-a735-11ed-bfe3-dac502259ad0.png

树莓派的 gpu 是 vc4: 042246c2-a735-11ed-bfe3-dac502259ad0.png

高通的是 msm:

042e503e-a735-11ed-bfe3-dac502259ad0.png

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

044a97c6-a735-11ed-bfe3-dac502259ad0.png

045c11f4-a735-11ed-bfe3-dac502259ad0.png

添加 display_gfx.c 文件:内部不用实现,这部分是 2d 图形加速适配的,先不适配。

0466b5b4-a735-11ed-bfe3-dac502259ad0.png

修改 BUILD.gn 文件:修改基本原则是把 def 去掉,include 改为自己的目录。

0477316e-a735-11ed-bfe3-dac502259ad0.png

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

049417e8-a735-11ed-bfe3-dac502259ad0.png

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

04aa4ec8-a735-11ed-bfe3-dac502259ad0.png

display 这部分的移植都可以参照我之前移植树莓派的教程,源码也开源的,这里只是部分讲解,完整代码请去代码仓查看。 至此 OH 编译框架适配说明完毕,执行编译命令,确保能够编译成功!!! 下一篇将进行 Linux 内核的定制适配和 boot.img 打包,敬请期待!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 移植
    +关注

    关注

    1

    文章

    379

    浏览量

    28124
  • 编译
    +关注

    关注

    0

    文章

    657

    浏览量

    32851
  • 小米
    +关注

    关注

    70

    文章

    14349

    浏览量

    144074
  • 鸿蒙
    +关注

    关注

    57

    文章

    2339

    浏览量

    42804
  • OpenHarmony
    +关注

    关注

    25

    文章

    3713

    浏览量

    16251

原文标题:鸿蒙富设备移植指南:编译框架适配

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    史无前例,移植V8虚拟机到纯血鸿蒙系统

    层使用,为保证基于Roma框架开发的业务可以零成本、无缝运行到鸿蒙系统,需要将Roma框架适配鸿蒙系统。 Roma
    的头像 发表于 09-18 10:28 1113次阅读
    史无前例,<b class='flag-5'>移植</b>V8虚拟机到纯血<b class='flag-5'>鸿蒙</b>系统

    鸿蒙设备学习菜鸟指南》之 【索引及PDF和工具分享】

    本帖最后由 HonestQiao 于 2020-11-3 14:29 编辑 《鸿蒙设备学习菜鸟指南》之 【目录索引】本帖为索引贴,各节的内容,将逐步发布。本菜鸟指南的写作目的,是
    发表于 10-30 13:14

    鸿蒙设备学习菜鸟指南》之【八、编译

    本帖最后由 HonestQiao 于 2020-11-1 19:22 编辑 《鸿蒙设备学习菜鸟指南》之【八、编译】[目录索引]根据我们拿到的板子的不同,不同的代码,在
    发表于 11-01 11:44

    《HarmonyOS 2.0源码框架分析》直播答疑

    鸿蒙编译框架是怎样的;如何利用整个编译框架实现简单的 MCU 平台移植,如STM32 ?回答
    发表于 12-10 22:28

    基于openharmony适配移植的ohos原生UI框架

    项目介绍 项目名称:XUI 所属系列:openharmony的第三方组件适配移植 功能:一个简洁而又优雅的ohos原生UI框架,解放你的双手! 项目移植状态:主功能完成 调用差异:无
    发表于 04-07 09:04 1次下载

    基于openharmony适配移植支持无缝换肤的MultipleTheme框架

    项目介绍 项目名称:MultipleTheme 所属系列:openharmony的第三方组件适配移植 功能:支持无缝换肤的框架,配合theme和换肤控件框架可以做到无缝切换换肤 项目
    发表于 04-07 09:14 2次下载

    基于openharmony适配移植的全功能Conductor框架

    项目介绍 项目名称:Conductor 所属系列:openharmony的第三方组件适配移植 功能:基于component (而非Fraction) 的HAP框架! 项目移植状态:主功
    发表于 04-07 10:48 1次下载

    基于openharmony适配移植的手势检测器框架

    项目介绍 项目名称:手势检测器框架 所属系列:openharmony的第三方组件适配移植 功能:实现各种手势检测功能 项目移植状态:主功能完成 调用差异:无 开发版本:sdk6,Dev
    发表于 04-08 09:17 2次下载

    基于鸿蒙适配移植的开源弹幕解析绘制引擎项目

    项目介绍 项目名称:开源弹幕解析绘制引擎项目 所属系列:鸿蒙的第三方组件适配移植 功能:支持显示、隐藏、显示、暂停、继续、发送、定时发送弹幕 项目移植状态:完成 调用差异:无 开发版本
    发表于 04-11 10:38 2次下载

    基于鸿蒙适配移植的广告图片轮播控件教程

    项目介绍 项目名称:广告图片轮播控件 所属系列:鸿蒙的第三方组件适配移植 功能:广告轮播,循环轮播 项目移植状态:主功能 调用差异:无 开发版本:sdk5,DevEco Studio2
    发表于 04-11 10:40 2次下载

    鸿蒙三方库适配指南

    本文以 OpenHarmony-3.2-Beta4 上适配 modbus 编译动态库为例。 获取三方库 使用之前要做好代码溯源,确认可用的版本,开源许可和发布方式等。 通过正确的路径获取源码,可以
    的头像 发表于 02-14 09:33 3459次阅读

    鸿蒙设备移植:SoC适配

    OpenHarmony 系统移植最核心的步骤是内核的移植,内核的稳定是一切子系统稳定的基础,上一篇我们讲述了内核启动原理,以及 vendor、board 的开发配置,本文将介绍 SoC 层级的移植
    的头像 发表于 05-22 10:49 1430次阅读
    <b class='flag-5'>鸿蒙</b>瘦<b class='flag-5'>设备</b><b class='flag-5'>移植</b>:SoC<b class='flag-5'>适配</b>

    OpenHarmony设备移植指南(1)导言

    OpenHarmony设备移植指南导言。在研究学习OpenHamony移植的路上,文档资料的缺失让我倍感痛苦,如今
    的头像 发表于 02-06 14:04 1316次阅读
    OpenHarmony<b class='flag-5'>富</b><b class='flag-5'>设备</b><b class='flag-5'>移植</b><b class='flag-5'>指南</b>(1)导言

    OpenHarmony设备移植指南(2)从postmarketOS获取移植资源

    OpenHarmony设备移植指南(2)从postmarketOS获取移植资源
    的头像 发表于 02-08 10:58 2318次阅读
    OpenHarmony<b class='flag-5'>富</b><b class='flag-5'>设备</b><b class='flag-5'>移植</b><b class='flag-5'>指南</b>(2)从postmarketOS获取<b class='flag-5'>移植</b>资源

    使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南

    鸿蒙原生应用。 在 《使用 Taro 开发鸿蒙原生应用》 系列文章中,我们已经介绍了 鸿蒙的基本概念 和 Taro 适配鸿蒙的原理。本文作
    的头像 发表于 02-02 16:09 857次阅读
    使用 Taro 开发<b class='flag-5'>鸿蒙</b>原生应用 —— 快速上手,<b class='flag-5'>鸿蒙</b>应用开发<b class='flag-5'>指南</b>