精华内容
下载资源
问答
  • # This is used to change the default configuration of Realtek USB ethernet adapters ACTION!="add", GOTO="usb_realtek_net_end" SUBSYSTEM!="usb", GOTO="usb_realtek_net_end" ENV{DEVTYPE}!="usb_device", ...

    udev下添加规则:

    =======

    # This is used to change the default configuration of Realtek USB ethernet adapters

    ACTION!="add", GOTO="usb_realtek_net_end"
    SUBSYSTEM!="usb", GOTO="usb_realtek_net_end"
    ENV{DEVTYPE}!="usb_device", GOTO="usb_realtek_net_end"
    #ENV{DEVTYPE}!="usb_interface", GOTO="usb_realtek_net_end"

    # Realtek
    ATTR{idVendor}=="0b95", ATTR{idProduct}=="1790", RUN+="/etc/udev/usb-net.sh"
    ATTR{idVendor}=="0bda", ATTR{idProduct}=="b720", RUN+="/etc/udev/usb-wifi.sh"

    #RUN+="/etc/udev/usb-net.sh"

    LABEL="usb_realtek_net_end"

    =======

    wifi模块是用作AP使用的,需要启动AP的话还需要稍作处理,具体在usb-wifi.sh中启动:

    1.先kill掉之前启动的dhcpd hostapd

    =======

    #!/bin/sh

    echo "ifconfig wifi..." > /dev/ttyAMA0

    KILL_TASK=`ps -ef | grep hostapd | grep -v grep | awk '{print $1}'`
    KILL_TASK2=`ps -ef | grep udhcpd | grep -v grep | awk '{print $1}'`


    for i in $KILL_TASK
    do
      echo "kill $i" > /dev/ttyAMA0
      kill -9 $i
    done

    for i in $KILL_TASK2
    do                 
      echo "kill $i" > /dev/ttyAMA0
      kill -9 $i                 
    done 

    sleep 2

    ifconfig wlan1 up
    ifconfig wlan1 192.168.18.1
    udhcpd -fS /etc/udhcpd.conf &
    hostapd /etc/hostapd.conf &

    =======

    展开全文
  • mdev 需要内核支持热插拔,在内核 .config 文件中确保已设置 CONFIG_HOTPLUG=y 在内核目录下 make menuconfig , 搜索 hotplug │ Symbol: HOTPLUG [ =y ] │ │ Type : boolean │ │ Prompt: ...

    实验环境

    1. 主板:JZ2440
    2. 编译器:arm-linux-gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
    3. Linux Kernel:3.4.2
    4. busybox-1.20.0.tar.bz2
    5. openssl-1.0.1d.tar.gz wpa_supplicant-2.0.tar.gz
    6. dhcp-4.2.5-P1.tar.gz
    7. USB无线网卡:Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter

    一、MDEV 机制

    官方文档:busybox-1.20.0/docs/mdev.txt

    1. 基本用法

       Mdev 有两个用途:1. 初始化设备节点 (initial population) 2. 动态更新设备节点 (dynamic updates)。这两个都要求内核支持 sysfs 虚拟文件系统并且将它挂载到 /sys。对于动态更新,还需要在内核中使能热拔插 (hotplugging) 。

    以下是初始化脚本的典型代码:

    [0] mount -t proc proc /proc
    [1] mount -t sysfs sysfs /sys
    [2] echo /sbin/mdev > /proc/sys/kernel/hotplug
    [3] mdev -s
    

    如果没有 proc 文件系统,就应该变为:

    [1] mount -t sysfs sysfs /sys
    [2] sysctl -w kernel.hotplug=/sbin/mdev
    [3] mdev -s
    

    更完整的设置应该在前面的设置之前执行下面的代码:

    [4] mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
    [5] mkdir /dev/pts
    [6] mount -t devpts devpts /dev/pts
    

    2. MDEV 的配置文件

    配置文件:/etc/mdev.conf
       如果你不想使用默认的 660 权限,可以通过可选的配置文件来控制 Mdev,并且可以支持执行你自己的命令。

    配置文件格式如下:

    <device regex> <uid>:<gid> <permissions> [=path] [@|$|*<command>]
    
    The special characters have the meaning:
    	@ Run after creating the device.
    	$ Run before removing the device.
    	* Run both after creating and before removing the device.
    

    二、Kernel hotplug

    mdev 需要内核支持热插拔,在内核 .config 文件中确保已设置

     CONFIG_HOTPLUG=y
    

    在内核目录下 make menuconfig , 搜索 hotplug

      │ Symbol: HOTPLUG [=y]                                                    │  
      │ Type  : boolean                                                         │  
      │ Prompt: Support for hot-pluggable devices                               │  
      │   Defined at init/Kconfig:1015                                          │  
      │   Depends on: EXPERT [=n]                                               │  
      │   Location:                                                             │  
      │     -> General setup                                                    │  
      │       -> Configure standard kernel features (expert users) (EXPERT [=n] │  
      │   Selected by: IXP4XX_NPE [=n] && ARCH_IXP4XX [=n] || XEN_PCIDEV_FRONTE 
    

    这就会将内核目录下 lib/kobject_uevent.c 编译到中。
    阅读该文件,会发现:
       在 kobject_uevent_env 函数中,发生 uevent 事件时会添加环境变量 ACTION=add ,或者在数组 kobject_actions 中的其他取值。

    三、wpa_supplicant 使用方法

    官方文档:wpa_supplicant-2.0/wpa_supplicant/README

    常用命令,其余详见官方文档:

    wpa_supplicant -B -d -Dnl80211 -iwlan0 -c/etc/wpa-wpa2.conf
    wpa_supplicant -B -d -iwlan0 -c/etc/wpa2.conf
    wpa_cli -iwlan0 status   # 获得 wlan0 的状态
    

    wpa_cli 命令

    wpa_cli command line options
    
    wpa_cli [-p<path to ctrl sockets>] [-i<ifname>] [-hvB] [-a<action file>] \
            [-P<pid file>] [-g<global ctrl>]  [command..]
      -h = help (show this usage text)
      -v = shown version information
      -a = run in daemon mode executing the action file based on events from
           wpa_supplicant  # 执行脚本
      -B = run a daemon in the background # 后台运行
      default path: /var/run/wpa_supplicant
      default interface: first interface found in socket path
    

    在 connect/disconnect 时执行额外程序的方法:(脚本在后面实现中举例)

    wpa_cli -a/sbin/wpa_action.sh -B
    

    四、DHCP

    交叉编译使用DHCP(dhcp-4.2.5-P1.tar.gz) 连接热点自动获取 IP 地址

    五、实现

    1. 开机脚本

    a. /etc/fstab
    linux 之 fstab 文件详解
    执行 mount -a 时,将挂载 /etc/fstab 的所有内容。

    #device    mount-point    type   optioons   dump   fsck    order
    proc	   /proc          proc	 defaults     0     0
    sysfs      /sys	         sysfs   defaults     0     0
    tmpfs      /dev          tmpfs   defaults     0     0
    

    a. /etc/init.d/rcS
    开机脚本中应该将(一)中提到的内容实现。

    mount -a      # 挂载 /etc/fstab 中的内容
    mkdir /dev/pts
    mount -t devpts devpts /dev/pts
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    

    2. 创建 mdev 配置文件

    echo "wlan0 0:0 660 * /sbin/auto_wifi.sh" > /etc/mdev.conf
    

    3. 创建 mdev 命令脚本

    创建上一步中的脚本文件: /sbin/auto_wifi.sh

    #!/bin/sh
    if [ $ACTION = "add" ];
    then                                              
       wpa_supplicant -B -c/etc/wpa-wpa2.conf  -iwlan0
       wpa_cli -a/sbin/wpa_action.sh -B  # wifi 连接成功后自动执行 /sbin/wpa_action.sh
    else                     
       killall wpa_supplicant
       killall wpa_cli 
       killall dhclient
    fi
    

    3. 创建 wpa_cli 命令脚本

    脚本路径:/sbin/wpa_action.sh
    在连接完成后,使用 dhclient 命令来自动获取 IP 地址。

    #!/bin/sh
    IFNAME=$1
    CMD=$2
    if [ "$CMD" = "CONNECTED" ]; then
       echo connect $IFNAME, dhclient for it > /dev/console
       dhclient $IFNAME
    fi
    if [ "$CMD" = "DISCONNECTED" ]; then
       echo disconnect $IFNAME, kill dhclient for it > /dev/console
       killall dhclient
    fi
    

    参考链接

    linux 中的热插拔和 mdev 机制
    linux 之 fstab 文件详解
    交叉编译使用DHCP(dhcp-4.2.5-P1.tar.gz) 连接热点自动获取 IP 地址

    展开全文
  • USB热拔插事件

    万次阅读 2018-08-26 11:35:41
    前言 USB(Universal Serial ...USB接口常用在诸如USB串行设备驱动(3G/4G上网卡、蓝牙设备、串口设备)、USB大容量磁盘驱动(U盘、移动硬盘)、USB主机控制器驱动(嵌入式otg,dwc_otg)、USB键盘鼠标等,这一些的...

    前言

    USBUniversal Serial Bus通用串行总线的缩写,是一个外部总线标准,用于规范主机与外围设备的连接以及通讯,目前使用较多的版本有USB1.1USB2.0USB3.0等。USB接口常用在诸如USB串行设备驱动(3G/4G上网卡、蓝牙设备、串口设备)USB大容量磁盘驱动(U盘、移动硬盘)、USB主机控制器驱动(嵌入式otgdwc_otg)、USB键盘鼠标等,这一些的USB功能支持可以通过内核配置来实现,内核会管理这些USB设备的信息(lsusb 命令可以查看USB设备的情况)。上层应用开发则可以通过监听内核socket来获取设备的热拔插信息,进而利用此信息来确定相关的挂载操作或者其他的一些上层应用的业务逻辑。

    USB驱动框图

    为了加深对USB的理解,我们且看看USB2.0 Host逻辑框图,以达到对USB设备与主机对接接口及协议有一个比较全面的理解。可以看出最右边的PHY0PHY1是用来实现与外部设备进行物理连接的,然后通过serial interfaceUSB控制单元相连接,USB控制单元里面又分为EHCI Host ControllerOHCI Host Controller以实现USB2.0USB1.1的兼容,EHCI Host ControllerOHCI Host Controller则通过AHB BUS(在PC机则是PCI总线)总线与MemoryCPU相连。整个过程看起来并不是十分复杂,但是实际应用中有大量的控制寄存器需要配置来实现与不同的外围设备进行相连,但是这一切的繁杂工作内核已经帮我们实现了。

    USB热拔插

    热插拔(hot-pluggingHot Swap)即带电插拔,它的诞生提高了系统与外围设备的交互能力。那么我们如何获取USB的热拔插事件呢,这里可以通过与内核建立socket连接,然后对socket进行监听来获取USB拔插信息,接着对监听的信息进行处理,对于大容量存储设备则决定设备的挂载目录(mount /dev/sdb /usb)或者设备卸载(umount -l /USB)、对于诸如3G/4G等上网卡设备,则可以通过监听拔插信息来决定拨号上网或者接听电话等。下面通过例子说明如何通过内核socket获取设备热拔插信息的。

    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <sys/un.h>
    #include <sys/ioctl.h>
    #include <sys/socket.h>
    #include <linux/netlink.h>
    #include <errno.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <stddef.h>
    #include <sys/mount.h>
    #include <sys/wait.h>
    #include <sys/types.h>
    #include <mntent.h>
    
    
    static int CreateHotPlugSock(void)
    {
        struct sockaddr_nl snl;
        const int buffersize = 16*1024;
        int retval = 0;
    
        memset(&snl,0x00,sizeof(struct sockaddr_nl));
        snl.nl_family = AF_NETLINK;
        snl.nl_pid = getpid();
        snl.nl_groups = 1;
    
        int hotplug_sock = socket(PF_NETLINK,SOCK_DGRAM,NETLINK_KOBJECT_UEVENT);
        if(hotplug_sock == 1)
        {
            printf("error get socket:%s",strerror(errno));
            return -1;
        }
    
        setsockopt(hotplug_sock, SOL_SOCKET, SO_RCVBUFFORCE, &buffersize, sizeof(buffersize));
        retval = bind(hotplug_sock,(struct sockaddr *)&snl,sizeof(struct sockaddr_nl));
        if(0 > retval)
        {
            printf("bind failed:%s",strerror(errno));
            close(hotplug_sock);
            hotplug_sock = -1;
            return -1;
        }
        return hotplug_sock;
    }
    
    int main(int argc, char* argv[])
    {
    	int sockfd;
    	int sum,size;
    	char buf[1024] = {0};
    	char *str;
    	sockfd = CreateHotPlugSock();
    	while(1)
    	{
    	    sum = 0;
            memset(buf, 0, sizeof(buf));
            size = recv(sockfd, buf, sizeof(buf), 0);
            	//	fprintf(stderr,"size=%d, buf=[%s], strlen(buf)=%d\n", size, buf, strlen(buf));
            while(sum < size)
            {
                str = buf + sum;
                sum += strlen(str);
                buf[sum] = '\n';
            }
            buf[sum] = 0;
    		//输出热拔插socket监听的信息
            fprintf(stderr,"buf=[%s]\n\n", buf);
    		usleep(100*1000);
    	}	
    }

    下面是样例代码socket监听鼠标设备拔插的部分打印信息

    总结

    正如linux下一切都是文件的哲学理念一样,现在的外围设备则一切以USB为标准看齐,在应用程序开发过程中,经常需要对这些USB外围设备的热拔插事件进行监听处理来实现上层软件的业务逻辑,内核socket很好解决了这个问题,通过它可以很方便地与这些USB热拔插设备交互。原创不易,转载请说明出处。

    文章参考:

    https://www.cnblogs.com/oracleloyal/p/5333276.html

    https://blog.csdn.net/gladyoucame/article/details/8768731

    展开全文
  • 本次分享一中检测设备热插拔的方法,比如,在系统中插入一个usb设备,无线网卡等,都可以检测到,并决定后续的工作;研究检测计算机硬件的拔插,包括某类设备接口、文件系统、OEM或IHV厂商自定义设定的设备、端El...

    本次分享一中检测设备热插拔的方法,比如,在系统中插入一个usb设备,无线网卡等,都可以检测到,并决定后续的工作;研究检测计算机硬件的拔插,包括某类设备接口、文件系统、OEM或IHV厂商自定义设定的设备、端El设备(串行或并行)、逻辑磁盘盘卷;常用设备接口类GUID,根据需要进行注册;主要用到WM_DEVICECHANGE消息,框架调用这个函数来通知应用程序或者设备驱动程序设备硬件配置或者电脑的配置被改变了,此消息只有顶层窗体(CWnd)的程序才能收到这个消息;仅仅串口、磁盘发生改变,才对每个程序广播这个消息,所以必须调用RegisterDeviceNotification()API来注册其他类型的设备改变,或是你的程序仅仅是一个服务程序、没有顶层窗体的程序。

    • WM_DEVICECHANGE消息 ,本文只介绍通过OnDeviceChange()消息响应函数的方式,还可以通过WindowProc,不展开介绍; 

           1.添加消息处理函数:

    afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );

            2.消息映射:

    BEGIN_MESSAGE_MAP(OGrgFrmRepair, CDialog)
    
        ON_WM_DEVICECHANGE()
    
    END_MESSAGE_MAP()

           1.在OnInitDialog()中注册设备类型的接口

    //注册一个设备类型的接口
    	static const GUID GUID_DEVINTERFACE_LIST[] =
    	{
            //GUID_DEVINTERFACE_MOUSE,
            //GUID_DEVINTERFACE_KEYBOARD
    		{ 0X378DE44C, 0X56EF, 0X11D1, { 0XBC,0X8C,0X00,0XA0,0XC9,0X14,0X05,0XDD}},
    		{ 0X884B96C3, 0X56EF, 0X11D1, { 0XBC,0X8C,0X00,0XA0,0XC9,0X14,0X05,0XDD}}
    	};
    	HDEVNOTIFY hDevNotify;
    	DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
    	ZeroMemory(&NotificationFilter, sizeof(NotificationFilter));
    	NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
    	NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
    	for (int i = 0; i<sizeof(GUID_DEVINTERFACE_LIST) / sizeof(GUID); i++)
    	{
    		NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];
    		hDevNotify = RegisterDeviceNotification(this->GetSafeHwnd(), &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
    		if (!hDevNotify)
    		{
    			AfxMessageBox(CString("Can't register device notification: ")
    				+ _com_error(GetLastError()).ErrorMessage(), MB_ICONEXCLAMATION);
    			return FALSE;
    		}
    	}

              2.实现OnDeviceChange(UINT nEventType, DWORD_PTR dwData)函数

                 其中用到了MessageBoxTimeOut,这个函数和MessageBox一样,但是可以设置其显示的时间,到时间后自动关闭,需要加入下面代码可支持使用;用这个只是为了测试,在实际的项目开发中,检测到拔插之后,加入你想要进行的操作代码即可。

    //为支持MessageBoxTimeOut
    extern "C"
    {
        int WINAPI MessageBoxTimeoutA(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);
        int WINAPI MessageBoxTimeoutW(IN HWND hWnd, IN LPCWSTR lpText, IN LPCWSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);
    };
    #ifdef UNICODE
    #define MessageBoxTimeout MessageBoxTimeoutW
    #else
    #define MessageBoxTimeout MessageBoxTimeoutA
    #endif
    BOOL CDeviceChangeDlg::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
    {
    	CString Msg;
    	PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)dwData;
    	switch (nEventType)
    	{
    	case DBT_DEVICEREMOVECOMPLETE://移除设备
    	{
    		switch (pHdr->dbch_devicetype)
    		{
    		case DBT_DEVTYP_DEVICEINTERFACE:
    		{
    			PDEV_BROADCAST_DEVICEINTERFACE pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
    			if (pDevInf->dbcc_classguid == GUID_DEVINTERFACE_MOUSE)
    			{
    				MessageBoxTimeout(NULL, _T("鼠标已拔出"), _T("提示"), MB_OK, 0, 1000);
    				//::MessageBox(NULL, _T("鼠标已拔出"), _T("提示"), MB_ICONINFORMATION | MB_OK);
    			}
    			else if (pDevInf->dbcc_classguid == GUID_DEVINTERFACE_KEYBOARD)
    			{
    				MessageBoxTimeout(NULL, _T("键盘已拔出"), _T("提示"), MB_OK, 0, 1000);
    				//::MessageBox(NULL, _T("键盘已拔出"), _T("提示"), MB_ICONINFORMATION | MB_OK);
    			}
    		}
    		break;
    		case DBT_DEVTYP_VOLUME:
    		{
    			PDEV_BROADCAST_VOLUME pDevVolume = (PDEV_BROADCAST_VOLUME)pHdr;
    			switch (pDevVolume->dbcv_flags)
    			{
    			case 0://U盘
    			{
    				CString strDriver;
    				strDriver= FirstDriveFromMask(pDevVolume->dbcv_unitmask);
    				Msg.Format(_T("%s盘拔出!"), strDriver.GetBuffer(0));
    				m_Edit.SetWindowText(Msg);//m_Edit为一个CEdit类型的变量,是为了方便测试界面上加了一个Edit,绑定了控件类型的变量
    			}
    			break;
    			case DBTF_MEDIA:    //光盘
    				break;
    			}
    		}
    		break;
    		}
    	}
    	break;
    	
    	case DBT_DEVICEARRIVAL://添加设备
    	{
    		switch (pHdr->dbch_devicetype)
    		{
    		case DBT_DEVTYP_DEVICEINTERFACE:
    		{
    			PDEV_BROADCAST_DEVICEINTERFACE pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
    			if (pDevInf->dbcc_classguid == GUID_DEVINTERFACE_MOUSE)
    			{
    				MessageBoxTimeout(NULL,_T("鼠标已插入"), _T("提示"), MB_OK, 0, 1000);
    				//::MessageBox(NULL, _T("鼠标已插入"), _T("提示"), MB_ICONINFORMATION | MB_OK);
    			}
    			else if (pDevInf->dbcc_classguid == GUID_DEVINTERFACE_KEYBOARD)
    			{
    				MessageBoxTimeout(NULL, _T("键盘已插入"), _T("提示"), MB_OK, 0, 1000);
    				//::MessageBox(NULL, _T("键盘已插入"), _T("提示"), MB_ICONINFORMATION | MB_OK);
    			}
    		}
    		break;
    		case DBT_DEVTYP_VOLUME:
    		{
    			PDEV_BROADCAST_VOLUME pDevVolume = (PDEV_BROADCAST_VOLUME)pHdr;
    			switch (pDevVolume->dbcv_flags)
    			{
    			case 0://U盘
    			{
    				CString strDriver;
    				strDriver = GetDrive(pDevVolume->dbcv_unitmask);//GetDrive函数功能为获取盘符
    				Msg.Format(_T("%s盘插入!"), strDriver.GetBuffer(0));
    				m_Edit.SetWindowText(Msg);
    			}
    			break;
    			case DBTF_MEDIA:    //光盘
    				break;
    			}
    		}
    		break;
    		}
    	}
    	break;
    	default:
    		break;
    	}
    	return TRUE;
    }
    char CDeviceChangeDlg::GetDrive(ULONG unitmask) //获取盘符
    {
    	char i;
        for (i = 0; i < 26; ++i)
        {
            if (unitmask & 0x1)
                break;
            unitmask = unitmask >> 1;
        }
        return (i + 'A');
    }

     希望看完后对您有所帮助,谢谢;

    展开全文
  • windows实时监测热插拔设备的变化

    万次阅读 2013-10-30 00:22:20
     在21世纪,这个信息时代,热插拔设备是一个巨大的安全隐患。在这个篇文章中,我将介绍一种在用户模式下检测即插即用设备的方法。比如,在系统中插入一个usb设备,ipod,无线网卡等等,都可以在用户模式下检测到,...
  • Vmware Workstation 6.5试用之二—支持设备的热插拔功能 在Vmware Workstation 6.5中,如果虚拟机硬件是6.5的格式,在Windows XP、Windows Server 2003、Windows Server 2008等操作系统中,在虚拟机正在运行的时刻,...
  • USB无线网卡驱动

    2015-06-18 14:12:30
    热插拔USB无线网卡驱动程序,网络管理人员不可缺少的一个软件!
  • 将无线 USB 网卡插入树莓派后启动树莓派,比较不建议热插拔,因为插入的一瞬间会有比较高的电流,如果电源输出不够可能导致树莓派重启。 进入 shell 界面后输入命令 lsusb 如果树莓派已经正常识别,在显示类似于如下...
  • 树莓派插拔USB无线网卡死机

    万次阅读 2015-08-10 16:54:18
    现象:使用上篇文章介绍的 XG-760N 网卡,发现有时拔出后,树莓派死机,ACT灯无动静。 关于网卡死机,并非个案。 原因:可能网卡兼容性不好。...方法1:尽量不要热插拔USB无线网卡 方法2:安装w
  • 1. USB子系统简介1.1 USB简介 USB,是英文Universal Serial Bus(通用串行总线)的...USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。1.2 USB虚拟...
  • USB 3G上网卡讲解之一

    千次阅读 2017-09-06 14:09:49
    http://blog.chinaunix.net/uid-20786208-id-3157021.htmlUSB 3G卡热插拔那些事1——原理框架这里我们先讲讲USB热插拔事件的处理工作。—–Khubd守护进程。 -Khubd守护进程它是一个守护进程,来检查usb port的事件...
  • RNDIS和ECM的热插拔问题最近修复了一波RNDIS 和 ECM的热插拔通信异常问题,添加了通过menuconfig配置RNDIS delay linkup的配置选项。问题修复点如下:RNDIS:当存在通信链接时 热插拔 Windows会发送REMOTE_NDIS_RESET...
  • 将无线 USB 网卡插入树莓派后启动树莓派,比较不建议热插拔,因为插入的一瞬间会有比较高的电流,如果电源输出不够可能导致树莓派重启。 进入 shell 界面后输入命令 lsusb 如果树莓派已经正常识别,在显示类似于...
  • Linux无线网卡的安装(usb无线网卡)无线网络:设备类型:在无线局域网里,常见的设备有无线网卡、无线网桥、无线天线等。无线网卡无线网卡的作用类似于以太网中的...PCMCIA无线网卡仅适用于笔记本电脑,支持热插拔,...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

usb网卡热插拔