modem_hotplug 脚本解析

2024-01-20 09:58
文章标签 解析 脚本 modem hotplug

本文主要是介绍modem_hotplug 脚本解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面两个文件在3G上网卡插上后实现USB转串口模式

/etc >: cat mdev.conf 
sd[a-h]*[0-9]     0:0 0660        *(/usr/sbin/hotplug /media/usb)
sd[a-h]           0:0 0660        *(/usr/sbin/hotplug /media/usb)
ub[a-h]*[0-9]     0:0 0660        *(/usr/sbin/hotplug /media/usb)
ub[a-h]           0:0 0660        *(/usr/sbin/hotplug /media/usb)
mmcblk[0-9]p[0-9] 0:0 0660        @(/bin/mount /dev/$MDEV /media/mmc)
mmcblk[0-9]       0:0 0660        $(/bin/umount /media/mmc)
sg*[0-9]          0:0 0660        *(/usr/sbin/modem_hotplug > /logs/modem_hotplug_sg.log 2>&1)
ttyUSB[0-9]       0:0 0660        *(/usr/sbin/modem_hotplug > /logs/modem_hotplug_tty.log 2>&1)

/etc >: 

~ >: cat usr/sbin/modem_hotplug 

#!/bin/sh
# FILE: /apps/tools/tty_Symlic
# Copyright (C) 2013 GuoWenxue <guowenxue@gmail.com>
# This shell scripts used to auto create symbolic link(aliase device name /dev/ttyGSM*) 
# for all the USB serial converter device(/dev/ttyUSB*), called by /etc/mdev.conf


source /etc/profile 
DEVID_MF626_MODEM=19d2:0031
DEVID_MF626_CDROM=19d2:2000


MODEM_PREFIX=/dev/ttyGSM
LOCKFILE=/tmp/.symlic.lock


set -x




switch_cdrom_modem()
{
   USB_ID=`lsusb | awk -F "ID" '{print $2}'`
   for id in $USB_ID
   do 
      if [ $DEVID_MF626_CDROM == $id ] ; then
          usb_modeswitch -c /etc/ppp/zte_mf626.conf
      fi    
   done   
}


find_symlink_index()
{
   index=-1
   prefix=$1
   symlinks=`ls ${prefix}*`
   
   for i in $symlinks
   do 
      #i=`echo $i | awk -F $prefix '{print $2}'`
      i=${i##$prefix}
      if [ $i > $index ] ; then 
         index=$i 
      fi
   done   
   
   index=`expr $index + 1`
   return $index
}


create_symlic()                                                                       
{                                                                                      
   #Check if this /dev/ttyUSB? already linked then exist 
   ls -l ${MODEM_PREFIX}* | grep $MDEV && return; #插入USB转串口的设备时如果发现ID不对就会退出。
   
   set -x
   syspath=`echo $DEVPATH | awk -F "/" '{ printf("/sys/%s/%s/%s/%s/%s/%s", $2,$3,$4,$5,$6,$7); }'` #syspath=/sys/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1
   echo "Check 3G USB Modem ID in $syspath "  
   devID=`cat ${syspath}/idVendor`:`cat ${syspath}/idProduct`                                  
   
   if [ $devID == $DEVID_MF626_MODEM ] ; then
      find_symlink_index ${MODEM_PREFIX}
      index=$?
      echo "Create symbolic link: ln -s $MDEV ${MODEM_PREFIX}${index}"
      ln -s $MDEV ${MODEM_PREFIX}${index}
   fi
}                                            
                                             
remove_symlic()                              
{                                                            
   symlic=`ls -l ${MODEM_PREFIX}* | grep $MDEV | awk '{print $9}'`
                                             
   if [ ! -z "$symlic" ] ; then                    
      echo "Remove $symlic -> $MDEV" 
      rm -f $symlic                                          
      rm -f /tmp/cdrom.log /tmp/tty.log
   fi                                                        
}  


{
  flock 300    #锁住该脚本
  
  case $ACTION in
      remove)
          if [ "${MDEV:0:6}" == "ttyUSB" ] ; then  
             remove_symlic
          fi   
          ;;
     
      add)
          if [ "${MDEV:0:2}" == "sg" ] ; then
              switch_cdrom_modem
              export > /tmp/cdrom.log
          elif [ "${MDEV:0:6}" == "ttyUSB" ] ; then 
              create_symlic
              export > /tmp/tty.log
          fi    
          ;;
  esac     
  
} 300<>$LOCKFILE


~ >: 

插上后会在logs、tmp目录下生成以下一些文件:

~ >: usb 1-1.1: new full speed USB device number 4 using s3c2410-ohci
usb 1-1.1: New USB device found, idVendor=19d2, idProduct=2000
usb 1-1.1: New USB device strings: Mfr=2, Product=1, SerialNumber=3
usb 1-1.1: Product: ZTE CDMA Technologies MSM
usb 1-1.1: Manufacturer: ZTE,Incorporated
usb 1-1.1: SerialNumber: 1234567890ABCDEF
scsi1 : usb-storage 1-1.1:1.0
scsi 1:0:0:0: CD-ROM            ZTE      USB SCSI CD-ROM  2.31 PQ: 0 ANSI: 2
scsi 1:0:0:0: Attached scsi generic sg0 type 5
usb 1-1.1: usbfs: process 1056 (usb_modeswitch) did not claim interface 0 before use
usb 1-1.1: USB disconnect, device number 4
usb 1-1.1: new full speed USB device number 5 using s3c2410-ohci
usb 1-1.1: New USB device found, idVendor=19d2, idProduct=0031
usb 1-1.1: New USB device strings: Mfr=2, Product=1, SerialNumber=3
usb 1-1.1: Product: ZTE CDMA Technologies MSM
usb 1-1.1: Manufacturer: ZTE,Incorporated
usb 1-1.1: SerialNumber: 1234567890ABCDEF
option 1-1.1:1.0: GSM modem (1-port) converter detected
usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB0
option 1-1.1:1.1: GSM modem (1-port) converter detected
usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB1
scsi2 : usb-storage 1-1.1:1.2
option 1-1.1:1.3: GSM modem (1-port) converter detected
usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB2
scsi 2:0:0:0: Direct-Access     ZTE      MMC Storage      2.31 PQ: 0 ANSI: 2
sd 2:0:0:0: Attached scsi generic sg0 type 0
sd 2:0:0:0: [sda] Attached SCSI removable disk


~ >: 
~ >: 
~ >: ls tmp/
cdrom.log     dropbear.pid  messages      syslogd.pid   utmp
crond.pid     logs          stat          tty.log
~ >: cat tmp/cdrom.log 
export ACTION='add'
export DEVNAME='sg0'
export DEVPATH='/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.0/host1/target1:0:0/1:0:0:0/scsi_generic/sg0'
export EDITOR='/bin/vi'
export HISTFILESIZE='500'
export HISTSIZE='500'
export HOME='/'
export HOSTNAME='WirelessRouter'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/lib:/usr/lib:/apps/lib'
export LOGNAME='root'
export MAJOR='21'
export MDEV='sg0'
export MINOR='0'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/apps/tools'
export PS1='\w >: '
export PWD='/dev'
export SEQNUM='516'
export SUBSYSTEM='scsi_generic'
export USER='root'
export network_cfg_dir='/apps/etc/network'
export ACTION='add'
export DEVNAME='sg0'
export DEVPATH='/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.2/host2/target2:0:0/2:0:0:0/scsi_generic/sg0'
export EDITOR='/bin/vi'
export HISTFILESIZE='500'
export HISTSIZE='500'
export HOME='/'
export HOSTNAME='WirelessRouter'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/lib:/usr/lib:/apps/lib'
export LOGNAME='root'
export MAJOR='21'
export MDEV='sg0'
export MINOR='0'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/apps/tools'
export PS1='\w >: '
export PWD='/dev'
export SEQNUM='544'
export SUBSYSTEM='scsi_generic'
export USER='root'
export network_cfg_dir='/apps/etc/network'
~ >: cat tmp/tty.log 
export ACTION='add'
export DEVPATH='/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0'
export EDITOR='/bin/vi'
export HISTFILESIZE='500'
export HISTSIZE='500'
export HOME='/'
export HOSTNAME='WirelessRouter'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/lib:/usr/lib:/apps/lib'
export LOGNAME='root'
export MDEV='ttyUSB0'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/apps/tools'
export PS1='\w >: '
export PWD='/dev'
export SEQNUM='528'
export SUBSYSTEM='usb-serial'
export USER='root'
export network_cfg_dir='/apps/etc/network'
export ACTION='add'
export DEVPATH='/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.1/ttyUSB1'
export EDITOR='/bin/vi'
export HISTFILESIZE='500'
export HISTSIZE='500'
export HOME='/'
export HOSTNAME='WirelessRouter'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/lib:/usr/lib:/apps/lib'
export LOGNAME='root'
export MDEV='ttyUSB1'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/apps/tools'
export PS1='\w >: '
export PWD='/dev'
export SEQNUM='531'
export SUBSYSTEM='usb-serial'
export USER='root'
export network_cfg_dir='/apps/etc/network'
export ACTION='add'
export DEVNAME='ttyUSB1'
export DEVPATH='/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.1/ttyUSB1/tty/ttyUSB1'
export EDITOR='/bin/vi'
export HISTFILESIZE='500'
export HISTSIZE='500'
export HOME='/'
export HOSTNAME='WirelessRouter'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/lib:/usr/lib:/apps/lib'
export LOGNAME='root'
export MAJOR='188'
export MDEV='ttyUSB1'
export MINOR='1'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/apps/tools'
export PS1='\w >: '
export PWD='/dev'
export SEQNUM='532'
export SUBSYSTEM='tty'
export USER='root'
export network_cfg_dir='/apps/etc/network'
export ACTION='add'
export DEVNAME='ttyUSB2'
export DEVPATH='/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.3/ttyUSB2/tty/ttyUSB2'
export EDITOR='/bin/vi'
export HISTFILESIZE='500'
export HISTSIZE='500'
export HOME='/'
export HOSTNAME='WirelessRouter'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/lib:/usr/lib:/apps/lib'
export LOGNAME='root'
export MAJOR='188'
export MDEV='ttyUSB2'
export MINOR='2'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/apps/tools'
export PS1='\w >: '
export PWD='/dev'
export SEQNUM='538'
export SUBSYSTEM='tty'
export USER='root'
export network_cfg_dir='/apps/etc/network'
export ACTION='add'
export DEVNAME='ttyUSB0'
export DEVPATH='/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0/tty/ttyUSB0'
export EDITOR='/bin/vi'
export HISTFILESIZE='500'
export HISTSIZE='500'
export HOME='/'
export HOSTNAME='WirelessRouter'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/lib:/usr/lib:/apps/lib'
export LOGNAME='root'
export MAJOR='188'
export MDEV='ttyUSB0'
export MINOR='0'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/apps/tools'
export PS1='\w >: '
export PWD='/dev'
export SEQNUM='529'
export SUBSYSTEM='tty'
export USER='root'
export network_cfg_dir='/apps/etc/network'
export ACTION='add'
export DEVPATH='/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/1-1.1:1.3/ttyUSB2'
export EDITOR='/bin/vi'
export HISTFILESIZE='500'
export HISTSIZE='500'
export HOME='/'
export HOSTNAME='WirelessRouter'
export INPUTRC='/etc/inputrc'
export LD_LIBRARY_PATH='/lib:/usr/lib:/apps/lib'
export LOGNAME='root'
export MDEV='ttyUSB2'
export PAGER='/bin/more '
export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/apps/tools'
export PS1='\w >: '
export PWD='/dev'
export SEQNUM='537'
export SUBSYSTEM='usb-serial'
export USER='root'
export network_cfg_dir='/apps/etc/network'
~ >: cat sys/
block/     class/     devices/   fs/        module/
bus/       dev/       firmware/  kernel/    power/
~ >: cat logs/
modem_hotplug_sg.log   nat.log
modem_hotplug_tty.log  start_apps.log
~ >: cat logs/modem_hotplug_sg.log 
+ flock 300
+ [ sg == sg ]
+ switch_cdrom_modem
+ lsusb
+ awk -F ID {print $2}
+ USB_ID= 1d6b:0001
 05e3:0606
 19d2:0031
+ [ 19d2:2000 == 1d6b:0001 ]
+ [ 19d2:2000 == 05e3:0606 ]
+ [ 19d2:2000 == 19d2:0031 ]
+ export
~ >: cat logs/modem_hotplug_tty.log 
+ flock 300
+ [ tt == sg ]
+ [ ttyUSB == ttyUSB ]
+ create_symlic
+ ls -l /dev/ttyGSM0 /dev/ttyGSM1 /dev/ttyGSM2
+ grep ttyUSB2
lrwxrwxrwx    1 root     root             7 Apr 26 11:07 /dev/ttyGSM2 -> ttyUSB2
+ return
+ export
"/sys/%s/%s/%s/%s/%s/%s", $2,$3,$4,$5,$6,$7); }
+ syspath=/sys/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1
+ echo Check 3G USB Modem ID in /sys/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1 
Check 3G USB Modem ID in /sys/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1 
+ cat /sys/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/idVendor
+ cat /sys/devices/platform/s3c2410-ohci/usb1/1-1/1-1.1/idProduct
+ devID=19d2:0031
+ [ 19d2:0031 == 19d2:0031 ]
+ find_symlink_index /dev/ttyGSM
+ index=-1
+ prefix=/dev/ttyGSM
+ ls /dev/ttyGSM0 /dev/ttyGSM1
+ symlinks=/dev/ttyGSM0
/dev/ttyGSM1
+ i=0
+ [ 0 ]
+ index=0
+ i=1
+ [ 1 ]
+ index=1
+ expr 1 + 1
+ index=2
+ return 2
+ index=2
+ echo Create symbolic link: ln -s ttyUSB2 /dev/ttyGSM2
Create symbolic link: ln -s ttyUSB2 /dev/ttyGSM2
+ ln -s ttyUSB2 /dev/ttyGSM2
+ export
~ >: 

这篇关于modem_hotplug 脚本解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625619

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二