終于在樹莓派4B 上將 OHOS3.0 啟動起來了,雖然還不完整,目前只能實現(xiàn)的顯示和觸摸。但是可以和大家分享下我的思路。
我的方法比較簡單粗暴,直接使用的樹莓派的樹莓派 linux rpi-5.10.y 內(nèi)核。
Git 地址:
https://github.com/raspberrypi/linux
然后編譯 OHOS3.0 的文件系統(tǒng),看缺什么補什么大概是這個意思。目前發(fā)現(xiàn) OHOS 需要內(nèi)核開啟 selinux 和 binder:
然后修改下面幾項:
復(fù)制代碼
目前發(fā)現(xiàn)開啟這兩項 hilog 就可以輸出。內(nèi)核掛上根文件系統(tǒng),至少可以啟動串口有輸出了。然后分析下 OHOS 的圖形子系統(tǒng)。
OHOS 目前是內(nèi)核→DRM→libdrm→wayland→weston 這么個模式,如有錯誤歡迎指出。這里要感謝@梁克雷和釗哥 ohos 第三方板移植群各位的支持。
所以樹莓派的 DRM 正常了,后面顯示應(yīng)該就是沒為題的。好在樹莓派的生態(tài)比較開放,資料還是比較好獲取的,在樹莓派官方論壇趴了一段時間。
Pi4 的 GPU 是 VideoCore VI 支持 OpenGL ES 3.2,而 Pi3 的 GPU 是 VideoCore IV 支持 OpenGL ES 2.0。VideoCore IV 驅(qū)動程序是 VC4,VideoCore VI 驅(qū)動程序的 V3D。
需要在 config.txt 中開啟 vc4-fkms-v3d,而驅(qū)動 kernal 已經(jīng)提供了模塊,只要在 init 階段將模塊加載就可以了。
這里有個比較惡心的地方,OHOS 的根文件系統(tǒng)使用的是 Toybox,但是很多工具不支持,比如 modprobe 就沒有,所以只能根據(jù) modules.dep 文件,一個一個 insmod。當然可以直接將驅(qū)動編進內(nèi)核也是可以的。
復(fù)制代碼
為了驗證 drm 和 libdrm 是否正常,我寫了一個簡單的測試:
復(fù)制代碼
其實 libdrm 是自帶測試的 modetest,但是 OHOS 沒有加入編譯。也可以將 modetest 加入編譯框架。
①為 modetest 添加 BUILD.gn
復(fù)制代碼
②modetest 依賴這個
復(fù)制代碼
③加入到 OHOS 編譯框架,加在 weston 的依賴項里就可以了
復(fù)制代碼
有個報錯:問題不大,提示這個未使用,注釋的就好了。
復(fù)制代碼
如果 modetest 通過了,那剩下的就簡單了指定 weston 的后端就可以了。
system\etc\weston.ini:
復(fù)制代碼
接下來是觸摸部分,我使用的是 DSI接口的觸摸屏。
復(fù)制代碼
然后查看驅(qū)動模塊:
復(fù)制代碼
發(fā)現(xiàn)驅(qū)動是 raspberrypi-ts,那就好辦了,在 init 的時候安裝這個模塊就好了。
復(fù)制代碼
基本是這么個思路,寫出來和大家分享下,希望對正在移植的小伙伴能有些幫助。
當然加到鴻蒙編譯框架可能沒有這么簡單,接下來我會先整理這部分的文檔,就更新在下面這個倉:
https://gitee.com/liangzili/harmony-raspberry
這個碼倉我之前移植過 OHOS1.0 LiteOS-A 內(nèi)核到樹莓派 2ModuleB,就直接放到一起了,近期會更新,感興趣的可以關(guān)注,一起討論。
原文作者:亮子力
我的方法比較簡單粗暴,直接使用的樹莓派的樹莓派 linux rpi-5.10.y 內(nèi)核。
Git 地址:
https://github.com/raspberrypi/linux
然后編譯 OHOS3.0 的文件系統(tǒng),看缺什么補什么大概是這個意思。目前發(fā)現(xiàn) OHOS 需要內(nèi)核開啟 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 (設(shè)置為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 (開啟)
目前發(fā)現(xiàn)開啟這兩項 hilog 就可以輸出。內(nèi)核掛上根文件系統(tǒng),至少可以啟動串口有輸出了。然后分析下 OHOS 的圖形子系統(tǒng)。
OHOS 目前是內(nèi)核→DRM→libdrm→wayland→weston 這么個模式,如有錯誤歡迎指出。這里要感謝@梁克雷和釗哥 ohos 第三方板移植群各位的支持。
所以樹莓派的 DRM 正常了,后面顯示應(yīng)該就是沒為題的。好在樹莓派的生態(tài)比較開放,資料還是比較好獲取的,在樹莓派官方論壇趴了一段時間。
Pi4 的 GPU 是 VideoCore VI 支持 OpenGL ES 3.2,而 Pi3 的 GPU 是 VideoCore IV 支持 OpenGL ES 2.0。VideoCore IV 驅(qū)動程序是 VC4,VideoCore VI 驅(qū)動程序的 V3D。
需要在 config.txt 中開啟 vc4-fkms-v3d,而驅(qū)動 kernal 已經(jīng)提供了模塊,只要在 init 階段將模塊加載就可以了。
這里有個比較惡心的地方,OHOS 的根文件系統(tǒng)使用的是 Toybox,但是很多工具不支持,比如 modprobe 就沒有,所以只能根據(jù) modules.dep 文件,一個一個 insmod。當然可以直接將驅(qū)動編進內(nèi)核也是可以的。
- "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("http://build/ohos.gni")
- ohos_executable("modetest") {
- sources = [
- "buffers.c",
- "cursor.c",
- "modetest.c",
- ]
- cflags = [
- "-Wno-pointer-arith",
- ]
- include_dirs = [
- "../",
- ".",
- ]
- configs = [ "http://third_party/libdrm:libdrm_config" ]
- public_configs = [ "http://third_party/libdrm:libdrm_public_config" ]
- deps = [
- "http://third_party/libdrm:libdrm",
- "http://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("http://build/ohos.gni")
- ohos_static_library("util") {
- sources = [
- "format.c",
- "kms.c",
- "pattern.c",
- ]
- cflags = []
- include_dirs = [
- "../",
- ".",
- ]
- configs = [ "http://third_party/libdrm:libdrm_config" ]
- public_configs = [ "http://third_party/libdrm:libdrm_public_config" ]
- deps = [
- "http://third_party/libdrm:libdrm",
- ]
- public_deps = []
- }
③加入到 OHOS 編譯框架,加在 weston 的依賴項里就可以了
- third_party\weston\BUILD.gn:
- "http://third_party/libdrm:libdrm",
- "http://third_party/libdrm/tests/util/:util",
- "http://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看觸摸設(shè)備有沒有輸出,可惜這個命令也不支持
- cat /dev/input/event2 # cat也可以湊合用,只是輸出亂碼,但能證明觸摸是否好用
然后查看驅(qū)動模塊:
- ls -l /sys/dev/char/|grep input # 查看input下的觸摸設(shè)備的主次設(shè)備號
- cat /sys/dev/char/226\:0/device/uevent # 然后輸入主次設(shè)備號,查看設(shè)備的驅(qū)動程序
- DRIVER=raspberrypi-ts
- ... ...
發(fā)現(xiàn)驅(qū)動是 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 內(nèi)核到樹莓派 2ModuleB,就直接放到一起了,近期會更新,感興趣的可以關(guān)注,一起討論。
原文作者:亮子力
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
移植
+關(guān)注
關(guān)注
1文章
379瀏覽量
28150 -
樹莓派
+關(guān)注
關(guān)注
117文章
1710瀏覽量
105730 -
鴻蒙系統(tǒng)
+關(guān)注
關(guān)注
183文章
2636瀏覽量
66468
發(fā)布評論請先 登錄
相關(guān)推薦
ARM開發(fā)板與樹莓派的比較
處理器 ARM開發(fā)板通常采用不同的ARM處理器,如Cortex-A系列、Cortex-M系列等,而樹莓派則主要使用博通的ARM處理器。樹莓派的處理器性能相對較高,尤其是在最新的
樹莓派4B的WiFi配置過程
和需求。 一、準備工作 在開始配置WiFi之前,請確保你已經(jīng)擁有了以下物品: 樹莓派4B 適用的電源適配器 裝有Raspbian或其他兼容操作系統(tǒng)的SD卡 無線網(wǎng)絡(luò)名稱(SSID)和密
樹莓派4b 2g和4g區(qū)別大嗎
樹莓派4B是樹莓派基金會推出的一款性能強大的微型計算機,它具有多種版本,其中最常見的是2GB RAM版本和
樹莓派4b和什么性能計算機相當
樹莓派4B與何種性能的計算機相當,這個問題涉及到多個方面的比較,包括處理器性能、內(nèi)存大小、接口豐富度以及應(yīng)用場景等。以下是從這些方面進行的綜合分析: 1. 處理器性能 樹莓
樹莓派4b相當于什么CPU
樹莓派4B作為一款基于ARM架構(gòu)的單板計算機,自其發(fā)布以來就因其高性價比、豐富的接口和強大的擴展性而備受關(guān)注。在探討樹莓派
樹莓派4B的性能特點及應(yīng)用
HDMI、USB 3.0、千兆以太網(wǎng)、藍牙5.0等,可以滿足各種應(yīng)用場景的需求。 樹莓派4B性能特點 2.1 CPU性能 樹莓
樹莓派4b風扇插哪個引腳
樹莓派4B驅(qū)動風扇時,風扇可以插接的引腳主要取決于風扇的類型和所使用的控制方法。以下是一些常見的風扇插接引腳情況: 1. 直接連接法 對于簡單的風扇(非PWM調(diào)速風扇),你可以直接將風扇的正負極連接
樹莓派和arm開發(fā)板的區(qū)別
樹莓派(Raspberry Pi)和ARM開發(fā)板都是基于ARM架構(gòu)的微型計算機,但它們之間存在一些關(guān)鍵區(qū)別。 一、歷史背景 樹莓派(Raspberry Pi)
OpenHarmony標準系統(tǒng)C++公共基礎(chǔ)類庫案例:HelloWorld
1、程序簡介該程序是基于凌蒙派OpenHarmony-v3.2.1標準系統(tǒng)C++公共基礎(chǔ)類庫的簡單案例:HelloWorld。主要講解C++公共基礎(chǔ)類庫案例如何搭建和編譯。2、程序解析2.1、創(chuàng)建
全志H616(BIGTREETECH CB1)和 博通BCM2711(樹莓派4B)CPU對比測試
一,實物對比圖:
BIGTREETECH CB1的底板接口的分布和樹莓派4B是一樣的,但是沒有樹莓派的音頻接口,底板也不能放到
發(fā)表于 05-31 14:09
【鴻蒙】標準系統(tǒng)移植指南
標準系統(tǒng)移植指南 本文描述了移植一塊開發(fā)板的通用步驟,和具體芯片相關(guān)的詳細移植過程無法在此一一列舉。后續(xù)社區(qū)還會陸續(xù)發(fā)布開發(fā)板移植的實例供開
佰維存儲TF200系列microSD卡通過樹莓派AVL認證
佰維存儲的TF200系列microSD卡已經(jīng)成功通過了樹莓派(Raspberry Pi 4B)的AVL認證,確保了與樹莓派微型計算機的完美兼
評論