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

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

3天内不再提示

树莓派4B移植OHOS 3.0 LTS标准系统

丫丫119 来源:未知 作者:亮子力 2021-11-23 14:39 次阅读
终于在树莓派4B 上将 OHOS3.0 启动起来了,虽然还不完整,目前只能实现的显示和触摸。但是可以和大家分享下我的思路。

poYBAGGcigWAfnNvACjChnYrbnA632.gif

我的方法比较简单粗暴,直接使用的树莓派的树莓派 linux rpi-5.10.y 内核。

Git 地址:
https://github.com/raspberrypi/linux

然后编译 OHOS3.0 的文件系统,看缺什么补什么大概是这个意思。目前发现 OHOS 需要内核开启 selinux 和 binder:
  1. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
复制代码

然后修改下面几项:
  1. Security options--->
  2. (32768) Low address space for LSM to protect from user allocation
  3. NSA SELinux Support (选中)
  4. NSA SELinux boot parameter (选中)
  5. [ ] NSA SELinux runtime disable
  6. NSA SELinux Development Support
  7. NSA SELinux AVC Statistics
  8. (1) NSA SELinux checkreqprot default value (设置为1)
  9. (9) NSA SELinux sidtab hashtable size
  10. (256) NSA SELinux SID to context string translation cache size
  11. First legacy 'major LSM' to be initialized (SELinux)---> (选中) SELinux
  12. Ordered list of enabLEDLSMs (填入:"lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf")
  13. Device Drivers--->
  14. Android--->
  15. Android Drivers (开启)
  16. 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。当然可以直接将驱动编进内核也是可以的。
  1. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/drm_panel_orientation_quirks.ko",
  2. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/backlight/backlight.ko",
  3. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/drm.ko",
  4. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/media/cec/core/cec.ko",
  5. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/fbdev/core/syscopyarea.ko",
  6. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/fbdev/core/sysfillrect.ko",
  7. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/fbdev/core/sysimgblt.ko",
  8. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/video/fbdev/core/fb_sys_fops.ko",
  9. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/drm_kms_helper.ko",
  10. "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd.ko",
  11. "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd-timer.ko",
  12. "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd-pcm.ko",
  13. "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd-compress.ko",
  14. "insmod /lib/modules/5.10.76-v7l/kernel/sound/core/snd-pcm-dmaengine.ko",
  15. "insmod /lib/modules/5.10.76-v7l/kernel/sound/soc/snd-soc-core.ko",
  16. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/vc4/vc4.ko",
  17. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/scheduler/gpu-sched.ko",
  18. "insmod /lib/modules/5.10.76-v7l/kernel/drivers/gpu/drm/v3d/v3d.ko"
复制代码

为了验证 drm 和 libdrm 是否正常,我写了一个简单的测试
  1. fd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC);
  2. if (fd < 0) {
  3. printf("open failed");
  4. }else{
  5. printf("open seccess\n");
  6. }
  7. uint32_t conn_id;
  8. uint32_t crtc_id;
  9. res = drmModeGetResources(fd);// 获取 crtc_id 和 connector_id
  10. if (!res) {
  11. printf("ERROR: drmModeGetResources failed!\n");
  12. drmClose(fd);
  13. return -1;
  14. }else{
  15. printf("drmModeGetResources seccess\n");
  16. }
  17. crtc_id = res->crtcs[0];
  18. conn_id = res->connectors[0];
  19. conn = drmModeGetConnector(fd, conn_id); // 获取 drm_mode
  20. if (!conn) {
  21. printf("ERROR: drmModeGetConnector failed!\n");
  22. }else{
  23. printf("drmModeGetConnector seccess\n");
  24. }
复制代码

其实 libdrm 是自带测试的 modetest,但是 OHOS 没有加入编译。也可以将 modetest 加入编译框架。

①为 modetest 添加 BUILD.gn
  1. third_party\libdrm\tests\modetest\BUILD.gn:
  2. import("//build/ohos.gni")
  3. ohos_executable("modetest") {
  4. sources = [
  5. "buffers.c",
  6. "cursor.c",
  7. "modetest.c",
  8. ]
  9. cflags = [
  10. "-Wno-pointer-arith",
  11. ]
  12. include_dirs = [
  13. "../",
  14. ".",
  15. ]
  16. configs = [ "//third_party/libdrm:libdrm_config" ]
  17. public_configs = [ "//third_party/libdrm:libdrm_public_config" ]
  18. deps = [
  19. "//third_party/libdrm:libdrm",
  20. "//third_party/libdrm/tests/util/:util",
  21. ]
  22. public_deps = []
  23. install_images = [
  24. "system",
  25. "updater",
  26. ]
  27. part_name = "graphic_standard"
  28. subsystem_name = "graphic"
  29. }
复制代码

②modetest 依赖这个
  1. third_party\libdrm\tests\util\BUILD.gn:
  2. import("//build/ohos.gni")
  3. ohos_static_library("util") {
  4. sources = [
  5. "format.c",
  6. "kms.c",
  7. "pattern.c",
  8. ]
  9. cflags = []
  10. include_dirs = [
  11. "../",
  12. ".",
  13. ]
  14. configs = [ "//third_party/libdrm:libdrm_config" ]
  15. public_configs = [ "//third_party/libdrm:libdrm_public_config" ]
  16. deps = [
  17. "//third_party/libdrm:libdrm",
  18. ]
  19. public_deps = []
  20. }
复制代码

③加入到 OHOS 编译框架,加在 weston 的依赖项里就可以了
  1. third_party\weston\BUILD.gn:
  2. "//third_party/libdrm:libdrm",
  3. "//third_party/libdrm/tests/util/:util",
  4. "//third_party/libdrm/tests/modetest/:modetest",
复制代码

有个报错:问题不大,提示这个未使用,注释的就好了。
  1. third_party\libdrm\tests\util\pattern.c:988
  2. // void *mem_base = mem;
复制代码

如果 modetest 通过了,那剩下的就简单了指定 weston 的后端就可以了。
system\etc\weston.ini:
  1. [output]
  2. name=card0
复制代码

接下来是触摸部分,我使用的是 DSI接口的触摸屏。
  1. hexdump /dev/input/event2 # 可以使用hexdump看触摸设备有没有输出,可惜这个命令也不支持
  2. cat /dev/input/event2 # cat也可以凑合用,只是输出乱码,但能证明触摸是否好用
复制代码

然后查看驱动模块:
  1. ls -l /sys/dev/char/|grep input # 查看input下的触摸设备的主次设备号
  2. cat /sys/dev/char/226\:0/device/uevent # 然后输入主次设备号,查看设备的驱动程序
  3. DRIVER=raspberrypi-ts
  4. ... ...
复制代码

发现驱动是 raspberrypi-ts,那就好办了,在 init 的时候安装这个模块就好了。
  1. "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

    文章

    377

    浏览量

    28111
  • 树莓派
    +关注

    关注

    116

    文章

    1699

    浏览量

    105526
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2634

    浏览量

    66220
收藏 人收藏

    评论

    相关推荐

    ARM开发板与树莓的比较

    处理器 ARM开发板通常采用不同的ARM处理器,如Cortex-A系列、Cortex-M系列等,而树莓则主要使用博通的ARM处理器。树莓的处理器性能相对较高,尤其是在最新的
    的头像 发表于 11-05 11:11 244次阅读

    树莓4B的WiFi配置过程

    和需求。 一、准备工作 在开始配置WiFi之前,请确保你已经拥有了以下物品: 树莓4B 适用的电源适配器 装有Raspbian或其他兼容操作系统的SD卡 无线网络名称(SSID)和密
    的头像 发表于 08-30 17:10 1593次阅读

    树莓4b 2g和4g区别大吗

    树莓4B树莓基金会推出的一款性能强大的微型计算机,它具有多种版本,其中最常见的是2GB RAM版本和
    的头像 发表于 08-30 17:05 968次阅读

    树莓4b支持多大的sd卡

    树莓4B是一款非常受欢迎的微型计算机,它具有强大的性能和丰富的扩展功能。在树莓4B的使用过程
    的头像 发表于 08-30 17:02 920次阅读

    树莓4b和什么性能计算机相当

    树莓4B与何种性能的计算机相当,这个问题涉及到多个方面的比较,包括处理器性能、内存大小、接口丰富度以及应用场景等。以下是从这些方面进行的综合分析: 1. 处理器性能 树莓
    的头像 发表于 08-30 17:01 818次阅读

    树莓4b相当于什么CPU

    树莓4B作为一款基于ARM架构的单板计算机,自其发布以来就因其高性价比、丰富的接口和强大的扩展性而备受关注。在探讨树莓
    的头像 发表于 08-30 16:59 1176次阅读

    树莓4B的性能特点及应用

    HDMI、USB 3.0、千兆以太网、蓝牙5.0等,可以满足各种应用场景的需求。 树莓4B性能特点 2.1 CPU性能 树莓
    的头像 发表于 08-30 16:54 1441次阅读

    树莓4b风扇插哪个引脚

    树莓4B驱动风扇时,风扇可以插接的引脚主要取决于风扇的类型和所使用的控制方法。以下是一些常见的风扇插接引脚情况: 1. 直接连接法 对于简单的风扇(非PWM调速风扇),你可以直接将风扇的正负极连接
    的头像 发表于 08-30 16:53 1203次阅读

    OpenHarmony标准系统C++公共基础类库案例:HelloWorld

    1、程序简介该程序是基于凌蒙OpenHarmony-v3.2.1标准系统C++公共基础类库的简单案例:HelloWorld。主要讲解C++公共基础类库案例如何搭建和编译。2、程序解析2.1、创建
    的头像 发表于 08-13 08:23 465次阅读
    OpenHarmony<b class='flag-5'>标准系统</b>C++公共基础类库案例:HelloWorld

    全志H616(BIGTREETECH CB1)和 博通BCM2711(树莓4B)CPU对比测试

    一,实物对比图: BIGTREETECH CB1的底板接口的分布和树莓4B是一样的,但是没有树莓的音频接口,底板也不能放到
    发表于 05-31 14:09

    【鸿蒙】标准系统移植指南

    标准系统移植指南 本文描述了移植一块开发板的通用步骤,和具体芯片相关的详细移植过程无法在此一一列举。后续社区还会陆续发布开发板移植的实例供开
    的头像 发表于 02-27 14:36 837次阅读
    【鸿蒙】<b class='flag-5'>标准系统</b><b class='flag-5'>移植</b>指南

    佰维存储microSD卡通过树莓AVL认证

    设备,存储卡性能和兼容性直接影响树莓的整体性能。 佰维存储TF200系列microSD卡通过了树莓(Raspberry Pi 4B)AV
    的头像 发表于 01-23 17:19 401次阅读
    佰维存储microSD卡通过<b class='flag-5'>树莓</b><b class='flag-5'>派</b>AVL认证

    【爱芯 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