展锐平台:关于云电脑内USB重定向问题的修改

张开发
2026/4/3 12:59:46 15 分钟阅读
展锐平台:关于云电脑内USB重定向问题的修改
在做云电脑云平台之类的项目是通常在云电脑内都需要支持能够访问本地介入的U盘、USB CAM等设备需要支持USB重定向。这类问题通常可以从一下几个方面入手修改1、添加节点访问权限这里主要是为vedio和usb相关节点添加权限可以在device/sprd/vnd_mpool/下面的mk文件中进行添加diff --git a/module/vendor/ueventd/msoc/qogirn6pro/qogirn6pro.ueventd.rc b/module/vendor/ueventd/msoc/qogirn6pro/qogirn6pro.ueventd.rc index ccae015..da1d2ab 100755 --- a/module/vendor/ueventd/msoc/qogirn6pro/qogirn6pro.ueventd.rc b/module/vendor/ueventd/msoc/qogirn6pro/qogirn6pro.ueventd.rc -7,4 7,7 /dev/block/by-name/l_agdsp_* 0660 system system -/dev/video0 0660 system camera \ No newline at end of file /dev/video0 0666 system camera /dev/video1 0666 system camera /dev/bus/usb* 0777 system system \ No newline at end of file2、允许访问外部存储节点修改主要在system/core和system/vold下diff --git a/rootdir/init.rc b/rootdir/init.rc index e800a0dc2..1dc6af543 100644 --- a/rootdir/init.rc b/rootdir/init.rc -267,7 267,7 on init mkdir /mnt/secure/asec 0700 root root mkdir /mnt/asec 0755 root system mkdir /mnt/obb 0755 root system - mkdir /mnt/media_rw 0750 root external_storage mkdir /mnt/media_rw 0777 root external_storage mkdir /mnt/user 0755 root root mkdir /mnt/user/0 0755 root root mkdir /mnt/user/0/self 0755 root root --diff --git a/VolumeManager.cpp b/VolumeManager.cpp index 04ff603..f601c52 100755 --- a/VolumeManager.cpp b/VolumeManager.cpp -785,7 785,7 static bool remountStorageDirs(int nsFd, const char* android_data_dir, const cha for (int i 0; i size; i) { // Create package dir and bind mount it to the actual one. - if (TEMP_FAILURE_RETRY(mkdir(targets[i], 0700)) -1) { if (TEMP_FAILURE_RETRY(mkdir(targets[i], 0777)) -1) { async_safe_format_log(ANDROID_LOG_ERROR, vold, Failed to mkdir %s %s, targets[i], strerror(errno)); return false; -858,7 858,7 bool VolumeManager::forkAndRemountStorage(int uid, int pid, bool doUnmount, PLOG(ERROR) Failed to create dir: targets_cstr[i]; return false; } - status EnsureDirExists(sources_cstr[i], 0771, AID_MEDIA_RW, AID_MEDIA_RW); status EnsureDirExists(sources_cstr[i], 0777, AID_MEDIA_RW, AID_MEDIA_RW); if (status ! OK) { PLOG(ERROR) Failed to create dir: sources_cstr[i]; return false; diff --git a/model/ObbVolume.cpp b/model/ObbVolume.cpp index b64c1ba..9e079d2 100644 --- a/model/ObbVolume.cpp b/model/ObbVolume.cpp -67,7 67,7 status_t ObbVolume::doMount() { auto path StringPrintf(/mnt/obb/%s, getId().c_str()); setPath(path); - if (fs_prepare_dir(path.c_str(), 0700, AID_ROOT, AID_ROOT)) { if (fs_prepare_dir(path.c_str(), 0777, AID_ROOT, AID_ROOT)) { PLOG(ERROR) getId() failed to create mount point; return -1; } diff --git a/model/PublicVolume.cpp b/model/PublicVolume.cpp index 587c984..18085aa 100755 --- a/model/PublicVolume.cpp b/model/PublicVolume.cpp -78,7 78,7 status_t PublicVolume::initAsecStage() { } } - if (TEMP_FAILURE_RETRY(mkdir(securePath.c_str(), 0700))) { if (TEMP_FAILURE_RETRY(mkdir(securePath.c_str(), 0777))) { if (errno ! EEXIST) { PLOG(WARNING) getId() creating ASEC stage failed; return -errno; -137,20 137,20 status_t PublicVolume::doMount() { setPath(mRawPath); } - if (fs_prepare_dir(mRawPath.c_str(), 0700, AID_ROOT, AID_ROOT)) { if (fs_prepare_dir(mRawPath.c_str(), 0777, AID_ROOT, AID_ROOT)) { PLOG(ERROR) getId() failed to create mount points; return -errno; } if (mFsType vfat) { if (vfat::Mount(mDevPath, mRawPath, false, false, false, AID_ROOT, - (isVisible ? AID_MEDIA_RW : AID_EXTERNAL_STORAGE), 0007, true)) { (isVisible ? AID_MEDIA_RW : AID_EXTERNAL_STORAGE), 0000, true)) { PLOG(ERROR) getId() failed to mount mDevPath; return -EIO; } } else if (mFsType exfat) { if (exfat::Mount(mDevPath, mRawPath, AID_ROOT, - (isVisible ? AID_MEDIA_RW : AID_EXTERNAL_STORAGE), 0007)) { (isVisible ? AID_MEDIA_RW : AID_EXTERNAL_STORAGE), 0000)) { PLOG(ERROR) getId() failed to mount mDevPath; return -EIO; } -166,10 166,10 status_t PublicVolume::doMount() { } if (mUseSdcardFs) { - if (fs_prepare_dir(mSdcardFsDefault.c_str(), 0700, AID_ROOT, AID_ROOT) || - fs_prepare_dir(mSdcardFsRead.c_str(), 0700, AID_ROOT, AID_ROOT) || - fs_prepare_dir(mSdcardFsWrite.c_str(), 0700, AID_ROOT, AID_ROOT) || - fs_prepare_dir(mSdcardFsFull.c_str(), 0700, AID_ROOT, AID_ROOT)) { if (fs_prepare_dir(mSdcardFsDefault.c_str(), 0777, AID_ROOT, AID_ROOT) || fs_prepare_dir(mSdcardFsRead.c_str(), 0777, AID_ROOT, AID_ROOT) || fs_prepare_dir(mSdcardFsWrite.c_str(), 0777, AID_ROOT, AID_ROOT) || fs_prepare_dir(mSdcardFsFull.c_str(), 0777, AID_ROOT, AID_ROOT)) { PLOG(ERROR) getId() failed to create sdcardfs mount points; return -errno; }3、有些情况下添加了节点权限允许访问外部存储节点后依然可能出现usb重定向失败的问题这个时候可以尝试在预置apk时将apk解压出来的so预置进去不要只预置apk。还有问题就要抓log进行分析了。

更多文章