由于产测需要用到hotplug,而dfu设备不会触发hotplug,所以这里需要更改hotplug.json这个文件,这个文件在/etc/hotplug.json
要看懂这个文件,要先知道这些词语
eq 等于
neq 不等于
gt 大于
egt 大于等于
lt 小于
elt 小于等于
like LIKE
between BETWEEN
代入进去就知道是什么意思了
例子一:
[ [ "case", "ACTION", { "add": [ [ "if", [ "and", [ "has", "MAJOR" ], [ "has", "MINOR" ] ], [...] ] ] } ], ]
换成能看的懂的语言就是
select action { case "add": if has(marjor) && has(mior) {...} }
例子二:
[ "if", [ "eq", "DEVNAME", [ "null", "full", "ptmx", "zero", "tty", "net", "random", "urandom" ] ], [ [ "makedev", "/dev/%DEVNAME%", "0666" ], [ "return" ] ] ]
换成能看懂的语言就是
if devname == null full ptmx zero tty net random { makedev /dev/%devname% return }
相信只要能看懂这个,就能看懂下面正文并能够修改了
正文
root@OpenWrt:~# cat /etc/hotplug.json [ [ "case", "ACTION", { "add": [ [ "if", [ "and", [ "has", "MAJOR" ], [ "has", "MINOR" ], ], [ [ "if", [ "or", [ "eq", "DEVNAME", [ "null", "full", "ptmx", "zero" ], ], [ "regex", "DEVNAME", [ "^gpio", "^hvc" ], ], ], [ [ "makedev", "/dev/%DEVNAME%", "0666" ], [ "return" ], ] ], [ "if", [ "or", [ "eq", "DEVNAME", "mapper/control" ], [ "regex", "DEVPATH", "^ppp" ], ], [ [ "makedev", "/dev/%DEVNAME%", "0600" ], [ "return" ], ], ], [ "if", [ "has", "DEVNAME" ], [ "makedev", "/dev/%DEVNAME%", "0644" ], ], ], ], [ "if", [ "has", "FIRMWARE" ], [ [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ], [ "load-firmware", "/lib/firmware" ], [ "return" ] ] ], ], "remove" : [ [ "if", [ "and", [ "has", "DEVNAME" ], [ "has", "MAJOR" ], [ "has", "MINOR" ], ], [ "rm", "/dev/%DEVNAME%" ] ] ] } ], [ "if", [ "eq", "SUBSYSTEM", "platform" ], [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ] ], [ "if", [ "and", [ "has", "BUTTON" ], [ "eq", "SUBSYSTEM", "button" ], ], [ "exec", "/etc/rc.button/%BUTTON%" ] ], [ "if", [ "eq", "SUBSYSTEM", [ "net", "input", "usb", "ieee1394", "block", "atm", "zaptel", "tty", "button" ] ], [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ] ], [ "if", [ "and", [ "eq", "SUBSYSTEM", "usb-serial" ], [ "regex", "DEVNAME", [ "^ttyUSB", "^ttyACM" ] ], ], [ "exec", "/sbin/hotplug-call", "tty" ] ] ]
可以看到,这个配置文件主要是
1、定义add相应动作
2、定义remove相应动作
3、如果出现键盘事件并执行的脚本位置
4、如果出现usb串口事件并执行的脚本位置
其中我们之前用到的BPI:Bit以及BPI:smart烧录脚本都是用到了下面这一行
[ "if", [ "and", [ "eq", "SUBSYSTEM", "usb-serial" ], [ "regex", "DEVNAME", [ "^ttyUSB", "^ttyACM" ] ], ], [ "exec", "/sbin/hotplug-call", "tty" ] ]
这几行代码的意思就是
如果SUBSYSTEM=usb-serial,且DEVNAME已ttyUSB或者ttyACM开头(regex就是执行正则表达式),就执行/sbin/hotplug-call脚本(exec是执行脚本的命令)。而脚本内容如下
root@OpenWrt:~# cat /sbin/hotplug-call #!/bin/sh # Copyright (C) 2006-2016 OpenWrt.org export HOTPLUG_TYPE="$1" . /lib/functions.sh PATH="/usr/sbin:/usr/bin:/sbin:/bin" LOGNAME=root USER=root export PATH LOGNAME USER export DEVICENAME="${DEVPATH##*/}" [ \! -z "$1" -a -d /etc/hotplug.d/$1 ] && { for script in $(ls /etc/hotplug.d/$1/* 2>&-); do ( [ -f $script ] && . $script ); done }
可以看到,会自动执行/etc/hotplug.d/$1/下面所有脚本($1就是前面的tty),如果tty设备插入后,要执行某个脚本,只需把脚本放入/etc/hotplug.d/tty/即可
暂无评论