Android修改Vold支持PCI-E设备自动挂载


diff --git a/device/rockchip/rk3399/fstab.rk30board.bootmode.emmc b/device/rockchip/rk3399/fstab.rk30board.bootmode.emmc
index d1a4333..6aeb014 100755
--- a/device/rockchip/rk3399/fstab.rk30board.bootmode.emmc
+++ b/device/rockchip/rk3399/fstab.rk30board.bootmode.emmc
@@ -22,4 +22,7 @@
# for usb3.0
/devices/platform/usb@*/*.dwc3*     auto vfat defaults      voldmanaged=usb:auto
+# pcie
+/devices/platform/*.pcie*           auto vfat defaults     voldmanaged=pcie:auto
+
/dev/block/zram0                                none                swap      defaults                                              zramsize=533413200
diff --git a/frameworks/base/core/java/android/os/storage/DiskInfo.java b/frameworks/base/core/java/android/os/storage/DiskInfo.java
index 9114107..a6edae5 100644
--- a/frameworks/base/core/java/android/os/storage/DiskInfo.java
+++ b/frameworks/base/core/java/android/os/storage/DiskInfo.java
@@ -47,6 +47,7 @@ public class DiskInfo implements Parcelable {
     public static final int FLAG_DEFAULT_PRIMARY = 1 << 1;
     public static final int FLAG_SD = 1 << 2;
     public static final int FLAG_USB = 1 << 3;
+    public static final int FLAG_PCIE= 1 << 5;
     public final String id;
     public final int flags;
@@ -128,6 +129,11 @@ public class DiskInfo implements Parcelable {
         return (flags & FLAG_USB) != 0;
     }
+    public boolean isPcie()
+    {        
+        return (flags & FLAG_PCIE) != 0;
+    }
+
     @Override
     public String toString() {
         final CharArrayWriter writer = new CharArrayWriter();
diff --git a/system/vold/Disk.cpp b/system/vold/Disk.cpp
index 1103b0d..8b433d1 100755
--- a/system/vold/Disk.cpp
+++ b/system/vold/Disk.cpp
@@ -68,6 +68,7 @@ static const unsigned int kMajorBlockScsiP = 135;
static const unsigned int kMajorBlockMmc = 179;
static const unsigned int kMajorBlockExperimentalMin = 240;
static const unsigned int kMajorBlockExperimentalMax = 254;
+static const unsigned int kMajorBlockPcie = 259;
static const char* kGptBasicData = "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7";
static const char* kGptAndroidMeta = "19A710A2-B3CA-11E4-B026-10604B889DCF";
@@ -261,6 +262,18 @@ status_t Disk::readMetadata() {
        }
         break;
     }
+
+    case kMajorBlockPcie: {
+        std::string path(mSysPath + "/device/device/vendor");
+        std::string tmp;
+        if (!ReadFileToString(path, &tmp)) {
+            PLOG(WARNING) << "Failed to read vendor from " << path;
+            return -errno;
+        }
+        mLabel = tmp;
+        break;
+    }
+
     default: {
         if (isVirtioBlkDevice(majorId)) {
             LOG(DEBUG) << "Recognized experimental block major ID " << majorId
@@ -556,6 +569,14 @@ int Disk::getMaxMinors() {
         }
         return atoi(tmp.c_str());
     }
+    case kMajorBlockPcie: {
+        std::string tmp;
+        if (!ReadFileToString(kSysfsMmcMaxMinors, &tmp)) {
+            LOG(ERROR) << "Failed to read max minors";
+            return -errno;
+        }
+        return atoi(tmp.c_str());
+    }
     default: {
         if (isVirtioBlkDevice(majorId)) {
             // drivers/block/virtio_blk.c has "#define PART_BITS 4", so max is
diff --git a/system/vold/Disk.h b/system/vold/Disk.h
index 77ec7df..6662fa4 100644
--- a/system/vold/Disk.h
+++ b/system/vold/Disk.h
@@ -52,6 +52,7 @@ public:
         kUsb = 1 << 3,
         /* Flag that disk is EMMC internal */
         kEmmc = 1 << 4,
+        kPcie = 1 << 5,
     };
     const std::string& getId() { return mId; }
diff --git a/system/vold/VolumeManager.cpp b/system/vold/VolumeManager.cpp
index 5cc60a1..f766c5a 100644
--- a/system/vold/VolumeManager.cpp
+++ b/system/vold/VolumeManager.cpp
@@ -302,11 +302,14 @@ void VolumeManager::handleBlockEvent(NetlinkEvent *evt) {
                 // emulator-specific; see Disk.cpp for details) devices are SD,
                 // and that everything else is USB
                 int flags = source->getFlags();
+                LOG(VERBOSE) << "handleBlockEvent with action  kAdd flags" << flags;
                 if (major == kMajorBlockMmc
                     || (android::vold::IsRunningInEmulator()
                     && major >= (int) kMajorBlockExperimentalMin
                     && major <= (int) kMajorBlockExperimentalMax)) {
                     flags |= android::vold::Disk::Flags::kSd;
+                } else if (major == kMajorBlockPcie) {
+                    flags |= android::vold::Disk::Flags::kPcie;
                 } else {
                     flags |= android::vold::Disk::Flags::kUsb;
                 }
发布了234 篇原创文章 · 获赞 64 · 访问量 95万+

猜你喜欢

转载自blog.csdn.net/zhoumushui/article/details/101067691