成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

樹莓派4B移植OHOS 3.0 LTS標準系統

系統
終于在樹莓派4B上將OHOS3.0啟動起來了,雖然還不完整,目前只能實現的顯示和觸摸。但是可以和大家分享下我的思路。

[[436362]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

終于在樹莓派4B上將OHOS3.0啟動起來了,雖然還不完整,目前只能實現的顯示和觸摸。但是可以和大家分享下我的思路。

[[436363]]

我的方法比較簡單粗暴,直接使用的樹莓派的樹莓派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

然后修改下面幾項:

  1. Security options  --->   
  2.     (32768) Low address space for LSM to protect from user allocation  
  3.  
  4.     [*] NSA SELinux Support             (選中) 
  5.     [*]   NSA SELinux boot parameter    (選中) 
  6.     [ ]   NSA SELinux runtime disable 
  7.     [*]   NSA SELinux Development Support 
  8.     [*]   NSA SELinux AVC Statistics 
  9.     (1)   NSA SELinux checkreqprot default value    (設置為1) 
  10.     (9)   NSA SELinux sidtab hashtable size 
  11.     (256) NSA SELinux SID to context string translation cache size 
  12.         First legacy 'major LSM' to be initialized (SELinux)  ---> (選中) SELinux 
  13.         Ordered list of enabled LSMs (填入:"lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf"
  14.  Device Drivers  ---> 
  15.     Android  ---> 
  16.         [*] Android Drivers (開啟) 
  17.         [*]   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. crtc_id = res->crtcs[0]; 
  17. conn_id = res->connectors[0]; 
  18.  
  19. conn = drmModeGetConnector(fd, conn_id);    // 獲取 drm_mode 
  20. if (!conn) { 
  21.     printf("ERROR: drmModeGetConnector failed!\n"); 
  22. }else
  23.     printf("drmModeGetConnector seccess\n"); 

其實libdrm是自帶測試的modetest,但是OHOS沒有加入編譯。也可以將modetest加入編譯框架

1.為modetest添加BUILD.gn

third_party\libdrm\tests\modetest\BUILD.gn

  1. import("//build/ohos.gni"
  2.  
  3. ohos_executable("modetest") { 
  4.  
  5.   sources = [ 
  6.     "buffers.c"
  7.     "cursor.c"
  8.     "modetest.c"
  9.   ] 
  10.  
  11.   cflags = [ 
  12.       "-Wno-pointer-arith"
  13.   ] 
  14.  
  15.   include_dirs = [ 
  16.     "../"
  17.     "."
  18.   ] 
  19.    
  20.   configs = [ "//third_party/libdrm:libdrm_config" ] 
  21.  
  22.   public_configs = [ "//third_party/libdrm:libdrm_public_config" ] 
  23.  
  24.   deps = [ 
  25.     "//third_party/libdrm:libdrm"
  26.     "//third_party/libdrm/tests/util/:util"
  27.   ] 
  28.  
  29.   public_deps = [] 
  30.  
  31.   install_images = [ 
  32.     "system"
  33.     "updater"
  34.   ] 
  35.   part_name = "graphic_standard" 
  36.   subsystem_name = "graphic" 

2.modetest依賴這個

third_party\libdrm\tests\util\BUILD.gn

  1. import("//build/ohos.gni"
  2.  
  3. ohos_static_library("util") { 
  4.  
  5.   sources = [ 
  6.     "format.c"
  7.     "kms.c"
  8.     "pattern.c"
  9.   ] 
  10.  
  11.   cflags = [] 
  12.  
  13.   include_dirs = [ 
  14.     "../"
  15.     "."
  16.   ] 
  17.    
  18.   configs = [ "//third_party/libdrm:libdrm_config" ] 
  19.  
  20.   public_configs = [ "//third_party/libdrm:libdrm_public_config" ] 
  21.  
  22.   deps = [ 
  23.     "//third_party/libdrm:libdrm"
  24.   ] 
  25.  
  26.   public_deps = [] 

3.加入到OHOS編譯框架,加在weston的依賴項里就可以了

third_party\weston\BUILD.gn

  1. "//third_party/libdrm:libdrm"
  2. "//third_party/libdrm/tests/util/:util"
  3. "//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,就直接放到一起了,近期會更新,感興趣的可以關注,一起討論。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-06-21 11:02:27

系統移植鴻蒙

2021-12-09 10:11:04

鴻蒙HarmonyOS應用

2021-12-31 10:00:30

鴻蒙HarmonyOS應用

2022-01-04 15:35:51

鴻蒙HarmonyOS應用

2021-09-26 10:22:41

鴻蒙HarmonyOS應用

2021-10-09 10:12:39

鴻蒙HarmonyOS應用

2021-11-08 07:19:45

鴻蒙HarmonyOS應用

2022-09-27 15:57:20

OHOS代碼倉庫

2022-09-16 15:01:37

操作系統技術鴻蒙

2022-09-07 15:08:58

操作系統鴻蒙

2022-09-06 15:46:52

speexdsp鴻蒙

2022-09-13 16:10:15

鴻蒙操作系統

2023-06-27 15:12:46

C++三方庫移植

2022-09-14 15:28:19

操作系統鴻蒙

2022-09-15 15:21:22

操作系統鴻蒙

2021-12-29 16:11:11

鴻蒙HarmonyOS應用

2024-03-22 15:28:36

樹莓派Linux

2021-01-25 16:39:08

鴻蒙HarmonyOS添加單板

2021-01-26 13:50:43

鴻蒙HarmonyOS應用開發

2022-09-13 15:54:41

samgr鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内精品久久精品 | 亚洲一区二区三区在线 | 欧美爱爱视频网站 | 精品欧美一区免费观看α√ | 特级做a爰片毛片免费看108 | 人人玩人人干 | 国产精品海角社区在线观看 | 日韩一级黄色毛片 | 久久久久久久av | 精品视频导航 | 91精品国模一区二区三区 | 日本aⅴ中文字幕 | 亚洲国产一区二区三区 | 久热久热 | 中文字幕亚洲一区二区va在线 | 一区二区三区小视频 | 欧美日韩久久精品 | 欧美精品区 | 在线成人 | 日本三级全黄三级三级三级口周 | 熟女毛片 | 成人妇女免费播放久久久 | 国产成人区 | 91视频进入| 欧美精品一区二区在线观看 | 国产精久久久久久 | 久久综合亚洲 | 亚洲一区二区av | 亚洲va国产日韩欧美精品色婷婷 | 黄色国产| 久久电影一区 | 国产分类视频 | 日韩电影免费在线观看中文字幕 | 久久精品一区 | 欧美一级免费看 | 国产高清视频一区 | 久久久一 | 亚洲精品乱码久久久久久9色 | av网站在线播放 | 欧洲精品码一区二区三区免费看 | 在线国产中文字幕 |