登录
树莓派4B移植OHOS 3.0 LTS标准系统
丫丫119
2021-11-23
3018
分享海报
电子说
1.3w
人已加入
+加入圈子
描述
终于在
树莓派
4B 上将 OHOS3.0 启动起来了,虽然还不完整,目前只能实现的显示和触摸。但是可以和大家分享下我的思路。
我的方法比较简单粗暴,直接使用的树莓派的树莓派 linux rpi-5.10.y 内核。
Git 地址:
https://github.com/raspberrypi/linux
然后编译 OHOS3.0 的文件系统,看缺什么补什么大概是这个意思。目前发现 OHOS 需要内核开启 selinux 和 binder:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
复制代码
然后修改下面几项:
Security op
ti
ons --->
(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 enab
LED
LSMs (填入:"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,就直接放到一起了,近期会更新,感兴趣的可以关注,一起讨论。
原文作者:亮子力
打开APP阅读更多精彩内容
点击阅读全文
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
移植
树莓派
鸿蒙系统
树莓
派
4B
支持的操作
系统
有哪些?
2021-10-13
0
对
树莓
派
4B
进行开机测试
2021-10-29
0
树莓
派
4B
有什么特色
2021-11-11
0
树莓
派
4B
移植
OHOS
3.0
LTS
标准系统
2021-11-23
0
树莓
派
4B
安装及使用
2021-12-13
0
Ubuntu Server在
树莓
派
4B
上的运行概述
2021-12-30
0
树莓
派
入门(五)——
树莓
派
4B
之初体验
2021-10-22
1194
树莓
派
4b
原理图下载
2021-12-13
3723
树莓
派
4B
原理图
2023-02-01
1593
树莓
派
4b
学习笔记
2023-07-04
7029
树莓
派
4B
的性能特点及应用
2024-08-30
1216
树莓
派
4b
和什么性能计算机相当
2024-08-30
711
树莓
派
4b
支持多大的sd卡
2024-08-30
775
全部
0
条评论
快来发表一下你的评论吧 !
发送
登录/注册
×
20
完善资料,
赚取积分