说明
- 在嵌入式开发中,SD卡是比较常用的器件,记录下其使用方法。
底层配置
- 驱动调试。
- 内核配置。
device deivers
-> mmc/sd card support
-> Samsung s3c sd/mmc card interface support //不同平台不同
应用层使用
硬件识别和显示
- 如果SD卡驱动和内核配置ok,插入SD卡后,内存文件系统目录/sys/bus/mmc/devices/下会自动生成文件节点来表示SD卡,例如:mmc0:5048;拔出SD卡则消失。
- 正常情况下,根文件系统/dev目录下会自动生成设备节点,如果SD卡已分区还会生成分区的设备节点;/dev/mmcblk0表示第一个SD卡设备节点,mmcblk0p1代表第一个SD卡设备的第一个分区,mmcblk0p2代表第二个分区,名字中的p是partition的意思。
- 未生成相应的设备节点,如果识别正常,理论上可以使用mdev自动创建。
分区
- 如果SD卡未分区,则不存在分区节点,需要分区后才能使用,如已分区也可重新分区。
- Linux下使用fdisk对sd卡进行分区
fdisk -l //显示所有磁盘(有些嵌入式版本不支持)
fdisk /dev/mmcblk0
n //新增分区
w //写入磁盘
格式化&创建文件系统
- 首次使用需要对分区进行格式化,并且创建Linux可识别的文件系统,已存在文件系统则不需要。
- Linux支持很多文件系统,只在Linux上使用可使用多种文件系统,但是平时使用中时常需要兼容window,因此只能选择部分文件系统。
- 使用mkdosfs命令建立DOS文件系统。
$bindir/mkdosfs -s 128 -F 32 /dev/mmcblk0p1
挂载与卸载
- 分区节点(/dev/mmcblk0p1等)需要使用mount 命令挂载到根文件系统后才能进行查看和编辑。
- 挂载到系统并且能进行文件操作的是mmcblk0p1和mmcblk0p2分区节点而不是mmcblk0设备节点,是把sd卡的分区挂载到系统而不是sd卡。
- 使用mount/unmount 命令可以实现sd卡的挂载和卸载。
- 挂载到系统目录
mount -t vfat /dev/mmcblk0p1 /mnt/sd
* -t vfat: 表示指定文件系统为vfat
- 卸载分区
umount /mnt/sd
- 判断挂载命令(mount -t vfat …)的返回
- 查看 /proc/mounts, 通过cat /proc/mounts,查找 sd 卡 mount 的目录 /mnt/sd是否存在
- 查看mount命令打印所有已mount分区的显示。