树莓派4B刷入OpenHarmony 3.0,目前可显示与触控

Python029

树莓派4B刷入OpenHarmony 3.0,目前可显示与触控,第1张

11 月 24 日消息,鸿蒙技术社区昨天发文,表示最近有人在树莓派 4B 上面成功装入并且运行 OpenHarmony 3.0 (下面简称 OHOS 3.0)操作系统。

根据介绍,本次刷机使用了树莓派 linux rpi-5.10.y 内核,在此基础上编译 OHOS 3.0 系统,然后补齐文件与功能。整体来说算是比较简单粗暴的,感兴趣的话可以参考这篇内容。

不过目前的系统并不完整,只能实现显示与触控两个比较基础的功能。

本次刷机使用的树莓派 4B 采用了一颗 28nm 制程的博通 BCM2711 处理器,拥有四个 1.5GHz A72 CPU 核心,GPU 频率为 500MHz。

可以选配最高 4GB LPDDR4 内存,并且提供了千兆网卡、USB 3.0 和 microHDMI 接口,支持蓝牙 5.0。

最后介绍一下,OpenHarmony 是华为将鸿蒙系统的基础能力捐献给开放原子开源基金会之后,由后者整合其他参与者贡献的代码形成的开源项目。

目前它已经向大量三方厂商开放,例如前几天好叭 科技 就基于 OpenHarmony 推出了用于智能手表的好叭 OS 系统。

华为已经把鸿蒙HarmonyOS的基础能力全部捐献给开放原子开源基金会,由后者整合其他参与者的贡献最终形成了OpenAtom OpenHarmony(简称“OHOS”)的开源项目,并获得了数个厂商的支持,目前最新版本是3.0。

除了厂商“民间”高手也开始 探索 这一系统。根据鸿蒙技术社区的消息,近日有玩家在一部树莓派4B上成功刷入并启动了OpenHarmony 3.0!

不过,目前功能并不完整,只能实现显示、触摸两个简单操作。

树莓派4B配备了一颗博通BCM2711处理器,28nm工艺,集成四核A72 1.5GHz,内置GPU频率为500MHz,性能比上代树莓派3B+提升了近50%,搭配1/2/4GB LPDDR4内存、千兆网卡、蓝牙5.0、USB 3.0接口、microHDMI接口。

之前在树莓派4b上点亮了OHOS3.0,不过内核是用tftp拉取的,根文件系统挂在了NFS上,拔了网线就无法启动。当然这么操作只是为了方便调试,而最终需要的是一个可以烧录到TF卡上的img镜像文件。这就需要将所有调试好的内容添加到OHOS3.0的编译框架,本以为是很简单的事情,好家伙,整了这么久,感觉添加编译框架比移植本身更复杂。于是我整理了添加树莓派单板到编译框架的内容,希望对各位有所帮助,为大家避坑。

主要参考 hisilicon build组件仓,添加一个products编译组件,这个组件是在产品配置文件中指定的。比如

productdefinecommonproductsRPI4B.json

其他部分参考Hi3516,但是其中2条,指定单板组件路径,并添加组件。如果删除这两条,将不能编译内核,只生成OHOS的文件系统。

接下来在device目录下,新建一个raspberrypi编译组件文件夹,并添加 ohos.build 文件。和前面产品配置文件中的设置对应起来了。

deviceraspberrypibuildohos.build

新建 deviceraspberrypibuildBUILD.gn 当然每个厂家不可能只有1个板子,如果有其他单板就在这里指定,比如树莓派2B、3B等

既然前面指定了rpi4b的编译配置组件,那么就在 deviceraspberrypi 新建一个 rpi4b 的目录,可以参考 hi3516dv300 build组件

deviceraspberrypirpi4bBUILD.gn

至此一个rpi4b build组件就添加到OHOS3.0的编译框架了,之后相关内容添加到这个文件夹下就可以了。

接下来分析下目前移植了树莓派4B的哪些内容,如何将这些内容编译进OHOS3.0。

关于补丁可以参考 Patch组件,可以得知内核编译由kernel.mk来执行

kernellinuxbuildkernel.mk

所以补丁文件需要放到正确的路径下,以正确的名字命名就可以patch到内核。

hdf.patch补丁文件,现在还没有移植HDF相关内容,所以可以先使用Hi3516的

rpi4b.patch补丁文件,使用树莓派的官方镜像,https://github.com/raspberrypi/linux

kernellinuxconfiglinux-5.10archarmconfigsrpi4b_standard_defconfig

内核配置文件目前已知的需要开启下面内容,但是肯定不止这些,以后会继续更新

Pi4的GPU是VideoCore VI支持OpenGL ES 3.2,而Pi3的GPU是VideoCore IV支持OpenGL ES 2.0。VideoCore IV 驱动程序是 VC4,VideoCore VI 驱动程序的 V3D。内核已经提供驱动,参考rpi4b_standard_defconfig将驱动直接编入到内核。

同时需要在config.txt中开启设置

OHOS中修改weston的配置文件,指定显示驱动

systemetcweston.ini

具体思路就是先查找设备号,根据设备号找到驱动程序。

前面内核配置的时候rpi4b_standard_defconfig中已经将触摸驱动编入内核,所以后面不需要在init加载模块了,修改下eudev的配置文件即可。

third_partyeudevrules.d ouchscreen.rules

正常情况下内核是由uboot进行引导的,而且OHOS默认生成uImage。但是树莓派自带BootLoader,虽然可以先用树莓派自带的BootLoader启动uboot,再用uboot加载uImage,但是这样会比较麻烦,而且会增加启动时间。不过目前 zImage是写死在kernel.mk中的,没办法改下编译脚本把。

kernellinuxbuildkernel.mk 将 uImage 改为 zImage modules dtbs

kernellinuxbuildbuild_kernel.sh

kernellinuxbuildBUILD.gn

kernellinuxbuildkernel_module_build.sh

这里内核编译会依赖product_path="vendor/$product_company/$product_name"下的hdf.hcs文件,得先新建一个应付下,不然会报下面这个错误。

ninja: error: '../../vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs', needed by 'gen/drivers/adapter/uhdf2/hcs/hdf_default.hcb', missing and no known rule to make it

新建:vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs

对于镜像烧录,Hi3516会将uImage、system.img、vendor.img等镜像烧写到emmc,但是树莓派使用TF卡启动,所以需要对TF卡进行分区,然后复制对应的内容到各个分区。首先制作树莓派boot目录,这个用来目录存放树莓派设备树、config.txt、cmdline.txt、内核镜像等信息。写一个简单的mkboot.py脚本来实现这个功能,位置在码仓rpi4bdeviceraspberrypiimagesmkboot.py将会生成boot.img。

为了方便烧录,需要将boot.img、system.img、updater.img、vendor.img、userdata.img合并成一个rpi4b.img。还是写一个简单的脚本来处理这个步骤rpi4bdeviceraspberrypiimagesmkboot.py。

不过有个问题,主分区只支持4个,所以updater.img暂时先不合并了,这个问题等以后再来处理。

最后将会得到一个rpi4b.img的镜像文件,将这个文件烧录到SD卡就可以了。

Linux:可以使用dd命令

windows:使用Win32 Disk Imager工具烧录即可。

到这里总算是跑通了一个完整的添加新单板的流程,只不过目前只适配了显示和触摸。接下来打算尝试HDF或者distributed部分。