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

    文章

    407

    浏览量

    29214
  • 树莓派
    +关注

    关注

    122

    文章

    2069

    浏览量

    109713
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2642

    浏览量

    69345
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于树莓(RaspberryPi)构建高效实时监控系统

    由于树莓体积小、可开发性强等特性,常被用于视频监控场景中,结合 ZeroNews,可实现用户在任意位置都能实时安全得访问视频监控系统。 先决条件:树莓
    的头像 发表于 09-22 15:14 860次阅读
    基于<b class='flag-5'>树莓</b><b class='flag-5'>派</b>(RaspberryPi)构建高效实时监控<b class='flag-5'>系统</b>

    零成本钢铁侠手套!树莓+OpenCV 秒变手势遥控器!

    大家好,这是一个树莓和OpenCV的连载专题。使用树莓与OpenCV实现姿态估计和面部特征点追踪使用树莓
    的头像 发表于 08-16 16:16 886次阅读
    零成本钢铁侠手套!<b class='flag-5'>树莓</b><b class='flag-5'>派</b>+OpenCV 秒变手势遥控器!

    如何使用树莓与OpenCV实现面部和运动追踪的云台系统

    大家好,这是一个树莓和OpenCV的连载专题。使用树莓与OpenCV实现姿态估计和面部特征点追踪使用树莓
    的头像 发表于 08-14 17:45 962次阅读
    如何使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>与OpenCV实现面部和运动追踪的云台<b class='flag-5'>系统</b>?

    树莓操作系统:版本、特性及设置完整指南!

    树莓操作系统是什么?树莓操作系统是由树莓
    的头像 发表于 07-28 18:26 829次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>操作<b class='flag-5'>系统</b>:版本、特性及设置完整指南!

    切记!使用树莓时绝对不能做的7件事!

    如今,树莓几乎可用于任何场景。然而,这种多功能性有时会让你忘记,这款单板计算机并非坚不可摧,一个小失误就可能彻底损坏主板。我桌上有台树莓4B
    的头像 发表于 07-19 08:34 642次阅读
    切记!使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>时绝对不能做的7件事!

    树莓6 传闻:发布日期与规格!

    每当我想再为我的收藏增添一款树莓时,总会在是立即购买还是等待硬件更强大的下一代之间犹豫不决。但新树莓型号的发布往往容易被错过,尤其是在你的信息流被病毒式传播的猫咪视频占据时。因此,
    的头像 发表于 07-11 16:21 1352次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>6 传闻:发布日期与规格!

    树莓分类器:用树莓识别不同型号的树莓

    对准树莓4,屏幕上会显示“RaspberryPi4”;对准树莓Zero时显示“Raspber
    的头像 发表于 06-13 16:39 994次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>分类器:用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>识别不同型号的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>!

    树莓5 与 树莓4:深度对比与独特优势!

    和专业人士都好奇它与前代产品树莓4相比表现如何。本文将深入对比这两款机型,突出它们的差异和独特优势,帮助您做出明智的决策。1.处理器树莓
    的头像 发表于 05-21 13:15 2071次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>5 与 <b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>4</b>:深度对比与独特优势!

    能够精准定位的树莓机器人!

    我为我的自制机器人BigRob(同样由树莓驱动)配备了基于树莓的精准GPS导航系统。本项目所用组件硬件组件NV08C-CSMx1NV08
    的头像 发表于 05-17 08:33 842次阅读
    能够精准定位的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>机器人!

    树莓派性能优化指南(第一弹):让树莓变身“小钢炮”!

    超频?如果需要让树莓跑高速计算的应用,比如视频编解码、图像识别、游戏模拟器等,当然速率越快越好。有老外网友尝试,BCM2711B0(树莓
    的头像 发表于 04-03 16:40 1618次阅读
    <b class='flag-5'>树莓</b>派性能优化指南(第一弹):让<b class='flag-5'>树莓</b><b class='flag-5'>派</b>变身“小钢炮”!

    4树莓5跑动大模型!DeepSeek R1分布式实战!

    导语“用4树莓5组网,轻松运行大模型——这可能是2025年最颠覆认知的开源AI项目!”GitHub明星项目distributed-llama最新实战案例曝光:通过独创的动态模型切片技术,成功在
    的头像 发表于 03-24 14:50 1073次阅读
    <b class='flag-5'>4</b>台<b class='flag-5'>树莓</b><b class='flag-5'>派</b>5跑动大模型!DeepSeek R1分布式实战!

    树莓4b连接DLPDLCR230NPEVM,HDMI和DPI可以同时用嘛?

    树莓4b连接DLPDLCR230NPEVM,HDMI和DPI可以同时用嘛
    发表于 02-21 11:48

    关于DLPDLCR230NPEVM与树莓4B的几个问题求解

    有关于DLPDLCR230NPEVM与树莓4B的以下几个问题,望大佬解答: 1、如何用DLP投影出树莓
    发表于 02-18 07:06

    deepin 23+树莓让小车动起来

    。     硬件准备 以下是所需的硬件清单,看看自己都备齐了吗? 树莓 4b 智能小车底盘 双层圆盘(两轮附带电机、电池盒) Type-C 接口 5V 锂电池(给树莓
    的头像 发表于 02-12 09:12 1326次阅读
    deepin 23+<b class='flag-5'>树莓</b><b class='flag-5'>派</b>让小车动起来

    键盘就是电脑,树莓500来了!

    2020年11月2日,树莓派发布了树莓400(Raspberry Pi 400)——一款将树莓内置到键盘中的全新外形设计,配备四核 64
    发表于 12-13 13:52