驱动设置
首先开启SD卡驱动:
$cd cd NUC970_Buildroot-master/
$make linux-menuconfig
选择Device Drivers > MMC/SD/SDIO card support,选择项如下图所示:
类似于U盘配置,使用SD卡前也需要开启相应文件系统。我测试使用SD卡为FAT文件系统,该文件系统设置可参考上一篇文章:
新唐NUC980读取U盘配置
设置完成后,保存。
可以在/output/target/mnt文件夹下建立一个文件夹用以测试,然后make,烧录uimage。
测试
插入SD卡后会输出SD卡相关信息:
可以看到SD的盘符为mmcblk0,分区p1,有的SD卡可能有多个分区。也可使用fdisk -l命令确认。
测试使用/mnt/usb作为挂载点,使用挂载命令:
#mount -t vfat /dev/mmcblk0p1 /mnt/usb
进入sd文件夹即可看到SD卡内容:
不要对挂载内容感到奇怪😓,现在很少用SD卡,找不到适合的测试用卡,只好把小游戏机的存储卡拿来测试…
拔出SD卡前,使用umount取消挂载:
#umount /mnt/usb
自动挂载
此项目要求同时使用usb与SD卡,且最后都可以自动挂载,类似于U盘设置,修改mdev.conf文件,运行脚本实现自动挂载。可参看上一篇关于U盘的文章:
新唐NUC980读取U盘配置
首先在mnt下创建另一个SD卡的挂载点sd。修改mdev.conf文件:
#FAT device such as U-disk sd-card
sd[a-z][0-9] root:root 660 */etc/automount $MDEV $ACTION UD
mmcblk[0-9]p[0-9] root:root 660 */etc/automount $MDEV $ACTION SD
这里U盘与SD都使用的同一个脚本automount,所以除了MEDV与ACTION两个参数外,还需要使用第三个参数:UD与SD执行不同的操作。
automount文件内容如下:
#!/bin/sh
if [ "$3" == "UD" ]; then
TARGETDIR=usb
elif [ "$3" == "SD" ]; then
TARGETDIR=sd;
fi
if [ "$2" == "add" ]; then
test -d /mnt/$TARGETDIR || mkdir /mnt/$TARGETDIR
mount /dev/$1 /mnt/$TARGETDIR
elif [ "$2" == "remove" ]; then
mountpoint -q /mnt/$TARGETDIR && umount /mnt/$TARGETDIR
fi
效果如下:
可以看到与上一篇中U盘挂载的不同:
首先通过输入的第三个参数判断需要挂载的是U盘还是SD卡,同时给出不同挂载点:
if [ "$3" == "UD" ]; then
TARGETDIR=usb
elif [ "$3" == "SD" ]; then
TARGETDIR=sd;
fi
之后判断是挂载还是移除,在挂载时使用test命令判断挂载点是否存在,不存在则创建:
test -d /mnt/$TARGETDIR || mkdir /mnt/$TARGETDIR
取消挂载时判断挂载情况,仍在挂载中则取消挂载:
mountpoint -q /mnt/$TARGETDIR && umount /mnt/$TARGETDIR
加入此判断主要是作为一个保险语句使用。因为在测试过程中发现,不论是U盘还是SD卡,在没有umount的前提下,直接取下U盘/SD卡,通过脚本执行umount,下次再插入时会输出类似如下的报警:
FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
虽然不影响挂载等操作,同时还可以插入到电脑上使用修复来消除此报警,但我认为直接拔出还是对存储设备造成了不大不小的伤害。
若先umount再拔出,再次插入不会出现报警,所以脚本中的umount命令确实是设备拔出后才能触发。虽然有脚本自动umount,在拔出U盘前还是应使用某些方法触发umount操作,类似于正常在电脑上拔出U盘前要先弹出。
参考资料:
官方文档—NUC980 Linux 4.4 BSP User Manual
下载地址:https://download.csdn.net/download/m0_46222499/85167997