在cap631平台上移植android4.0,发现内核驱动没有任何问题,能够读写,当总不能挂载。

后来发现是因为自动挂载需要vold的支持。vold程序负责检查内核的 sysfs 文件系统,发现有SD卡插入后,自动挂载。 在文件系统目录 /system/etc/  下有一个vold.fstab 文件,该文件是系统与用户硬件平台的交互接口,用户根据自己的平台来配置这个文件,里面内容比较简单,只需要你指定sys下vold程序需要查询的文件夹路径,当SD卡插入设备后,这个路径下会产生相应的文件,vold能检查到。 在system/core/rootdir/etc/目录下有一个文件叫做vold.fstab,这个文件是一个教我们写vold.fstab的模板。模板内容如下:

## Vold 2.0 Generic fstab

## - San Mehat (san@android.com)

##

#######################

## Regular device mount

##

## Format: dev_mount <label><mount_point> <part> <sysfs_path1...>

## label        - Label for the volume

## mount_point  - Where the volume will be mounted

## part         - Partition # (1 based), or 'auto' forfirst usable partition.

## <sysfs_path> - List of sysfs pathsto source devices

######################

## Example of a standard sdcard mount forthe emulator / Dream

# Mounts the first usable partition of thespecified device

dev_mount sdcard/mnt/sdcard auto /devices/platform/goldfish_mmc.0/devices/platform/msm_sdcc.2/mmc_host/mmc1

## Example of a dual card setup

# dev_mount left_sdcard  /sdcard1 auto /devices/platform/goldfish_mmc.0/devices/platform/msm_sdcc.2/mmc_host/mmc1

# dev_mount right_sdcard /sdcard2  auto /devices/platform/goldfish_mmc.1/devices/platform/msm_sdcc.3/mmc_host/mmc1

## Example of specifying a specificpartition for mounts

# dev_mount sdcard /sdcard 2/devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1

关键的一句话就是用红笔标出的这句话。其展示了vold.fstab的模板:

dev_mount       <label>     <mount_point>     <part>       <sysfs_path1...>

dev_mount:命令

<label> :标签

<mount_point>: 挂载点

<part> :子分区

<sysfs_path1...>:设备在sysfs文件系统下的路径(可多个)

注意:这里的各个参数之间要么全部用空格键隔开,要么都用tab键给隔开,因为他们在解析时是按照这种方法来解析的。

在/system/vold的目录下有一个main.cpp文件,里面的static
intprocess_config(VolumeManager *vm) 函数指出了在系统启动时,vold的会去那个目录下查询sd卡的挂载点,从函数我们看出是在这里:/etc/vold.fstab。

static intprocess_config(VolumeManager *vm) {

FILE *fp;

int n = 0;

char line[255];

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

return -1;

}

while(fgets(line, sizeof(line), fp)) {

const char *delim = " \t";

char *save_ptr;

char *type, *label, *mount_point,*mount_flags, *sysfs_path;

int flags;

...................................................

}

我们又从\system\core\rootdir目录下的init.rc中发现:

# Backwardcompatibility

symlink /system/etc /etc

symlink /sys/kernel/debug /d

/etc目录已经被符号链接到了/system/etc,所以我们只要把vold.fstab配置文件发到/system/etc目录下就行了。但是如何在最后生成的system.img镜像中包含vold.fstab,即android系统的/system/etc目录下会有vold.fstab文件呢?答案是要把我们配置好的vold.fstab文件发到此目录下:device\cyit\cap631(这个目录因平台的差异会不同,个人根据自己的实际情况找到就行了,实在不行可以通过find命令找到vold.fstab目录)然后参照上面提到的模板去配置此文件,我所使用的平台下是红色部分:

# Copyright (c) 2011, Code Aurora Forum. Allrights reserved.

#

# Redistribution and use in source and binaryforms, with or without

# modification, are permitted provided that thefollowing conditions are

# met:

#     *Redistributions of source code must retain the above copyright

#      notice, this list of conditions and the following disclaimer.

#     *Redistributions in binary form must reproduce the above

#      copyright notice, this list of conditions and the following

#      disclaimer in the documentation and/or other materials provided

#      with the distribution.

#     *Neither the name of Code Aurora Forum, Inc. nor the names of its

#      contributors may be used to endorse or promote products derived

#      from this software without specific prior written permission.

#

# THIS SOFTWARE IS PROVIDED "AS IS"AND ANY EXPRESS OR IMPLIED

# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED WARRANTIES OF

# MERCHANTABILITY, FITNESS FOR A PARTICULARPURPOSE AND NON-INFRINGEMENT

# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER ORCONTRIBUTORS

# BE LIABLE FOR ANY DIRECT, INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR

# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOTLIMITED TO, PROCUREMENT OF

# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA, OR PROFITS; OR

# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ONANY THEORY OF LIABILITY,

# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE

# OR OTHERWISE) ARISING IN ANY WAY OUT OF THEUSE OF THIS SOFTWARE, EVEN

# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

dev_mount sdcard /mnt/sdcard auto/devices/platform/c6310-sd.1/mmc_host/mmc0

此处提醒下:

如果你把sd卡插入开发板上,在/dev/block/ 目录下面多出几个设备节点,证明sd卡的驱动成功加载,我的目录下面会形成mmcblk0  和 mmcblk0p1 节点,注意:这两个节点的意思,mmcblk0代表第一个sd卡设备,mmcblk0p1代表第一个SD卡设备的第一个分区。用户不能把/dev/block/mmcblk0挂载到文件系统中,而是把这个SD卡的分区挂载到文件系统中,如下:

# mount -t vfat  /dev/block/mmcblk0     /sdcard/

<3>FAT: utf8 is not a recommended IO charset for FAT filesystems,filesystem wil

l be case sensitive!

FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem willb

e case sensitive!

<7>mmc0: starting CMD17 arg 00000000 flags 000000b5

<7>mmc0:     blksz 512 blocks 1 flags 00000200 tsac 100 msnsac 0

<7>sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001

<7>sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000002

<7>mmc0: req done (CMD17): 0: 00000900 00000000 00000000 00000000

<7>mmc0:     512 bytes transferred:0

mount: Invalid argument

挂载 mmcblk0  会出现这样的错误提示,而挂载 mmcblk0p1 会成功,当然在android下面不应该手动挂载,否则在上层应用软件中会出现找不到SD卡的情况.

写好了文件我们还要去在AndroidBoard.mk中去配置它:

file :=$(TARGET_OUT)/etc/vold.fstab

ALL_PREBUILT+= $(file)

$(file): $(LOCAL_PATH)/vold.fstab | $(ACP)

$(transform-prebuilt-to-target)

具体如何配置根据自己的平台。

最后我们需要重新make一下,注意是make,不是make
xxx,make完以后我们会在\out\target\product\cap631\system\etc目录下发现一个vold.fstab文件,这就说明在system.img里会包含这个文件了。接下来,我们把make好的镜像烧到手机板子上,通过adb
shell进入系统,ls /systyem/etc 会发现我们的vold.fstab文件,这样我们就可以了。

Android4.0Sd卡移植之使用vold自动挂载sd卡的更多相关文章

  1. linux udev 自动挂载 SD卡/U盘

    本文记录使用udev自动挂载SD卡和U盘的方法. 参考链接 http://blog.chinaunix.net/uid-26119896-id-5211736.html 添加udev规则 创建文件/e ...

  2. linux挂载SD卡

    (1)通过#fdisk -l命令确认板子上的linux系统是否识别SD卡 MP805M板子插入SD卡后显示 SD30 slot is without WPmmc1: new high speed SD ...

  3. 发送广播重新挂载SD卡,使图库可以及时显示自己保存的图片(无需手机重启)

    我们或许经常会遇到这种情况,明明保存了图片,但是当你打开图片时,却没有找到这张图片,手机重启之后才能看到.这是因为SD卡并没有重新挂载,图库也无法把这张图片加载进去,解决这个问题非常简单,只需要我们模 ...

  4. Linux环境下挂载SD卡的教程

    1.插入SD卡 如果系统能够识别SD卡,则会打印一些信息: 2.查看系统给SD卡分配的设备名 命令如下: fdisk -l 命令 说明:通常是根据SD卡的存储容量来确定的. 比如下面的信息: 3.挂载 ...

  5. 【转载】自制4412底板自动进入SD卡更新模块

    转载自迅为论坛:http://www.topeetboard.com参考平台:迅为iTOP-4412开发板 问题如下:在自制的底板上,当SD卡插在板子上开机时,会自动进入Updating模式,如果SD ...

  6. 把一个树莓派SD卡系统和文件迁移到空SD卡中

    1.打开win32diskimager软件读出SD卡树莓派系统和文件到电脑的镜像文件中, 2.使用 SD card formatter 格式化SD卡 3.再用win32diskimager往空SD卡写 ...

  7. Ubuntu下查看SD卡设备名的几个方法

    Ubuntu下使用SD卡查询SD卡的设备文件名:sudo fdisk -leg:Disk /dev/sdb:14.9 GiB,15931539456 字节,31116288 个扇区单元:扇区 / 1 ...

  8. Linux下U盘、SD卡挂载与卸载

    1.手动挂载/卸载U盘.SD卡 对于ARM Linux来说,第一次使用U盘或SD时,U盘这个文件目录是不能直接进入的,我们需要对其进行挂载,然后再接下来的使用中就可以直接进行使用了.通过再网上查资料, ...

  9. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(七)-准备移植FatFs

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

随机推荐

  1. 安卓框架——SlidingMenu使用技巧

    SlidingMenu的一些常用属性 原文转载http://blog.csdn.net/zwl5670/article/details/48274109 [java] view plain copy ...

  2. java实例化对象

    摘要:分享牛,分享牛分享,java类加载机制,java实例化对象,java实例化对象机制,java基础. java是如何实例化对象的呢?以及实例化对象的先后顺序是什么?下面我们以测试的方式说明. 1. ...

  3. Ajax PHP JavaScript MySQL实现简易的无刷新在线聊天室

    思路 消息显示区 发消息 板块 消息显示 消息发送 优化 显示非重复性的数据 优化显示 加上滚动条 每次都显示最新消息 完整代码 前端代码 数据库表结构 服务器端代码 总结与展望 总结 展望 为更好的 ...

  4. Dynamics CRM2013 6.1.1.1143版本插件注册器的一个bug

    最近在做的项目客户用的是CRM2013sp1版本,所以插件注册器使用的也是与之对应的6.1.1.1143,悲剧的事情也因此而开始. 在插件中注册step时,工具里有个run in user's con ...

  5. activiti processEngineLifecycleListener使用

    1.1.1. 前言 实际开发中,有需求如下: 第一:项目启动部署的时候,我们需要监控activiti 工作流引擎是否真正的已经实例化启动了,这里说的是工作流引擎的启动,不是流程实例的启动,对此要特别说 ...

  6. activiti 动态配置 activiti 监听引擎启动和初始化(高级源码篇)

    1.1.1. 前言 用户故事:现在有这样一个需求,第一个需求:公司的开发环境,测试环境以及线上环境,我们使用的数据库是不一样的,我们必须能够任意的切换数据库进行测试和发布,对数据库连接字符串我们需要加 ...

  7. java之异常处理

    异常Exception我们分为 |--RuntimeException运行期异常,我们需要修正代码 |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过 异常有两种处理 ...

  8. 查看某一职责下对应的菜单&功能&请求

    查看菜单&功能 SELECT res.RESPONSIBILITY_NAME 职责名称, menu.MENU_NAME 菜单编码, menu.USER_MENU_NAME 菜单名称, func ...

  9. Android异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original

    Android异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that cr ...

  10. 【一天一道LeetCode】#114. Flatten Binary Tree to Linked List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...