arm Linux 如何自动检测并mount SD卡,以及如何得知已经mount
一、土八路做法:
SD 卡一旦插入系统,内核会自动在/dev/下创建设备文件:sdcard。 但有时可能时用户在拨出卡前并没有umount的话,第二次插卡进去后系统创建的就不是sdcard设备文件了,而是mmcblk0, mmcblk1p1, mmcblk2p1, 或mmcblk3p1.
所以只需用if ( fopen("/dev/sdcard", "r") == NULL ) 来检测SD卡是否已经被内核捉到。然后就可以mount ....以及你想干的事情了。
如何得知自己已经有mount 了呢?
cat /proc/mounts 之后就会有:
rootfs / rootfs rw 0 0
/dev/root / yaffs rw,relatime 0 0
none /proc proc rw,relatime 0 0
none /sys sysfs rw,relatime 0 0
none /dev ramfs rw,relatime 0 0
none /dev/pts devpts rw,relatime,mode=622 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
none /tmp ramfs rw,relatime 0 0
none /var ramfs rw,relatime 0 0
/dev/sdcard /mnt vfat rw,relatime,fmask=0022,dmask=0000,allow_utime=0022,codepag
e=cp437,iocharset=iso8859-1 0 0
/dev/mmcblk1p1 /mnt vfat rw,relatime,fmask=0022,dmask=0000,allow_utime=0022,code
page=cp437,iocharset=iso8859-1 0 0
哈哈。。。 最后两个就是我刚刚mount的。
1.在使用busybox制作根文件系统的时候,选择支持mdev
Linux System Utilities ---
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device addition/removal
2.在文件系统添加如下内容
Vim /etc/init.d/rcS
mount -t tmpfs mdev /dev
mount -t sysfs sysfs /sys
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev /proc/sys/kernel/hotplug
mdev –s
这些语句的添加在mdev的手册中可以找到。
3.添加对热插拔事件的响应,实现U盘和SD卡的自动挂载。
Vim /etc/mdev.conf
mmcblk[0-9]p[0-9] 0:0 666 @ /etc/sd_card_inserting
mmcblk[0-9] 0:0 666 $ /etc/sd_card_removing
sd[a-z] [0-9] 0:0 666 @ /etc/usb/usb_inserting
sd[a-z] 0:0 666 $ /etc/usb/usb_removing
灰色部分,是一个脚本,脚本内容可以根据我们的需要定制,可以实现挂载,卸载或其他一些功能。
如下是自动挂载和卸载的脚本:
/etc/sd_card_inserting
#!/bin/sh
mount -t vfat /dev/mmcblk0p1 /mnt/sd
/etc/sd_card_removing
#!/bin/sh
sync
umount /mnt/sd
10.8 Linux挂载U盘(使用mount命令) 挂载 U 盘和挂载光盘的方式是一样的,只不过光盘的设备文件名是固定的(/dev/sr0 或 /dev/cdrom),而 U 盘的设备文件名是在插入 U 盘后系统自动分配的。
10.6 Linux mount命令详解:挂载Linux系统外的文件 通过学习 Linux 文件系统,我们可以对挂载的含义进行引申,挂载指的是将硬件设备的文件系统和 Linux 系统中的文件系统,通过指定目录(作为挂载点)进行关联。而要将文件系统挂载到 Linux 系统上,就需要使用 mount 挂载命令。
相关文章
- 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之一
- 【ARM-Linux开发】Linux查看设备驱动
- 【ARM-Linux开发】Rico Board上编译USB WiFi RT3070驱动
- 【ARM-Linux开发】DRM学习(一)
- 【ARM-Linux开发】C语言getcwd()函数:取得当前的工作目录
- 【ARM-Linux开发】在win下开发的eclipse+yougatoo+jlink环境搭建
- 【Linux开发】如何在./configure的时候将编译参数传入,改变默认的编译器gcc成arm-linux-gcc
- 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题1---cvNamedWindow调用报错的问题
- 【Linux开发】OpenCV在ARM上的移植
- Linux命令:netstat【监控TCP/IP网络,可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息】【TCP的11种状态】
- Linux的操作系统I2C驱动架构解说
- Boa服务器在ARM+Linux上的移植
- 红星Linux操作系统的大部分代码处于被管控的状态
- ARM linux解析之压缩内核zImage的启动过程
- 很快!红帽Linux企业版将支持高通ARM服务器
- 每天一个Linux命令(3):ls命令
- linux查看java jdk安装路径和设置环境变量
- linux驱动杂项
- [Linux ]两台服务器之间传递文件 | 使用scp
- 由 Windows 向 Linux 迁移字体 和 Linux 等宽字体
- 如何选择单片机和Android-LInux-ARM开发板?
- 嵌入式arm linux环境中gdb+gdbserver调试
- ARM Linux 如何--注册和触发--软中断
- Linux下的压缩解压缩命令详解
- linux虚拟机network服务显示active(exited)
- 在Linux上配置无线网络