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;
}
Android修改Vold支持PCI-E设备自动挂载
猜你喜欢
转载自blog.csdn.net/zhoumushui/article/details/101067691
今日推荐
周排行