阅读:6304回复:2

Android设备挂载移动硬盘到一个固定的路径

楼主#
更多 发布于:2019-07-08 19:15
客户需求:
之前为某个客户做了一个硬盘播放盒,安卓盒子外接移动硬盘,由于安卓系统默认挂载的路径默认是根据移动硬盘生成UUID来挂载的,客户需要挂载到他们指定的一个路径/mnt/sata,方便他们APK访问这个路径。
修改如下:

diff --git a/PublicVolume.cpp b/PublicVolume.cppold mode 100644
new mode 100755index 4986f2e..c29b523
--- a/PublicVolume.cpp+++ b/PublicVolume.cpp
@@ -36,6 +36,7 @@ #include <sys/types.h>
 #include <sys/wait.h>
+ using android::base::StringPrintf;
  namespace android {
@@ -55,6 +56,7 @@ PublicVolume::PublicVolume(dev_t device) : PublicVolume::PublicVolume(const std::string& physicalDevName) :
         VolumeBase(Type::kPublic), mFusePid(0), mJustPhysicalDev(true) {     setId(physicalDevName);
+ LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzphysicalDevName==" << physicalDevName;     mDevPath = StringPrintf("/dev/block/%s", getId().c_str());
 }
@@ -63,7 +65,7 @@ PublicVolume::~PublicVolume() {
 status_t PublicVolume::readMetadata() {     status_t res = ReadMetadataUntrusted(mDevPath, mFsType, mFsUuid, mFsLabel);
-    notifyEvent(ResponseCode::VolumeFsTypeChanged, mFsType);+    notifyEvent(ResponseCode::VolumeFsTypeChanged, mFsLabel);
     // TODO: find the Uuid of srdisk     // If mFsUuid of publicVolume is empty,
     // it will cause systemUi crash when it is mounted@@ -101,6 +103,7 @@ status_t PublicVolume::initAsecStage() {
  status_t PublicVolume::doCreate() {
     if (mJustPhysicalDev) return 0;+ LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzmDevice==" << mDevice;
     return CreateDeviceNode(mDevPath, mDevice); }
 @@ -259,10 +262,49 @@ status_t PublicVolume::doMount() {
         LOG(VERBOSE) << "Waiting for FUSE to spin up...";         usleep(50000); // 50ms
     }-
+ + LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzmDevPath==" << mDevPath;
+ LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzmFsType==" << mFsType;+ LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzmFsUuid==" << mFsUuid;
+ LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzmFsLabel==" << mFsLabel;+    notifyEvent(ResponseCode::VolumeFsTypeChanged, mFsLabel);
+// if(access("/sdcard/uuid.txt",0)){+//  FILE *fp = NULL;
+// fp = fopen("/sdcard/uuid.txt", "w+");  +// fprintf(fp,mFsUuid.c_str());
+// fclose(fp);+// }
+// FILE *fp = NULL;+// char buff[255];
+//  fp = fopen("/sdcard/uuid.txt", "r");+//  fscanf(fp, "%s", buff);
+//  printf("uuid : %s\n", buff ); +//fclose(fp);
+//  LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzuuid==" << buff;+ if(access("/mnt/sata",0)&&mFsType=="ntfs"&&mFsUuid.length()==16){
+ LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzmFsType==" << mFsType;+ LOG(VERBOSE) << "zzzzzzzzzzzzzzzzzzmFsUuid.length()==" << mFsUuid.length();
+ linkExternal();+ }
+      return OK;
 }
+void PublicVolume::linkExternal() {  +    std::string source(getPath());  
+  +    std::string target("/mnt/sata");  
+    if (TEMP_FAILURE_RETRY(unlink(target.c_str()))) {  +        if (errno != ENOENT) {  
+            LOG(VERBOSE) << "Failed to unlink " << target.c_str() << strerror(errno);  +        }  
+    }  +    LOG(DEBUG) << "Linking " << source << " to " << target;  
+    if (TEMP_FAILURE_RETRY(symlink(source.c_str(), target.c_str()))) {  +        LOG(ERROR) << "Failed to link " << source.c_str() << " to "  
+            << target.c_str() <<  strerror(errno);  +    }
+}
  status_t PublicVolume::doUnmount() {
     if (mFusePid > 0) {         kill(mFusePid, SIGTERM);
diff --git a/PublicVolume.h b/PublicVolume.hold mode 100644
new mode 100755index e7f6bfb..c4186d4

--- a/PublicVolume.h+++ b/PublicVolume.h
@@ -48,6 +48,7 @@ protected:     status_t doDestroy() override;
     status_t doMount() override;     status_t doUnmount() override;
+ void linkExternal();     status_t doFormat(const std::string& fsType) override;
     bool isSrdiskMounted() { return mSrMounted;}

这个方法是将USB口新接入的存储设备的挂载路径链接到一个指定的路径比如:/mnt/sata/


注意:需要关闭EnableSelinux 即改为宽容模式


方法1
修改UBoot
安卓6.0之后默认EnableSelinux=enforcing 打开的
改为permissive 关闭


方法2(用于调试)
echo 0 > /sys/fs/selinux/enforce 也可以在init.rc关闭

最新喜欢:

VastStarGamesVastSt...
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
沙发#
发布于:2019-07-08 19:22
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
yam
yam
论坛版主
论坛版主
  • 社区居民
  • 优秀斑竹
  • VIP会员
  • 荣誉会员
板凳#
发布于:2019-07-09 15:02
游客

返回顶部