linux驱动sd适配节点,(转) 嵌入式 Linux 利用 udev 实现自动检测挂载U盘

udev配置文件是/etc/udev/udev.conf,也许长这样:

# udev.conf

# The initial syslog() priority: "err", "info", "debug" or its

# state can be changed with: "udevcontrol log_priority=".

udev_root="/dev/"

udev_rules="/etc/udev/rules.d"

udev_log="err"

udev_rules这一行表示udev的规则存储的目录,这个目录存储的是以.rules结束的文件。每一个文件处理一系列规则来帮助udev分配名字给设备文件以保证能被内核识别。

一般/etc/udev/rules.d下面可能有好几个udev规则文件,这些文件一部分是udev包安装的,另外一部分则是可能是别的硬件或者软件包生成的。这些规则文件的文件名通常是两个数字开头,它表示系统应用该规则的顺序,数字越小优先级越高。

/etc/udev/rules.d/11-usb-hotplug.rules  检测U盘的文件也许长这样:

KERNEL=="sd*", SUBSYSTEM=="block", RUN+="/etc/udev/disk-hotplug.sh"

这一行字面意思可以理解为有节点 /dev/sd* 创建的话,就会去执行 /etc/udev/disk-hotplug.sh 这个脚本

sd*的*是通配符,包含sda/sda1/sda2...,sdb/sdb1/sdb2...

/etc/udev/disk-hotplug.sh 可以这样写:

#!/bin/sh

################################################################################

# Create By Czy

################################################################################

################################################################################

CONSOLE=/dev/ttyAMA0

################################################################################

show_env ()

{

local RED="\033[31m"

local NORMAL="\033[00m"

{

echo -e ${RED}"ACTION=$ACTION" ${NORMAL}

echo -e ${RED}"DEVNAME=$DEVNAME" ${NORMAL}

echo -e ${RED}"DEVTYPE=$DEVTYPE" ${NORMAL}

echo -e ${RED}"DEVPATH=$DEVPATH" ${NORMAL}

echo -e ${RED}"SUBSYSTEM=$SUBSYSTEM" ${NORMAL}

echo -e ${RED}"SEQNUM=$SEQNUM" ${NORMAL}

} > ${CONSOLE}

}

################################################################################

add_usb ()

{

if [ ss"$SUBSYSTEM" != ss"block" ]; then

return

fi

if [ ss"$DEVTYPE" != ss"partition" ]; then

return

fi

show_env

if [ -e $DEVNAME ]; then

echo "add_usb..." > ${CONSOLE}

mount $DEVNAME /mnt

sync

fi

}

################################################################################

remove_usb ()

{

if [ ss"$SUBSYSTEM" != ss"block" ]; then

return

fi

if [ ss"$DEVTYPE" != ss"partition" ]; then

return

fi

show_env

echo "remove_usb..." > ${CONSOLE}

umount /mnt

}

################################################################################

hotplug_usb ()

{

case "$ACTION" in

"add" )

add_usb

;;

"remove" )

remove_usb

;;

* )

echo "Not recognise ACTION:${ACTION}" > ${CONSOLE}

;;

esac

return

}

################################################################################

hotplug_usb

这样既可实现自动检测U盘挂载

CONSOLE=/dev/ttyAMA0  这一句要改成实际用的

测试结果贴一下

33615ba7b55e3778b0b67ef1b1b14790.png

想用C/C++在程序代码里监控USB事件的话,可以利用PF_NETLINK    NETLINK_KOBJECT_UEVENT来实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值