android存储
文章平均质量分 82
kc专栏
深入探索android Framework层代码,博客持续更新中!!!
展开
-
android6.0 fuse文件系统的挂载和卸载问题
android4.4 的时候vold,也是利用fuse文件系统达到,将sd卡的目录(storage目录)获取sd实际挂载目录(mnt/media_rw)的权限。但是android4.4的时候vold只是写属性而已,然后init监测这个属性,属性改变时,才会去启动sdcard进程。然后android6.0直接在vold中,fork一个进程直接开启sdcard进程挂载fuse文件系统。并且在卸载s原创 2016-05-19 20:22:31 · 10036 阅读 · 0 评论 -
android 6.0sd卡内部存储 & 外部存储
android6.0 把sd卡可以设置成内部存储。一、fatab文件匹配我们先来看下,vold的main函数:main函数在创建了VolumeManager后,调用了如下函数: if (process_config(vm)) { PLOG(ERROR) << "Error reading configuration... continuing anyways"原创 2016-05-30 20:42:05 · 13694 阅读 · 2 评论 -
android 6.0 vold shutdown流程
这篇博客我们主要分析下vold在关机时候的流程,先看如下代码:一、接收shutdown命令这是vold接收MountService的命令,我们主要看下shutdown命令int CommandListener::VolumeCmd::runCommand(SocketClient *cli, int原创 2016-05-18 10:10:43 · 2907 阅读 · 0 评论 -
Android6.0 MountService和vold详解(三) vold SD卡、otg
既上面两篇博客,继续分析vold、对外置SD卡和OTG的分析:一、process_config函数上一篇我们再main函数中分析了VolumeManager的start函数,这次我们接下来分析process_config函数static int process_config(VolumeManager *vm) { std::string path(android::v原创 2015-12-31 14:30:16 · 12978 阅读 · 2 评论 -
Android6.0 MountService和vold详解(二) vold的emulatedvolume
Android6.0vold除了通信部分改动不大,其他基本改动很大,那我们就从头开始分析一下吧。先看下main函数中下面这段代码 if (!(vm = VolumeManager::Instance())) {//new 了volumemanager,构造函数中就是一些成员变量初始化 LOG(ERROR) << "Unable to create VolumeMana原创 2015-12-30 14:28:24 · 8459 阅读 · 2 评论 -
Android6.0 MountService和vold详解(一)Mountservice的初始化
Android6.0对存储这块的改动还是比较大的,前面我们讲过了Android5.1上相关的代码,这里我们主要讲下区别,至于相同的部分,比如通信部分就不讲了,大家感兴趣可以看我之前5.1MountService和vold相关的博客。一、MountService实例化我们先从MountService的实例化开始:mSystemServiceManager.startService原创 2015-12-29 19:54:05 · 10167 阅读 · 0 评论 -
深入Mountservice vold(六) handleDiskRemoved handlePartitionRemoved(and5.1)
今天我们来看看vold的拔走存储设备的两个函数handleDiskRemoved handlePartitionRemoved在vold中,当拔走sd卡,或者拔走otg的u盘等会调用DirectVolume::handleBlockEvent 函数里的handleDiskRemoved 和 handlePartitionRemoved函数: } else原创 2015-09-09 10:55:49 · 1246 阅读 · 0 评论 -
深入MountService、vold(五) MountService中通信(NativeDaemonConnector)(and5.1)
整个MountService和vold是使用NativeDaemonConnector,今天分析下:在MountService的构造函数中有如下: mConnector = new NativeDaemonConnector(this, "vold", MAX_CONTAINERS * 2, VOLD_TAG, 25, null);//原创 2015-08-12 17:13:41 · 3214 阅读 · 0 评论 -
深入MountService、vold(四) 大容量存储和MountService的消息机制(and5.1)
大容量存储的接口在StorageManager中的代码如下: public void enableUsbMassStorage() { try { mMountService.setUsbMassStorageEnabled(true); } catch (Exception ex) { Log.e(TAG,原创 2015-08-10 16:37:36 · 2475 阅读 · 0 评论 -
深入解析MountService、vold(三)--fuse_sdcard1(and5.1)
在vold执行mount命令时,挂载完之后会起来一个Service,我们今天来分析下其作用:int Volume::mountVol() { dev_t deviceNodes[4]; int n, i, rc = 0; char errmsg[255]; int flags = getFlags(); bool providesAsec = (fla原创 2015-07-29 19:55:03 · 5727 阅读 · 0 评论 -
深入解析vold、MountService(二)(and5.1)
在我的博客里,已经对vold和MountService分析过了。http://blog.csdn.net/kc58236582/article/details/46122979这里在进一步分析。重复的就不再分析了:main函数里面主要创建了NetlinkManager、VolumeManager、CommandListener这都在另一个博客中分析过了,这里我们主要分析下process_c原创 2015-07-25 11:17:16 · 3941 阅读 · 0 评论 -
深入分析vold、MountService(and5.1)
Vold:Volume Daemon,管理和控制Android平台外部存储设备的后台进程,包括SD卡的插拔时间检测、SD卡挂载、卸载、格式化等等。MountService和Vold交互,比如会发送一些广播,是接受到了vold的信息之后采取的动作。另外也会向vold发送挂载SD卡等命令。Vold中的NetlinkManager模块(NM)接受来自linux内核的uevent消息。例如原创 2015-05-28 14:53:45 · 3012 阅读 · 1 评论 -
android6.0 sm进程(获取MountService信息)
一、编译我们先来看看sm的Android.mk# Copyright 2015 The Android Open Source Project#LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_MODULE := sminc原创 2016-05-18 20:09:45 · 3801 阅读 · 0 评论 -
Setting卸载SD卡,可以格式化,卸载过程中还可以卸载问题
我们首先来看setting的代码在Memory.java中实现了一个StorageEventListener : StorageEventListener mStorageListener = new StorageEventListener() { @Override public void onStorageStateChanged(Str原创 2015-07-21 08:53:31 · 2771 阅读 · 0 评论 -
Setting中格式化SD卡
今天分析setting中直接格式化的流程,直接上代码:Setting中的MediaFormat.java中的mFinalClickListener 这个回调,就是调用Format的地方:其是其了一个Service。 private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {原创 2015-07-28 19:23:46 · 2772 阅读 · 1 评论 -
android 6.0 修改vold check sd卡同步改成异步机制
android原生在vold中检查到kernel上报的event信息(sd卡)会发给MountService,然后MountService通过localSocket发给vold,让vold去mount这张sd卡。在vold中这个通信机制,在在一个死循环,select函数中执行,也就是vold处理MountService发给来的信息是顺序的,如果线程卡住了,select函数也执行不下去,整个Moun原创 2016-03-17 10:55:41 · 4680 阅读 · 2 评论 -
Android6.0 storage目录sd卡存储的路径创建
之前一直很疑惑,android6.0上sd卡挂载storage下的sd卡路径是什么时候创建的。因为挂载sd卡的PublicVolume,负责创建mount路径,然后挂载。接着会创建几个fuse路径,如下:1./mnt/runtime/default/2./mnt/runtime/read/3./mnt/runtime/write/然后会把这个mount的路径fuse到上面这原创 2016-01-25 10:04:49 · 11518 阅读 · 4 评论 -
Android6.0 otg插入U盘 流程
之前分析过vold插入sd卡的流程,本以为otg插入U盘与sd卡走的流程一样。想不到还是有差别的,下面我们来分析下:一、kAdoptable flag先来看otg插入卡,后handleBlockEvent的流程void VolumeManager::handleBlockEvent(NetlinkEvent *evt) { std::lock_guard lock(mL原创 2016-01-25 09:44:56 · 15452 阅读 · 10 评论 -
在Android6.0上给外置SD卡增加一个路径
看了前面的博客大家都发现,android6.0上vold对外置sd卡挂载都采用在storage增加一个sd卡的uuid的名字,作为文件名。但是之前我们系统中很多系统应用都是直接写死的外置sd卡路径,是storage/sdcard1,那我们如何尽量少修改应用,并且在平台上左比较少的改动增加一个storage/scard1的外置sd卡路径呢。符号链接:我们熟悉之前的代码就知道:在Pub原创 2016-01-18 15:26:32 · 12440 阅读 · 7 评论 -
Android6.0 平台应用获取外置sd卡路径
Android6.0上会根据卡的种类和卡的挂载状态来动态生成挂载路径,因此不建议大家在按照以前的方法获取外置SD卡或者usbotg的路径,建议按照以下方法来获取: … …StorageManagermStorageManager = StorageManager.from(context);finalList vols = mStorage原创 2016-01-15 16:30:40 · 12877 阅读 · 10 评论 -
android sdcard存储方案三(基于fuse文件系统):
前面我的两篇文章重点描述了android基于fuse的sdcard存储方案,请参考:《android sdcard存储方案(基于fuse文件系统):之一》 和《 android sdcard存储方案(基于fuse文件系统):之二》这两篇文章主要是为了说明清楚基于fuse的sdcard存储原理,及特点。同时,前面我的文章也介绍了一些关于wrapfs文件系统的知识,只转载 2015-12-31 17:27:23 · 3639 阅读 · 0 评论 -
android sdcard存储方案二(基于fuse文件系统)
续《android sdcard存储方案(基于fuse文件系统):之一》,再聊聊基于android sdcard存储方案(基于fuse文件系统):之二,以后有空再谈谈该方案的缺点,及优化方案。一、android GB 及JB、KK版本内置sdcard效果对比图从上面效果对比图,我们可以发现android fuse sdcard 有如下两个优点:1、使用fuse后 /转载 2015-12-31 17:20:00 · 2837 阅读 · 0 评论 -
android sdcard存储方案一(基于fuse文件系统)
一、 启动三个相关service转载地址:http://blog.csdn.net/fybon/article/details/25904215按启动顺序,如下:service vold /system/bin/vold class core socket vold stream 0660 root mountservice in转载 2015-12-31 17:17:53 · 8998 阅读 · 1 评论 -
Android 总结外置 内置SD卡路径问题
我们先来看下android5.1 init.rc中 mkdir /mnt/shell/emulated 0700 shell shell mkdir /storage/emulated 0555 root root mkdir /storage/sdcard1 0000 system system mkdir /storage/usbotg 0700 system原创 2015-12-03 16:10:42 · 17983 阅读 · 1 评论 -
Android 双u盘方案
1 L1813系统上双U盘设计方案——系统设计1.1 方案背景Android原生的磁盘管理方案,设计的思想是将EMMC上的空间通过sdcard的server模拟成一个StorageVolume,供用户作为外部存储空间使用,而该部分空间是不能通过切换大容量存储在PC侧供用户使用,只能通过MTP协议,将手机和PC侧互联,从而在PC侧读取手机侧的外部存储原创 2015-11-03 16:55:15 · 6100 阅读 · 0 评论 -
Android查询 每个进程的权限
有时候我们需要看某个app是否有某个权限,下面我们有两个方法可以确定该应用是否有该权限 方法一:比如:我们想看文件浏览器是否有media_rw的权限,我们就先看ps,找到文件浏览器的pidu0_a31 6653 217 702776 60112 SyS_epoll_ b6d21408 S com.android.fileexplorerroot 6681 ...原创 2016-02-02 10:14:10 · 5604 阅读 · 0 评论