Ubuntu Kylin技术论坛

 找回密码

在RK3399开发板上移植KylOS

已有 120 次阅读2019-1-3 09:14 |个人分类:KylOS

近期在RK3399开发板上基于Linux4.4的内核移植KylOS,涉及到一些MTP服务和摄像头的问题,现总结如下:

1. MTP不可用问题
在4.4的内核中引入了ConfigFS系统,控制USB设备功能的文件变为了/config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/compatible_id,因此需要修改/dom/system/gonk/AutoMounter.cpp,

@@ -73,7 +73,8 @@ USING_MTP_NAMESPACE
 #define GB_SYS_UMS_ENABLE     "/sys/devices/virtual/usb_composite/usb_mass_storage/enable"
 #define GB_SYS_USB_CONFIGURED "/sys/devices/virtual/switch/usb_configuration/state"
 
-#define ICS_SYS_USB_FUNCTIONS "/sys/devices/virtual/android_usb/android0/functions"
+//#define ICS_SYS_USB_FUNCTIONS "/sys/devices/virtual/android_usb/android0/functions"
+#define ICS_SYS_USB_FUNCTIONS "/config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/compatible_id"
 #define ICS_SYS_UMS_DIRECTORY "/sys/devices/virtual/android_usb/android0/f_mass_storage"
 #define ICS_SYS_MTP_DIRECTORY "/sys/devices/virtual/android_usb/android0/f_mtp"
 #define ICS_SYS_USB_STATE     "/sys/devices/virtual/android_usb/android0/state"
@@ -1195,6 +1196,9 @@ void AutoMounter::GetStatus(bool& umsAvail, bool& umsConfigured, bool& umsEnable
     mtpEnabled = false;
   }
 
+  mtpConfigured = true;
+    mtpEnabled = true;
+
   rndisConfigured = strstr(functionsStr, USB_FUNC_RNDIS) != nullptr;
 }

因为ICS_SYS_MTP_DIRECTORY不存在,代码修改里面强制将Mtp使能,后续需要进一步改进。

2. Camera没有预览界面、打开延迟问题
预览功能是ANativeWindow的Buffer数量设置不对,需要4个以上,而Camera驱动只设置了4个,需要做相应的修改。
655  #define CONFIG_CAMERA_PREVIEW_BUF_CNT 8
656 #define CONFIG_CAMERA_DISPLAY_BUF_CNT       8                                                                                                                           
657 #define CONFIG_CAMERA_VIDEO_BUF_CNT 8
658 #define CONFIG_CAMERA_VIDEOENC_BUF_CNT      8
659 #define CONFIG_CAMERA_ISP_BUF_REQ_CNT       8

摄像头打开慢问题是因为Android 6的camera service初始化时会确认media.camera.proxy服务是否启动,而media.camera.proxy服务是Java服务,在KylOS系统中是禁用Java的。camera service需要不断确认media.camera.proxy服务是否可用,导致camera service卡在这里。因此需要做相应修改,如下:
@@ -253,7 +253,7 @@ void CameraService::onFirstRef()
 
 sp<ICameraServiceProxy> CameraService::getCameraServiceProxy() {
     sp<IServiceManager> sm = defaultServiceManager();
-    sp<IBinder> binder = sm->getService(String16("media.camera.proxy"));
+    sp<IBinder> binder = sm->checkService(String16("media.camera.proxy"));
     if (binder == nullptr) {
         return nullptr;
     }


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|Ubuntu Kylin    

GMT+8, 2020-5-26 05:53 , Processed in 0.015205 second(s), 19 queries .

Copyright ©2013-2020 Ubuntu Kylin. All Rights Reserved .

ICP No. 15002470-2 Tianjin

返回顶部