终于在树莓派4B 上将 OHOS3.0 启动起来了,虽然还不完整,目前只能实现的显示和触摸。但是可以和大家分享下我的思路。
我的方法比较简单粗暴,直接使用的树莓派的树莓派 linux rpi-5.10.y 内核。
Git 地址:
https://github.com/raspberrypi/linux
然后编译 OHOS3.0 的文件系统,看缺什么补什么大概是这个意思。目前发现 OHOS 需要内核开启 selinux 和 binder:
然后修改下面几项:
复制代码
目前发现开启这两项 hilog 就可以输出。内核挂上根文件系统,至少可以启动串口有输出了。然后分析下 OHOS 的图形子系统。
OHOS 目前是内核→DRM→libdrm→wayland→weston 这么个模式,如有错误欢迎指出。这里要感谢@梁克雷和钊哥 ohos 第三方板移植群各位的支持。
所以树莓派的 DRM 正常了,后面显示应该就是没为题的。好在树莓派的生态比较开放,资料还是比较好获取的,在树莓派官方论坛趴了一段时间。
Pi4 的 GPU 是 VideoCore VI 支持 OpenGL ES 3.2,而 Pi3 的 GPU 是 VideoCore IV 支持 OpenGL ES 2.0。VideoCore IV 驱动程序是 VC4,VideoCore VI 驱动程序的 V3D。
需要在 config.txt 中开启 vc4-fkms-v3d,而驱动 kernal 已经提供了模块,只要在 init 阶段将模块加载就可以了。
这里有个比较恶心的地方,OHOS 的根文件系统使用的是 Toybox,但是很多工具不支持,比如 modprobe 就没有,所以只能根据 modules.dep 文件,一个一个 insmod。当然可以直接将驱动编进内核也是可以的。
复制代码
为了验证 drm 和 libdrm 是否正常,我写了一个简单的测试:
复制代码
其实 libdrm 是自带测试的 modetest,但是 OHOS 没有加入编译。也可以将 modetest 加入编译框架。
①为 modetest 添加 BUILD.gn
复制代码
②modetest 依赖这个
复制代码
③加入到 OHOS 编译框架,加在 weston 的依赖项里就可以了
复制代码
有个报错:问题不大,提示这个未使用,注释的就好了。
复制代码
如果 modetest 通过了,那剩下的就简单了指定 weston 的后端就可以了。
system\etc\weston.ini:
复制代码
接下来是触摸部分,我使用的是 DSI接口的触摸屏。
复制代码
然后查看驱动模块:
复制代码
发现驱动是 raspberrypi-ts,那就好办了,在 init 的时候安装这个模块就好了。
复制代码
基本是这么个思路,写出来和大家分享下,希望对正在移植的小伙伴能有些帮助。
当然加到鸿蒙编译框架可能没有这么简单,接下来我会先整理这部分的文档,就更新在下面这个仓:
https://gitee.com/liangzili/harmony-raspberry
这个码仓我之前移植过 OHOS1.0 LiteOS-A 内核到树莓派 2ModuleB,就直接放到一起了,近期会更新,感兴趣的可以关注,一起讨论。
原文作者:亮子力
我的方法比较简单粗暴,直接使用的树莓派的树莓派 linux rpi-5.10.y 内核。
Git 地址:
https://github.com/raspberrypi/linux
然后编译 OHOS3.0 的文件系统,看缺什么补什么大概是这个意思。目前发现 OHOS 需要内核开启 selinux 和 binder:
然后修改下面几项:
- Security options--->
- (32768) Low address space for LSM to protect from user allocation
- NSA SELinux Support (选中)
- NSA SELinux boot parameter (选中)
- [ ] NSA SELinux runtime disable
- NSA SELinux Development Support
- NSA SELinux AVC Statistics
- (1) NSA SELinux checkreqprot default value (设置为1)
- (9) NSA SELinux sidtab hashtable size
- (256) NSA SELinux SID to context string translation cache size
- First legacy 'major LSM' to be initialized (SELinux)---> (选中) SELinux
- Ordered list of enabLEDLSMs (填入:"lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf")
- Device Drivers--->
- Android--->
- Android Drivers (开启)
- Android Binder IPC Driver (开启)
目前发现开启这两项 hilog 就可以输出。内核挂上根文件系统,至少可以启动串口有输出了。然后分析下 OHOS 的图形子系统。
OHOS 目前是内核→DRM→libdrm→wayland→weston 这么个模式,如有错误欢迎指出。这里要感谢@梁克雷和钊哥 ohos 第三方板移植群各位的支持。
所以树莓派的 DRM 正常了,后面显示应该就是没为题的。好在树莓派的生态比较开放,资料还是比较好获取的,在树莓派官方论坛趴了一段时间。
Pi4 的 GPU 是 VideoCore VI 支持 OpenGL ES 3.2,而 Pi3 的 GPU 是 VideoCore IV 支持 OpenGL ES 2.0。VideoCore IV 驱动程序是 VC4,VideoCore VI 驱动程序的 V3D。
需要在 config.txt 中开启 vc4-fkms-v3d,而驱动 kernal 已经提供了模块,只要在 init 阶段将模块加载就可以了。
这里有个比较恶心的地方,OHOS 的根文件系统使用的是 Toybox,但是很多工具不支持,比如 modprobe 就没有,所以只能根据 modules.dep 文件,一个一个 insmod。当然可以直接将驱动编进内核也是可以的。
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/drm_panel_orientation_quirks.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/backlight/backlight.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/drm.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/media/cec/core/cec.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/fbdev/core/syscopyarea.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/fbdev/core/sysfillrect.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/fbdev/core/sysimgblt.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/fbdev/core/fb_sys_fops.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/drm_kms_helper.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd-timer.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd-pcm.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd-compress.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd-pcm-dmaengine.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/sound/soc/snd-soc-core.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/vc4/vc4.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/scheduler/gpu-sched.ko",
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/v3d/v3d.ko"
为了验证 drm 和 libdrm 是否正常,我写了一个简单的测试:
- fd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC);
- if (fd < 0) {
- printf("open failed");
- }else{
- printf("open seccess\n");
- }
- uint32_t conn_id;
- uint32_t crtc_id;
- res = drmModeGetResources(fd);// 获取 crtc_id 和 connector_id
- if (!res) {
- printf("ERROR: drmModeGetResources failed!\n");
- drmClose(fd);
- return -1;
- }else{
- printf("drmModeGetResources seccess\n");
- }
- crtc_id = res->crtcs[0];
- conn_id = res->connectors[0];
- conn = drmModeGetConnector(fd, conn_id); // 获取 drm_mode
- if (!conn) {
- printf("ERROR: drmModeGetConnector failed!\n");
- }else{
- printf("drmModeGetConnector seccess\n");
- }
其实 libdrm 是自带测试的 modetest,但是 OHOS 没有加入编译。也可以将 modetest 加入编译框架。
①为 modetest 添加 BUILD.gn
- third_party\libdrm\tests\modetest\BUILD.gn:
- import("//build/ohos.gni")
- ohos_executable("modetest") {
- sources = [
- "buffers.c",
- "cursor.c",
- "modetest.c",
- ]
- cflags = [
- "-Wno-pointer-arith",
- ]
- include_dirs = [
- "../",
- ".",
- ]
- configs = [ "//third_party/libdrm:libdrm_config" ]
- public_configs = [ "//third_party/libdrm:libdrm_public_config" ]
- deps = [
- "//third_party/libdrm:libdrm",
- "//third_party/libdrm/tests/util/:util",
- ]
- public_deps = []
- install_images = [
- "system",
- "updater",
- ]
- part_name = "graphic_standard"
- subsystem_name = "graphic"
- }
②modetest 依赖这个
- third_party\libdrm\tests\util\BUILD.gn:
- import("//build/ohos.gni")
- ohos_static_library("util") {
- sources = [
- "format.c",
- "kms.c",
- "pattern.c",
- ]
- cflags = []
- include_dirs = [
- "../",
- ".",
- ]
- configs = [ "//third_party/libdrm:libdrm_config" ]
- public_configs = [ "//third_party/libdrm:libdrm_public_config" ]
- deps = [
- "//third_party/libdrm:libdrm",
- ]
- public_deps = []
- }
③加入到 OHOS 编译框架,加在 weston 的依赖项里就可以了
- third_party\weston\BUILD.gn:
- "//third_party/libdrm:libdrm",
- "//third_party/libdrm/tests/util/:util",
- "//third_party/libdrm/tests/modetest/:modetest",
有个报错:问题不大,提示这个未使用,注释的就好了。
- third_party\libdrm\tests\util\pattern.c:988
- // void *mem_base = mem;
如果 modetest 通过了,那剩下的就简单了指定 weston 的后端就可以了。
system\etc\weston.ini:
- [output]
- name=card0
接下来是触摸部分,我使用的是 DSI接口的触摸屏。
- hexdump /dev/input/event2 # 可以使用hexdump看触摸设备有没有输出,可惜这个命令也不支持
- cat /dev/input/event2 # cat也可以凑合用,只是输出乱码,但能证明触摸是否好用
然后查看驱动模块:
- ls -l /sys/dev/char/|grep input # 查看input下的触摸设备的主次设备号
- cat /sys/dev/char/226\:0/device/uevent # 然后输入主次设备号,查看设备的驱动程序
- DRIVER=raspberrypi-ts
- ... ...
发现驱动是 raspberrypi-ts,那就好办了,在 init 的时候安装这个模块就好了。
- "insmod /lib/modules/5.10.76-v7l/kernel/drivers/input/touchscreen/raspberrypi-ts.ko"
基本是这么个思路,写出来和大家分享下,希望对正在移植的小伙伴能有些帮助。
当然加到鸿蒙编译框架可能没有这么简单,接下来我会先整理这部分的文档,就更新在下面这个仓:
https://gitee.com/liangzili/harmony-raspberry
这个码仓我之前移植过 OHOS1.0 LiteOS-A 内核到树莓派 2ModuleB,就直接放到一起了,近期会更新,感兴趣的可以关注,一起讨论。
原文作者:亮子力
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
移植
+关注
关注
1文章
376浏览量
28093 -
树莓派
+关注
关注
116文章
1687浏览量
105448 -
鸿蒙系统
+关注
关注
183文章
2634浏览量
66140
发布评论请先 登录
相关推荐
ARM开发板与树莓派的比较
处理器 ARM开发板通常采用不同的ARM处理器,如Cortex-A系列、Cortex-M系列等,而树莓派则主要使用博通的ARM处理器。树莓派的处理器性能相对较高,尤其是在最新的
树莓派4B的WiFi配置过程
和需求。 一、准备工作 在开始配置WiFi之前,请确保你已经拥有了以下物品: 树莓派4B 适用的电源适配器 装有Raspbian或其他兼容操作系统的SD卡 无线网络名称(SSID)和密
树莓派4b和什么性能计算机相当
树莓派4B与何种性能的计算机相当,这个问题涉及到多个方面的比较,包括处理器性能、内存大小、接口丰富度以及应用场景等。以下是从这些方面进行的综合分析: 1. 处理器性能 树莓
树莓派4b相当于什么CPU
树莓派4B作为一款基于ARM架构的单板计算机,自其发布以来就因其高性价比、丰富的接口和强大的扩展性而备受关注。在探讨树莓派
树莓派4B的性能特点及应用
HDMI、USB 3.0、千兆以太网、蓝牙5.0等,可以满足各种应用场景的需求。 树莓派4B性能特点 2.1 CPU性能 树莓
树莓派4b风扇插哪个引脚
树莓派4B驱动风扇时,风扇可以插接的引脚主要取决于风扇的类型和所使用的控制方法。以下是一些常见的风扇插接引脚情况: 1. 直接连接法 对于简单的风扇(非PWM调速风扇),你可以直接将风扇的正负极连接
OpenHarmony标准系统C++公共基础类库案例:HelloWorld
1、程序简介该程序是基于凌蒙派OpenHarmony-v3.2.1标准系统C++公共基础类库的简单案例:HelloWorld。主要讲解C++公共基础类库案例如何搭建和编译。2、程序解析2.1、创建
全志H616(BIGTREETECH CB1)和 博通BCM2711(树莓派4B)CPU对比测试
一,实物对比图:
BIGTREETECH CB1的底板接口的分布和树莓派4B是一样的,但是没有树莓派的音频接口,底板也不能放到
发表于 05-31 14:09
【爱芯派 Pro 开发板试用体验】CPU性能测试,与树莓派4B对比
选项编译(无并发执行选项,单线程):
make link
最后,执行测试程序:
./coremark.exe
执行结束后,输出如下:
可以看到,单核测试成绩为6288.6;
四、与树莓派4B对比
发表于 01-01 16:36
【昉·星光 2 高性能RISC-V单板计算机体验】Redis源码编译和性能测试以及与树莓派4B对比
本文首先介绍Redis是什么,然后介绍如何在VisionFive2上编译Redis源码,以及从源码安装Redis,最后介绍如何在VisionFive2上运行Redis基准测试,并在树莓派4B上运行
发表于 12-10 21:27
ad7768-1 Linux驱动程序不能用于树莓4b?
你好,我在树莓4B上学了种植AD7768-1driver(AD7768-1driver),我发现司机不能工作。因为树莓4B可能不支持16比特的spi。
发表于 12-04 07:18
评论