最近我们从Android2.1转到Android2.2上,在移植过程中,SD卡的移植费了我好大一阵功夫,特地写出来给需要的朋友们参考,以少走弯路。
首先,代码方面的移植没有什么特别注意的地方,主要是在Android中,如何将SD卡Mount出来。
我刚开始移植完后,发现在kernel中,SD卡正确识别了,设备节点也存在了。在/dev/block下有mmcblk0和mmcblk0p1,在/sys/devices/platform/mxsdhci.0/mmc_host/mmc0目录下也有mmc0:e624, 当拔出SD卡后,这些内容就消失了,验证了SD卡确实被识别了。但是/sdcard目录下看不到Sd卡上的文件,Android也没有识别到SD插入。
在Android2.1和Android2.2中,都是用vold来处理SD卡的mount的,Android2.1中处理代码在/system/core/vold中,Android2.2中,处理代码在/system/vold中。经过查看代码,发现,Android2.1需要/system/etc/vold.conf文件;而Android2.2需要/etc/vold.fstab文件。因此,要将这个文件(vold.conf或者vold.fstab)打包到系统的/syste,etc目录或者/etc目录下。
vold.fstab的内容只有主要的1行:
dev_mount sdcard /mnt/sdcard 1 /devices/platform/mxsdhci.0/mmc_host/mmc0
另外,在init.rc中,还要执行vold服务:
service vold /system/bin/vold
socket vold stream 0660 root mount
ioprio be 2
经过上述处理,发现还是不能成功mount SD Card,无奈之下,在vold代码中加trace,用Logcat查看,发现在mount的过程中,需要下面这些目录:
/mnt/sdcard
/mnt/secure
/mnt/secure/staging
/mnt/secure/asec
/mnt/asec
所以要在init.rc中,分别建立这些目录,并用“symlink /mnt/sdcard /sdcard”映射一个/sdcard的连接。
经过上面的处理,系统系统后,就能进入/sdcard目录,看到SD卡中的文件,在Android的Setting->SD Card & Phone storage中看到SD被mount起来了。