基于全志A20 android4.2平台如何支持三个SD卡

简介: 基于全志A20 android4.2平台如何支持三个SD卡            做过android平台的同仁大多都知道android原生态只支持了一个sd卡,默认的挂载点也就是/mnt/sdcard,所以在应用中使用getExternalStorageDirectory()得到的都是/mnt/sdcard,通常会symlink 到/sdcard目录。

基于全志A20 android4.2平台如何支持三个SD

 

         做过android平台的同仁大多都知道android原生态只支持了一个sd卡,默认的挂载点也就是/mnt/sdcard,所以在应用中使用getExternalStorageDirectory()得到的都是/mnt/sdcard,通常会symlink 到/sdcard目录。做过全志平台的童鞋也知道全志android SDK支持2sd卡,通常是一个内置的,一个外置的,内置的一般是从nand上或者emmc上的用户数据区,因为现在的nandemmc容量都比较大,存放android程序、cachebackupdownload等之外,还有大量的空间剩余,因此这部分大多都会做成一个sd卡来使用,通常挂载到/mnt/sdcard上;外置的是挂载在/mnt/extsd节点上。但是,如何在全志平台上使用三个sd卡呢?即再增加一个外置的SD卡支持。

      为了多支持一个SD卡,我们有以下基本需要做:

      1、          在系统配置文件里,打开对应的SD卡驱动支持,设置好检测方式,如果是gpio方式的要配置好gpio引脚;笔者测试过,如果两个外置的SD卡,都使用gpio polling的方式,系统只识别一个SD卡,笔者把两个SD卡一个配置成gpio polling,另外一个配置成了GPIO IRQ中断模式;

[mmc0_para]
sdc_used            = 1
sdc_detmode         = 2
sdc_buswidth        = 4
sdc_clk             = port:PF02<2><1><2><default>
sdc_cmd             = port:PF03<2><1><2><default>
sdc_d0              = port:PF01<2><1><2><default>
sdc_d1              = port:PF00<2><1><2><default>
sdc_d2              = port:PF05<2><1><2><default>
sdc_d3              = port:PF04<2><1><2><default>
sdc_det             = port:PH3<6><1><default><default>
sdc_use_wp          = 0
sdc_wp              =
sdc_isio            = 0
sdc_regulator       = "none"

[mmc1_para]
sdc_used            = 1
sdc_detmode         = 1
sdc_buswidth        = 4
sdc_clk             = port:PH23<5><1><2><default>
sdc_cmd             = port:PH22<5><1><2><default>
sdc_d0                   = port:PH24<5><1><2><default>
sdc_d1                   = port:PH25<5><1><2><default>
sdc_d2                   = port:PH26<5><1><2><default>
sdc_d3                   = port:PH27<5><1><2><default>
sdc_det                  = port:PH2<0><1><default><default>
sdc_use_wp          = 0
sdc_wp              =
sdc_isio            = 0
sdc_regulator       = "none"

     2、          vold.fstab里,需要修改一下,如下:

## Vold 2.0 fstab for HTC Passion
#
## - 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' for first usable partition.
## <sysfs_path> - List of sysfs paths to source devices
######################

# Mounts the first usable partition of the specified device
#/devices/platform/awsmc.3/mmc_host for sdio
dev_mount	sdcard	/mnt/sdcard	auto	/devices/virtual/block/nandk	/devices/platform/sunxi-mmc.2/mmc_host
dev_mount	extsd	/mnt/extsd	auto	/devices/platform/sunxi-mmc.1/mmc_host
dev_mount	extsd2	/mnt/extsd2	auto	/devices/platform/sunxi-mmc.0/mmc_host
dev_mount	usbhost1	/mnt/usbhost1	auto	/devices/platform/sw-ehci.1	/devices/platform/sw_hcd_host0	/devices/platform/sw-ohci.1

这三个SD卡挂载点都是可以随便交换的;

3、          如果完成了上面两步,extsd2对应的SD卡热插拔是可以自动挂载,如果是开机启动前就在sd卡槽里面的话,就不会自动识别,因此我们得明确告诉系统storage配置,配置在storage_list.xml文件中,如下:

         <storage android:mountPoint="/mnt/extsd"

             android:storageDescription="extsd"

             android:primary="false"

             android:removable="true"

             android:emulated="false"  

             android:mtpReserve="0" 

             android:allowMassStorage="true"

             android:maxFileSize="0"/>
 

4、          system/vold下面做一些处理,类似extsd处理,加上即可,如下:

diff --git a/DirectVolume.cpp b/DirectVolume.cpp
index 16ac2d8..43ce612 100755
--- a/DirectVolume.cpp
+++ b/DirectVolume.cpp
@@ -346,7 +346,7 @@ void DirectVolume::handlePartitionRemoved(const char *devpath, NetlinkEvent *evt
          * Yikes, our mounted partition is going away!
          */
 
-        if(!strstr(getLabel(),"usb")&&!strstr(getLabel(),"extsd")){
+        if(!strstr(getLabel(),"usb")&&!strstr(getLabel(),"extsd")&&!strstr(getLabel(),"extsd2")){
         snprintf(msg, sizeof(msg), "Volume %s %s bad removal (%d:%d)",
                  getLabel(), getMountpoint(), major, minor);
         mVm->getBroadcaster()->sendBroadcast(ResponseCode::VolumeBadRemoval,
diff --git a/Volume.cpp b/Volume.cpp
old mode 100644
new mode 100755
index 23556ea..a1f059a
--- a/Volume.cpp
+++ b/Volume.cpp
@@ -864,7 +864,7 @@ int Volume::unmountVol(bool force, bool revert) {
     setState(Volume::State_Unmounting);
     usleep(1000 * 1000); // Give the framework some time to react
 
-    if(getMountpoint()!=NULL&&!strstr(getMountpoint(),"usb")&&!strstr(getMountpoint(),"extsd")){
+    if(getMountpoint()!=NULL&&!strstr(getMountpoint(),"usb")&&!strstr(getMountpoint(),"extsd")&&!strstr(getMountpoint(),"extsd2")){
         /*
          * Remove the bindmount we were using to keep a reference to
          * the previously obscured directory.

 

     完成了以上几步,三个SD卡已经可以自动识别挂载了,mount的信息如下:

root@android:/ # mount

rootfs / rootfs rw 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/secure tmpfs rw,relatime,mode=700 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/nandd /system ext4 rw,nodev,noatime,nobarrier,data=ordered 0 0
/dev/block/nande /data ext4 rw,nosuid,nodev,noatime,journal_checksum,nobarrier,noauto_da_alloc,data=ordered 0 0
/dev/block/nandh /cache ext4 rw,nosuid,nodev,noatime,journal_checksum,nobarrier,noauto_da_alloc,data=ordered 0 0
/dev/block/vold/179:16 /mnt/extsd vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1023,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:0 /mnt/extsd2 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1023,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/93:80 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/93:80 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
root@android:/ # 

 

目录
相关文章
|
6天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
10天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
23天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
23天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发:平台选择的艺术与科学
在移动应用开发的广阔天地中,安卓与iOS两大平台如同东西方哲学的碰撞,既有共通之处又各具特色。本文将深入探讨这两个平台的设计理念、开发工具和市场定位,旨在为开发者提供一份简明扼要的指南,帮助他们在这场技术与商业的博弈中找到自己的道路。通过比较分析,我们将揭示每个平台的优势与局限,以及它们如何影响应用的性能、用户体验和市场接受度。无论你是初涉江湖的新手,还是经验丰富的老手,这篇文章都将为你的选择提供新的视角和思考。
31 5
|
23天前
|
Linux Android开发 iOS开发
探索Android与iOS开发:平台之战还是互补共生?
在移动应用开发的浩瀚宇宙中,Android和iOS这两大星系始终吸引着无数开发者的目光。它们各自拥有独特的引力场,引领着技术潮流的方向。本文将穿梭于这两个平台的星际空间,揭示它们背后的力量对比,以及如何在这两者之间找到平衡点,共同推动移动应用开发的进步。
28 1
|
7天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发环境对比:选择适合你的平台
【9月更文挑战第26天】在移动应用开发的广阔天地中,安卓和iOS是两大巨头。它们各自拥有独特的优势和挑战,影响着开发者的选择和决策。本文将深入探讨这两个平台的开发环境,帮助你理解它们的核心差异,并指导你根据个人或项目需求做出明智的选择。无论你是初学者还是资深开发者,了解这些平台的异同都至关重要。让我们一起探索,找到最适合你的那片开发天地。
|
9天前
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
|
9天前
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
|
9天前
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
|
20天前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
38 0
下一篇
无影云桌面