首页 >> 大全

Android SDCard Mount 流程分析

2023-11-25 大全 25 作者:考证青年

前段时间对 的 流程进行了几篇简短的分析,由于当时只是纸上谈兵,没有实际上的跟进,可能会有一些误导人或者小错误。今天重新梳理了头绪,针对mount的流程再重新分析一次。

本篇大纲 系统如何开机启动监听mount服务

热插拔监测和执行操作是由一个启动文件vold 所统领的,系统开机会读取初始化配置文件init.rc,该文件位于比如我的板子是:/ti//init.rc,具体根据自己平台查找。里面有一个是默认启动vold 服务的代码,如下:

//bin/vold

如果要对该文件做出修改之类,要重新编一下boot.img 镜像文件,烧录进 系统,之后可以在的文件系统根目录找到init.rc文件。上述代码为启动vold 启动文件,也可以在init.rc 增加多一些我们想要的文件目录,比如增加一个可以存放多分区挂载的目录等,这个是后话。

默认设备节点在 系统的哪个目录

或者 热插拔的时候, 会发出命令执行mount或者 操作,但这都是驱动级的。而mount 目录会在 的文件系统目录下:/dev/block/vold 这个目录由vold 生成,用来存放所有的 或者 的设备节点。代码位于main里面最优先执行:

mkdir("/dev/block/vold",0755) ;

可以根据这个目录找到如下节点:

sh-4.1#ls/dev/block/vold/

179:0179:18:08:18:28:38:4

节点的小介绍:

0代表当前的整个设备,1代码当前设备的分区名称代号。

所以你会发现,只有一个分区它却生成了两个如:179:0 179:1

而 有四个分区,它会生成五个设备节点:8:08:18:28:38:4 就是这个原因。

vold.fstab 配置文件的分析

vold 里面会通过指定文件来读取预先配置好的或者多分区配置文件,该文件位于

//core//etc/vold.fstab

如以下的配置文件为:

/mnt////.0///.2//mmc1

代表挂载格式

代表挂载的标签

流程分析的六步法_流程分析法_

/mnt/ 代表挂载点

auto 为自定义选项可以为任何,但必须在main 里面自己判断比如这里的意思为自动挂载

后面两个目录为设备路径,第一个如果被占用会选择第二个

配置文件可以根据自己的需要编写,并不是固定的,但最好遵循 vold 启动文件代码的格式编写,要不然会给我们修改代码或者增加多分区功能带来不小的麻烦,如以下我自己编写的多分区挂载支持vold.fstab 配置文件:

nal/mnt////mmci-omap-hs.0//mmc0///mmci-omap-hs.0//mmc1

l/mnt//usb1-disk%dall///ehci-omap.0/usb1/1-2/1-2.1/

l/mnt//usb2-disk%dall///ehci-omap.0/usb1/1-2/1-2.2/

l/mnt//usb3-disk%dall///ehci-omap.0/usb1/1-2/1-2.3/

该文件修改后经系统编译会在 系统目录里//etc/vold.fstab找到。

///ehci-omap.0/usb1/1-2/1-2.1/ 代表要挂载的USB口。

vold.fstab 只是一个单纯的配置文件,具体的读取和取数据还 是要靠main里面的函数。看代码,里面正有一段用来读取配置文件:

if(!(fp=fopen("/etc/vold.fstab","r"))){

-1 ;

在这个函数里面会根据读取到的数据存放起来,然后满足条件时执行操作。比如代码里面的:

if(!(type, " ")){

*dv=NULL;

char*part;

if(!(part=(NULL,delim,&))){

SLOGE( " n ");

;

if((part, " auto ")&&atoi(part)== 0){

SLOGE( " e'auto'of'%s' ",part);

;

_流程分析法_流程分析的六步法

if(!(part,"auto")){

dv=(vm,label,,-1);

}else{

dv=(vm,label,,atoi(part));

while((=(NULL,delim,&))){

if(*!= ' / '){

/* snota'/', */

break;

if(dv->()){

SLOGE( " %%s ",,

label);

;

/* -,

*

*/

if()

flags=();

else

flags= 0;

dv->(flags);

vm->(dv);

后面会讲到,执行mount 和 都是它在做。

另外,有时后读取配置文件会有问题,这是因为它读取是通过指标下标递增的方式在读,如果有问题可以跟踪打印一下配置文件,看哪里需要修改。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了