hotplug_uevent机制_修改mdev配置

25 篇文章 0 订阅

1、mdev.conf格式说明

mdev.conf的格式:
: [<@|$|*> ]

device regex:正则表达式,表示哪一个设备
uid: owner
gid: 组ID
octal permissions:以八进制表示的属性
@:创建设备节点之后执行命令
$:删除设备节点之前执行命令
*:创建设备节点之后 和 删除设备节点之前 执行命令
command:要执行的命令

2、配置mdev.conf

按照韦老师的教学,操作

vi /etc/mdev.conf
//加入
xyz 0:0 777
insmod led_drv.ko
led_base = 0xfea43010
led_dir = 0xfea43400
ls -l dev/xyz
crw-------    1 0        0         253,   0 Jan  1 00:00 dev/xyz

发现xyz权限并没有更改,设备在启动的时候打印这么一句话

/etc/init.d/rcS: line 5: can't create /proc/sys/kernel/hotplug: nonexistent directory

百度发现编译内核的时候需要把下面几选项加上

CONFIG_PROC_FS=y

CONFIG_PROC_SYSCTL=y

CONFIG_HOTPLUG=y

CONFIG_NET=y

如果CONFIG_HOTPLUG和CONFIG_NET不选或没全选上的话,/proc/sys/kernel下将不会创建hotplug文件.(参见kernel/sysctl.c)

检查Hi3519v101的内核,发现并没有CONFIG_HOTPLUG,该问题现无解。

3、修改mdev.conf

在mdev.conf添加

vi /etc/mdev.conf
//加入
i2c-0 0:0 777
reboot
//启动之后
ls -l dev/i2c-*
crwxrwxrwx    1 0        0          89,   0 Jan  1 00:00 dev/i2c-0
crw-rw----    1 0        0          89,   1 Jan  1 00:00 dev/i2c-1
crw-rw----    1 0        0          89,   2 Jan  1 00:00 dev/i2c-2
crw-rw----    1 0        0          89,   3 Jan  1 00:00 dev/i2c-3
insmod led_drv.ko
led_base = 0xfea43010
led_dir = 0xfea43400
 ls -l dev/xyz
crw-------    1 0        0         253,   0 Jan  1 00:00 dev/xyz

发现重启之后i2c-0的权限更改了,说明mdev.conf是起效了的,只是不支持新加载的驱动,也就是不支持热插拔,跟上面的hotplug不能创建有关系。

3、完善mdev.conf

3.1加上正则表达式

vi /etc/mdev.conf
//修改为
i2c-[0123]? 0:0 777
reboot
//启动之后
ls -l dev/i2c-*
crwxrwxrwx    1 0        0          89,   0 Jan  1 00:00 dev/i2c-0
crwxrwxrwx    1 0        0          89,   1 Jan  1 00:00 dev/i2c-1
crwxrwxrwx    1 0        0          89,   2 Jan  1 00:00 dev/i2c-2
crwxrwxrwx    1 0        0          89,   3 Jan  1 00:00 dev/i2c-3

3.2创建节点后执行某个命令 @

vi /etc/mdev.conf
//修改,$MDEV 环境变量表示哪个设备节点
i2c-[0123]? 0:0 777 @ echo create /dev/$MDEV > /dev/console
reboot
//启动之后,进入系统之前可看到如下打印
create /dev/i2c-0
create /dev/i2c-1
create /dev/i2c-2
create /dev/i2c-3

3.3创建节点后,删除节点之前都执行某个命令 *

vi /etc/mdev.conf
//修改,$MDEV 环境变量表示哪个设备节点
i2c-[0123]? 0:0 777 * if [ $ACTION = "add" ]; then echo create /dev/$MDEV > /dev/console; else echo remove /dev/$MDEV > /dev/console; fi
reboot
//启动之后,进入系统之前可看到如下打印
sh: missing ]
remove /dev/i2c-0
sh: missing ]
remove /dev/i2c-1
sh: missing ]
remove /dev/i2c-2
sh: missing ]
remove /dev/i2c-3

ls -l dev/i2c-*
crwxrwxrwx    1 0        0          89,   0 Jan  1 00:00 dev/i2c-0
crwxrwxrwx    1 0        0          89,   1 Jan  1 00:00 dev/i2c-1
crwxrwxrwx    1 0        0          89,   2 Jan  1 00:00 dev/i2c-2
crwxrwxrwx    1 0        0          89,   3 Jan  1 00:00 dev/i2c-3

创建成功的,但打印并没有按照意愿执行,说明if [ $ACTION = “add” ]这里有问题,可能环境变量并不是这个,这里不深究了,后续再解决。
也可以采用@ 与 $代替*,这样就用判断了。
如果是可加载模块,在移除模块的时候,还会有相关打印出现。

3.4创建命令脚本

vi /sbin/add_remove_i2c.sh
//添加内容
if [ $ACTION = "add" ]; 
then 
	echo create /dev/$MDEV > /dev/console; 
else 
	echo remove /dev/$MDEV > /dev/console;
fi

vi /etc/mdev.conf
//添加内容
i2c-[0123]? 0:0 777 * /sbin/add_remove_i2c.sh

reboot
//出现如下打印,说明无权限执行
/bin/sh: /sbin/add_remove_i2c.sh: Permission denied
/bin/sh: /sbin/add_remove_i2c.sh: Permission denied
/bin/sh: /sbin/add_remove_i2c.sh: Permission denied
/bin/sh: /sbin/add_remove_i2c.sh: Permission denied

//加上可执行权限:chmod +x /sbin/add_remove_i2c.sh
reboot
//打印如下,说明/sbin/add_remove_i2c.sh 起效了
ash: add: unknown operand
remove /dev/i2c-0
ash: add: unknown operand
remove /dev/i2c-1
ash: add: unknown operand
remove /dev/i2c-2
ash: add: unknown operand
remove /dev/i2c-3

3.5加载U盘

vi /sbin/add_usb.sh
//添加内容
mount /dev/$MDEV /mnt;
echo mount /dev/$MDEV /mnt > /dev/console;

vi /sbin/remove_usb.sh
//添加内容
umount /mnt;
echo umount ok!

vi /etc/mdev.conf
//添加内容
sda[1-9]+ 0:0 777 @ /sbin/add_usb.sh
sda[1-9]+ 0:0 777 $ /sbin/remove_usb.sh
reboot

/etc/init.d/rcS: line 5: can't create /proc/sys/kernel/hotplug: nonexistent directory
mount /dev/sda1
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): couldn't mount as ext2 due to feature incompatibilities
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
mount /dev/sda2

cat proc/mounts
rootfs / rootfs rw 0 0
10.117.197.252:/home/osrc/Hi3519V101_SDK_V1.0.4.0/osdrv/opensource/busybox/busybox-1.20.2/rootbox / nfs rw,relatime,vers=3,rsize=4096,wsize=4096,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.117.197.252,mountvers=3,mountproto=tcp,local_lock=all,addr=10.117.197.252 0 0
devtmpfs /dev devtmpfs rw,relatime,size=37300k,nr_inodes=9325,mode=755 0 0
proc /proc proc rw,relatime 0 0
tmpfs /tmp tmpfs rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
/dev/sda1 /mnt vfat rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
/dev/sda2 /mnt ext4 rw,relatime,data=ordered 0 0

因为不支持hotplug,拔掉U盘也没有相应的打印信息,移除的操作无法实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值