如何让 Android 自动挂载 SD 卡

android 6.0 修改vold check sd卡同步改成异步机制 android原生在vold中检查到kernel上报的event信息(sd卡)会发给MountService,然后MountService通过localSocket发给vold,让vold去mount这张sd卡。在vold中这个通信机制,在在一个死循环,select函数中执行,也就是vold处理MountService发给来的信息是顺序的,如果线程卡住了,select函数也执行不下去,整个Moun 阅读详情

1. History about mountd and vold.
a. in older version, Android use mountd daemon to manage SD card.
b. from cupcake version, vold is used.
from the cupcake source code, there is mountd folder in /system/core source code.
but from the Android.mk, we can see mountd is not built by default,
and from the comment, we can see vold replaces mountd.
# disabled - we are using vold now instead
# include $(BUILD_EXECUTABLE)
c. in eclair version, there is no mountd source code in /system/core.

2. Pre-condition.
we need make sure SD card can be mounted manually.
a. firstly, make sure the feature is supported in kernel layer.
b. we can use mount command to mount or umount the SD card.
the below is a example.
mount -t vfat /dev/block/mmcblk0p1 /sdcard

3. uevent format.
for vold daemon, it receives uevent from kernel space. and the below function processes block device related event.
/system/core/vold/uevent.c: handle_block_event().
it requests specific event format, and it is not compatible with the old userspace tools.
so we need disable the below option in kernel configuration.
General Setup -> Create deprecated sysfs layout for older userspace tools
it is very important, if the above option is enable, v->dev will be none, and the log shows "Cannot start volume /sdard (volume is not bound)"
    } else if (v->media_type == media_mmc) {
        if (!v->dev) {
            LOGE("Cannot start volume '%s' (volume is not bound)", mount_point);
            pthread_mutex_unlock(&v->lock);
            return -ENOENT;
        }

        if (_volmgr_consider_disk_and_vol(v, v->dev->disk) < 0) {
            LOGE("volmgr failed to start volume '%s'", v->mount_point);
        }
    }

the below is my log for this issue:
/ARMAssembler(  823): generated scanline__00000077:03515105_00000A01_00000000 [ 42 ipp] (63 ins) at [0x342098:0x342194] in 213623 ns
D/vold    (  803): [UEVENT] Sq: 770 S: uids A: 0 P: /kernel/uids/10016
D/vold    (  803): DEVPATH=/kernel/uids/10016
D/vold    (  803): No uevent handlers registered for 'uids' subsystem
I/ActivityManager(  823): Start proc com.android.bluetooth for broadcast com.android.bluetooth/.opp.BluetoothOppReceiver: pid=917 uid=10016}
D/vold    (  803): Accepted connection from framework
D/vold    (  803): dispatch_cmd(send_ums_status):
D/vold    (  803): dispatch_cmd(mount_volume:/sdcard):
E/vold    (  803): Cannot start volume '/sdcard' (volume is not bound)
D/MountListener(  823): handleEvent volume_nomedia:/sdcard
D/MountListener(  823): handleEvent ums_disabled
D/MountListener(  823): handleEvent ums_disconnected

4. prepare vold configuration.
vold.conf is in /development/data/etc of Eclair's build environment.
and in phone, the file is in /system/etc/.
I add the below items for my phone.
volume_sdcard {
    media_path     /devices/platform/pxa2xx-mci.0/mmc_host/mmc0
    media_type     mmc
    mount_point    /sdcard
    ums_path       devices/platform/usb_mass_storage/lun0
}

5. reboot the phone, and enjor it.

----

Appendx:
i. one exception.
I have enabled some debug switches to debug, there is one place which has issue.
/system/core/vold/volmgr_vfat.c: vfat_mount()
the original source code is:
   LOG_VOL("vfat_mount(%s, %d:%d): mount rc = %d", dev->major,k dev->minor,
           vol->mount_point, rc);
it can not be built, I found there is a more 'k' character.
if we delete this 'k', build is ok, but in fact, the sequence of four varibles are wrong, and exception will happen.
we need adjust the sequence of the third varible to the first place.

the belos is my log for this issue:
D/vold    (  824): Filesystem check completed OK
I/vold    (  824): vfat filesystem check of 179:1 OK
D/vold    (  824): vfat_mount(179:1, /sdcard, 1):
I/DEBUG   (  798): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (  798): Build fingerprint: 'generic/generic/generic/:2.1-update1/ERE27/eng.amuhong.20100504.104022:eng/test-keys'
I/DEBUG   (  798): pid: 824, tid: 1042  >>> /system/bin/vold <<<
I/DEBUG   (  798): signal 11 (SIGSEGV), fault addr 000000b3
I/DEBUG   (  798):  r0 000000b3  r1 ffffffff  r2 100ffe00  r3 00000003
I/DEBUG   (  798):  r4 ffffffff  r5 00000002  r6 100ff754  r7 00000000
I/DEBUG   (  798):  r8 00100000  r9 0000bcdd  10 10000000  fp 00013160
I/DEBUG   (  798):  ip afbc30e8  sp 100ff6c0  lr afe15ee7  pc afe0e780  cpsr 20000010
I/DEBUG   (  798):          #00  pc 0000e780  /system/lib/libc.so
I/DEBUG   (  798):          #01  pc 00015ee4  /system/lib/libc.so
I/DEBUG   (  798):          #02  pc 00017466  /system/lib/libc.so
I/DEBUG   (  798):          #03  pc 000011dc  /system/lib/liblog.so
I/DEBUG   (  798):          #04  pc 0000d014  /system/bin/vold
I/DEBUG   (  798):          #05  pc 0000bdf8  /system/bin/vold
I/DEBUG   (  798):          #06  pc 00010000  /system/lib/libc.so
I/DEBUG   (  798):          #07  pc 0000fad4  /system/lib/libc.so

ii. SD related source code.
a. SD card settings source code:
packages/apps/Settings/src/com/android/settings/SdCardSettings.java

b. MountService source code:
frameworks/base/services/java/com/android/server/MountService.java
frameworks/base/services/java/com/android/server/MountListener.java
frameworks/base/core/java/android/os/IMountService.aidl

c. Native layer:
system/core/vold
hardware/libhardware_legacy/mount/IMountService.cpp
hardware/libhardware_legacy/include/hardware_legacy/IMountService.h

 

http://blogold.chinaunix.net/u3/103613/showart_2242273.html

高通平台Android7.0自动挂载exFAT格式SD卡和U盘 由于工作需要,想实现exFAT格式的U盘和SD卡自动挂载,但目前看到的文章基本都是采用MTK平台,要不就是android4.x,太老了。而且我试了下没有可以挂载成功的,通过一加开源源码修改了一份exFAT的移植方案。基于android7.0 高通平台。 采用noFuse方式添加exFAT文件系统,并实现SD卡自动挂载。 Kernel部分: 在kernel/fs下新增exFAT驱动 修改ke... 阅读详情

相关推荐

Android 平台上SDCard的自动mount的解决方法

这个真的经典,值得下载,Android的好资源!

android6.0 SD卡、U盘等自动挂载

先确保linux层驱动没问题 该文章讲述的是Android6.0的实现,Android4.0可以参考 参考文章 Android系统中可使用uevents程序来捕捉linux内核提交的uevent事件,并打印内容信息; uevents源码在android源码system/extras/tests/uevents中,可以通过: mmm system/extras/tests/uevents编译该模块 make snod打包进system.img 执行uevents命令后插入SD卡 add@/devices/..

hqmo的博客 738

Android 下通过反射调用加载/卸载(mount/unmount) 外置SD卡

Android 下通过反射调用加载/卸载(mount/unmount) 外置SD卡

Android 4.4.2 exfat 移植

简介Android原生的平台不支持NTFS和exFAT格式的文件系统,但是Linux已经有相应的开源代码,因此只需找到相应的源码将其移植到Android上即可。我目前使用的系统是Android 4.4.2的,系统里已经集成了对NTFS文件系统的支持。所以我现在要做的就是将exFAT格式的文件系统移植过来。基本概念exFAT(Extended File Allocation Table),又名FAT6

张小强的专栏 5291

数学文化赏析MOOC笔记【2023】

深圳大学UOOC课程《数学文化赏析》课程笔记

simplenthpower的博客 1751

【verilog语法详解:从入门到精通】

Verilog语法详解:从入门到精通 摘要:本文系统讲解Verilog硬件描述语言的核心语法与应用。Verilog作为数字电路设计标准,具有并行执行、硬件映射和层次化三大特点。文章从基础语法框架入手,详细介绍了模块定义、端口类型(input/output/inout)声明规范,以及线网型(wire)和寄存器型(reg)两种核心数据类型的区别与应用场景。重点讲解了组合逻辑(assign连续赋值)和时序逻辑(always块)的实现方式,包括阻塞赋值(=)与非阻塞赋值(<=)的关键差异。此外,还涵盖了参数(

m0_58476824的博客 4682

Android 4.4.2插入exFAT格式U盘识别及加载的解决方案

简介 Android原生的平台不支持NTFS和exFAT格式的文件系统,但是Linux已经有相应的开源代码,因此只需找到相应的源码将其移植到Android上即可。 我目前使用的系统是Android 4.4.2的,系统里已经集成了对NTFS文件系统的支持。所以我现在要做的就是将exFAT格式的文件系统移植过来。 基本概念 exFAT(Extended File Allocation Tabl...

look85的专栏 1万+

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南)

本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。

pp12345的博客 741

Android4.0Sd卡移植之使用vold自动挂载sd卡

在cap631平台上移植android4.0,发现内核驱动没有任何问题,能够读写,当总不能挂载。 后来发现是因为自动挂载需要vold的支持。vold程序负责检查内核的 sysfs 文件系统,发现有SD卡插入后,自动挂载。 在文件系统目录 /system/etc/  下有一个vold.fstab 文件,该文件是系统与用户硬件平台的交互接口,用户根据自己的平台来配置这个文件,里面内容比较简单,只

UnixCRoot的温馨小窝 1286

yakit 通过codec 解决RSA加密

靶场就不过多叙述,具体的可以看yakit系列的前几篇文章。yakit 热加载进行 RSA 加密如何显示想要的payloads。

Arkmornings的博客 2686

华为云计算——FusionCompute创建虚拟机

华为云计算——FusionCompute创建虚拟机

jks212454的博客 3676

linux自动挂载sd卡路径,Android2.3实现SD卡与U盘自动挂载的方法

本文实例讲述了Android2.3实现SD卡与U盘自动挂载的方法。分享给大家供大家参考,具体如下:在 s3c6410平台上移植android2.3 过程中SD卡总是不能自动挂载。 查阅相关资料,知道在android2.3中是 vold程序负责检查内核的 sysfs 文件系统,发现有SD卡插入后,自动挂载。 在文件系统目录 /system/etc/ 下有一个vold.fstab 文件,该文件是系统...

weixin_28944739的博客 566

Multisim14.0仿真应用设计(三十九)74LS183 高速全加器应用仿真

74LS183是一种高速全加器,可以同时执行四位二进制数的加法运算。它的输入端包括两个4位二进制数和一个进位信号,输出端则为一个4位二进制数和一个进位信号。

zhusl6688的博客 3851

android2.3 SD卡、U盘自动挂载

在 s3c6410平台上移植android2.3 过程中SD卡总是不能自动挂载。 查阅相关资料,知道在android2.3中是 vold程序负责检查内核的 sysfs 文件系统,发现有SD卡插入后,自动挂载。 在文件系统目录 /system/etc/  下有一个vold.fstab 文件,该文件是系统与用户硬件平台的交互接口,用户根据自己的平台来配置这个文件,里面内容比较简单,只需要你指定sys下

android移动设备 2332

华为OD机试真题 Java&Go 实现【优雅子数组】【100%通过率】【2022.11 Q4 新题】

如果一个数组中出现次数最多的元素出现大于等于K次,被称为K -优雅数组,k也可以被称为优雅阈值。例如,数组1,2,3,1、2,3,1,它是一个3-优雅数组,因为元素1出现次数大于等于3次,数组1,2,3,1,2就不是一个3-优雅数组,因为其中出现次数最多的元素是1和2,只出现了2次。给定一个数组A和k,请求出A有多少子数组是k-优雅子数组。

MISAYAONE的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android2.3 SD卡,U盘自动挂载

android2.3下 SD卡,U盘自动挂载注意事项

yimiyangguang1314的专栏 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android u盘自动挂载点,Android2.3实现SD卡与U盘自动挂载的方法

本文实例讲述了Android2.3实现SD卡与U盘自动挂载的方法。分享给大家供大家参考,具体如下:在 s3c6410平台上移植android2.3 过程中SD卡总是不能自动挂载。 查阅相关资料,知道在android2.3中是 vold程序负责检查内核的 sysfs 文件系统,发现有SD卡插入后,自动挂载。 在文件系统目录 /system/etc/ 下有一个vold.fstab 文件,该文件是系统...

weixin_35915385的博客 1113

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android2.3 SD卡,U盘自动挂载

在 s3c6410平台上移植android2.3 过程中SD卡总是不能自动挂载。 查阅相关资料,知道在android2.3中是 vold程序负责检查内核的 sysfs 文件系统,发现有SD卡插入后,自动挂载。 在文件系统目录 /system/etc/  下有一个vold.fsta

qjclinux的专栏 1787

android 自动挂载sd卡,如何让 Android 自动挂载 SD 卡

1. History about mountd and vold.a. in older version, Android use mountd daemon to manage SD card.b. from cupcake version, vold is used.from the cupcake source code, there is mountd folder in /system/...

weixin_30276247的博客 867

android SD卡自动挂载

http://www.cnblogs.com/jqyp/archive/2012/01/02/2310077.html SD card porting 一、进程启动和配置文件的分析   vold的全称是volume daemon。实际上是负责完成系统的CDROM, USB大容量存储,MMC卡等扩展存储的   挂载任务自动完成的守护进程。它提供的主要特点是支持这些存储外设的热插拔。在An

uyiwfn的专栏 992

和菜鸟一起学android4.0.3源码之SD卡U盘等自动挂载配置

一直以为android sd卡的自动挂载是在vold中实现的,而其配置文件在网上也很容易找到是哪个system/etc/vold.fstab,中,其配置文件就是mount,一般都是如下所示: dev_mount sdcard /mnt/sdcard 3 /devices/platform/sc65-sdhci.0/mmc_host/mmc0/mmc0:0001/block/mmcblk0 non

东月之神 6512
上一篇: Android 初始化脚本语法解析
下一篇: Android(1.5) 开机图片/文字/动画 修改
eustoma
博客等级 码龄18年 79粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值