storage extsdcard/sdcard1英文什么意思

Android 4.4 KitKat 支持 u 盘功能 - 推酷
Android 4.4 KitKat 支持 u 盘功能
Android U 盘功能实现和分析
u 盘功能实现结果:
u 盘会当成 usb storage 在 Settings Storage 里面显示。
内核需支持 usb host,需支持 FUSE 文件系统,在 FS 选项里面配置即可(CONFIG_FUSE_FS=y)。
Android 的配置
配置 init.&board&.rc
mkdir /storage/udisk0 0000 system system
mkdir /mnt/media_rw/udisk0 0700 media_rw media_rw
service fuse_udisk0 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/udisk0 /storage/udisk0
class late_start
配置 fstab.&board&
/block/sda
/mnt/media_rw/udisk0
voldmanaged=udisk0:auto
配置 overlay
&storage android:mountPoint=&/storage/udisk0&
android:storageDescription=&@string/storage_usb&
android:primary=&false&
android:removable=&true& /&
挂载过程:
/dev/block/vold/8:1 /mnt/media_rw/udisk0 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/fuse /storage/udisk0 fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
root@android:/ # logcat -s Vold MountService
--------- beginning of /dev/log/main
--------- beginning of /dev/log/system
820): Vold 2.1 (the revenge) firing up
820): Volume sdcard1 state changing -1 (Initializing) -& 0 (No-Media)
820): Volume sdcard1 state changing -1 (Initializing) -& 0 (No-Media)
820): Volume udisk0 state changing -1 (Initializing) -& 0 (No-Media)
820): Volume udisk0 state changing 0 (No-Media) -& 2 (Pending)
820): Volume udisk0 state changing 2 (Pending) -& 1 (Idle-Unmounted)
820): Volume sdcard1 state changing 0 (No-Media) -& 2 (Pending)
820): Volume sdcard1 state changing 2 (Pending) -& 1 (Idle-Unmounted)
D/MountService( 1587): got storage path: /storage/sdcard0 description: Internal storage primary: true removable: false emulated: true mtpReserve: 50 allowMassStorage: false maxFileSize: 0
D/MountService( 1587): addVolumeLocked() StorageVolume:
D/MountService( 1587):
mStorageId=65537 mPath=/storage/emulated/0 mDescriptionId=
D/MountService( 1587):
mPrimary=true mRemovable=false mEmulated=true mMtpReserveSpace=50
D/MountService( 1587):
mAllowMassStorage=false mMaxFileSize=0 mOwner=UserHandle{0} mUuid=null
D/MountService( 1587):
mUserLabel=null mState=null
D/MountService( 1587): got storage path: /storage/sdcard1 description: SD card primary: false removable: true emulated: false mtpReserve: 0 allowMassStorage: false maxFileSize:
D/MountService( 1587): addVolumeLocked() StorageVolume:
D/MountService( 1587):
mStorageId=0 mPath=/storage/sdcard1 mDescriptionId= mPrimary=false
D/MountService( 1587):
mRemovable=true mEmulated=false mMtpReserveSpace=0 mAllowMassStorage=false
D/MountService( 1587):
mMaxFileSize= mOwner=null mUuid=null mUserLabel=null mState=null
D/MountService( 1587): got storage path: /storage/udisk0 description: USB storage primary: false removable: true emulated: false mtpReserve: 0 allowMassStorage: false maxFileSize: 0
D/MountService( 1587): addVolumeLocked() StorageVolume:
D/MountService( 1587):
mStorageId=0 mPath=/storage/udisk0 mDescriptionId= mPrimary=false
D/MountService( 1587):
mRemovable=true mEmulated=false mMtpReserveSpace=0 mAllowMassStorage=false
D/MountService( 1587):
mMaxFileSize=0 mOwner=null mUuid=null mUserLabel=null mState=null
W/MountService( 1587): Duplicate state transition (unmounted -& unmounted) for /storage/sdcard1
D/MountService( 1587): volume state changed for /storage/sdcard1 (unmounted -& removed)
W/MountService( 1587): Duplicate state transition (unmounted -& unmounted) for /storage/udisk0
820): /dev/block/vold/8:1 being considered for volume udisk0
820): Volume udisk0 state changing 1 (Idle-Unmounted) -& 3 (Checking)
D/MountService( 1587): volume state changed for /storage/udisk0 (unmounted -& checking)
D/MountService( 1587): sendStorageIntent Intent { act=android.intent.action.MEDIA_CHECKING dat=file:///storage/udisk0 (has extras) } to UserHandle{-1}
820): Filesystem check completed OK
820): blkid identified as /dev/block/vold/8:1: UUID=&402E-0EE3& TYPE=&vfat&
820): Volume udisk0 state changing 3 (Checking) -& 4 (Mounted)
D/MountService( 1587): volume state changed for /storage/udisk0 (checking -& mounted)
D/MountService( 1587): sendStorageIntent Intent { act=android.intent.action.MEDIA_MOUNTED dat=file:///storage/udisk0 (has extras) } to UserHandle{-1}
W/MountService( 1587): Duplicate state transition (mounted -& mounted) for /storage/emulated/0
Vold 解析 fstab 文件
在 Android 4.4 中, Vold 会解析 vold.&hardware& 文件
property_get(&ro.hardware&, propbuf, &&);
snprintf(fstab_filename, sizeof(fstab_filename), FSTAB_PREFIX&%s&, propbuf);
fstab = fs_mgr_read_fstab(fstab_filename);
if (!fstab) {
SLOGE(&failed to open %s\n&, fstab_filename);
return -1;
其中&#define FSTAB_PREFIX &/fstab.& &所以,配置的 fatab 文件必须放在根目录, Vold 是 android 的后台进程,将会一直监听 fatab 里面标记为&voldmanaged 的项目
如果没有标记,则略过。没有标记的项目。可以交给 init 的 mount 命令处理,但是不会监听,所以你可以将recovery 和 cache 目录这样只需启动是挂载的目录项放在 fatab
里面交给 init 的 mount 命令处理,例如三星&device/samsung/manta/fstab.manta&
# Android fstab file.
&mnt_point&
&mnt_flags and opt
&fs_mgr_flags&
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
/dev/block/platform/dw_mmc.0/by-name/system
/dev/block/platform/dw_mmc.0/by-name/cache
noatime,nosuid,nodev,nombl
k_io_submit,errors=panic
wait,check
/dev/block/platform/dw_mmc.0/by-name/userdata
noatime,nosuid,nodev,nombl
k_io_submit,errors=panic
wait,check,encryptable=/dev/block/platform/dw_mmc.0/by-name/metadata
/dev/block/platform/dw_mmc.0/by-name/efs
noatime,nosuid,nodev,ro
/dev/block/platform/dw_mmc.0/by-name/boot
/dev/block/platform/dw_mmc.0/by-name/recovery
/dev/block/platform/dw_mmc.0/by-name/misc
/dev/block/mmcblk0boot0
/bootloader
在系统启动调用 mount :
mkdir /factory 0775 radio radio
mount_all /fstab.manta
同理, init 的 mount 也会忽略标记为&voldmanaged 的项目
init 的 mount 命令与 vold 的 mount 管理大有不同,两者不能混用。
MountService 与 Vold 联合挂载 u 盘
MountService 与 Vold 会建立 socket 通信,具体的挂载操作都是下发命令,交给 Vold 去完成。 MountService 会解析我们配置的&storage_list.xml&
private void readStorageListLocked() {
mVolumes.clear();
mVolumeStates.clear();
Resources resources = mContext.getResources();
int id = com.android.internal.R.xml.storage_
XmlResourceParser parser = resources.getXml(id);
AttributeSet attrs = Xml.asAttributeSet(parser);
XmlUtils.beginDocument(parser, TAG_STORAGE_LIST);
while (true) {
XmlUtils.nextElement(parser);
Vold 获取到 list 里面的设备变化时将会发送 state change event, MountService 在 onEvent 处理各种不同 state ,其中获取到设备插入,将会执行挂载操作:
if (code == VoldResponseCode.VolumeDiskInserted) {
new Thread(&MountService#VolumeDiskInserted&) {
public void run() {
if ((rc = doMountVolume(path)) != StorageResultCode.OperationSucceeded) {
Slog.w(TAG, String.format(&Insertion mount failed (%d)&, rc));
} catch (Exception ex) {
Slog.w(TAG, &Failed to mount media on insertion&, ex);
}.start();
doMountVolume &只是发送 mount 命令给 Vold&
private int doMountVolume(String path) {
int rc = StorageResultCode.OperationS
final StorageV
synchronized (mVolumesLock) {
volume = mVolumesByPath.get(path);
if (DEBUG_EVENTS) Slog.i(TAG, &doMountVolume: Mouting & + path);
mConnector.execute(&volume&, &mount&, path);
最终 Vold 里面执行相应的 mount 操作,我们的 u 盘是 vfat 格式,我只测试了这个格式, Linux 下的格式没有测试,因为 Vold 只支持 fat 和 ext4
int VolumeManager::mountVolume(const char *label) {
Volume *v = lookupVolume(label);
errno = ENOENT;
return -1;
return v-&mountVol();
if (Fat::doMount(devicePath, getMountpoint(), false, false, false,
AID_MEDIA_RW, AID_MEDIA_RW, 0007, true)) {
SLOGE(&%s failed to mount via VFAT (%s)\n&, devicePath, strerror(errno));
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示restore_from_storage_sdcard1更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
使用您的微博帐号登录,即刻尊享微博用户专属服务。
使用您的QQ帐号登录,即刻尊享QQ用户专属服务。
使用您的人人帐号登录,即刻尊享人人用户专属服务。
按住视频可进行拖动
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
收藏成功,可进入查看所有收藏列表
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看:
/storage/sdcard1/17rd/17rd videos/VIDEO_349.mp4
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/164eL4
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/164eL4
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
爸爸去哪儿2游戏 立即参与
/storage/sdcard1/17rd/17rd videos/VIDEO_349.mp4
播放量数据:
你可能还想订阅他们:
&正在加载...
周围人都在搜-百度搜索提供
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
安装爱奇艺视频客户端,
马上开始为您下载本片
5秒后自动消失
&li data-elem="tabtitle" data-seq="{{seq}}"&
&a href="javascript:void(0);"&
&span>{{start}}-{{end}}&/span&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"&
&a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《》剧集:
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入300字
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制}

我要回帖

更多关于 sdcard是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信