精华内容
下载资源
问答
  • # 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 &

    =======

    展开全文
  • STM32和lwip初学者,分享一下网口热插拔功能调试过程。PHY芯片使用的lan8720,使用原子哥的lwip扩展例程,原例程初始化LAN8720后是死等。实际项目中网口初始可能不插网线,中途插拔网线等,因此对程序进行修改。1)...

    STM32和lwip初学者,分享一下网口热插拔功能调试过程。

    PHY芯片使用的lan8720,使用原子哥的lwip扩展例程,原例程初始化LAN8720后是死等。实际项目中网口初始可能不插网线,中途插拔网线等,因此对程序进行修改。

    1)先是参考ST官方以太网库,最新版以太网库为2015年5月份(keil5中software packs中下载,或到keil官网下载较快),在此库中采用了外部中断的方式判断网口插拔状态。由于LAN8720的中断口和CLKOUT复用,因此使用中断,只能使用50MHZ方案。电路按照50MHZ更改后。参照官网实现思路,添加程序到工程中。结果发现插拔网口能够检测到中断,但是检测的状态始终是link_down. 苦苦寻找原因,未果。最终放弃中断方式,采用轮询方案。

    2)轮询方案的思路是,建立一个低优先级任务,每隔一段时间检测link状态,如果程序运行第一次检测,检测结果为连接,则将该任务挂起。如果第一次检测为断开,则程序会继续检测,直到检测到连接,则对MAC和DMA重新做一遍初始化。经过调试该方法可行。

    附中断方案:(调试未成功,主要原因为中断中检测link状态与实际不符,另ST官网例程检测到网口重新连接后只进行了MAC的重新初始化,未进行DMA初始化,经过实验,发现初始化MAC和DMA才正常,只初始化MAC,会出错)[C] 纯文本查看 复制代码

    ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;  //????DMA?????????·????????ETH_InitStructure.ETH_Fixedburst = ETH_FixedBurst_Enable;            //???????¨??·?????    ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;     //DMA·?????×??ó??·??¤????32??????   ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;//DMA??????×??ó??·??¤????32??????ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;rval=ETH_Init(Ð_InitStructure,LAN8720_PHY_ADDRESS);//????ETH//=======2015/07/08  added by sucore ????????°????í???ò========================//?ù??ST??·???????????????????IF( rval ==  ETH_ERROR )    {        printf(\"ETH init error, may be no link\n\");    }   EthStatus=rval;      if(ETH_ReadPHYRegister(LAN8720_PHY_ADDRESS, PHY_BSR) & 4)  {    EthStatus |= ETH_LINK_FLAG;  }  /* Configure the PHY to generate an interrupt on change of link status */  Eth_Link_PHYITConfig(LAN8720_PHY_ADDRESS);    /* Configure the EXTI for Ethernet link status. */  Eth_Link_EXTIConfig();    /* Enable the Ethernet Rx Interrupt */  ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R , ENABLE);  //==============================================================================[C] 纯文本查看 复制代码

    //==================2015/07/08 added by sucore ================================//==================????????°??à?????í????=====================================/**   * @brief  Configure the PHY to generate an interrupt on change of link status.  * @param PHYAddress: external PHY address    * @retval None  */uint32_t Eth_Link_PHYITConfig(uint16_t PHYAddress){  uint32_t tmpreg = 0;  /* Read MASK register */  tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_MASK);  /* Enable output interrupt events to signal via the INT pin */  tmpreg |= (uint32_t)PHY_MASK_LINK_INT_EN | PHY_MASK_ENERGYON_INT_EN;  if(!(ETH_WritePHYRegister(PHYAddress, PHY_MASK, tmpreg)))  {    /* Return ERROR in case of write timeout */    return ETH_ERROR;  }  /* Read INT register */  tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_INT);  /* Enable Interrupt on change of link status */  tmpreg |= (uint32_t)PHY_INT_LINK_STATUS|PHY_INT_ENERGYON_STATUS;  if(!(ETH_WritePHYRegister(PHYAddress, PHY_INT, tmpreg)))  {    /* Return ERROR in case of write timeout */    return ETH_ERROR;  }  /* Return SUCCESS */  return ETH_SUCCESS;   }//==================2015/07/08 added by sucore ================================//==================????????°??à?????í????=====================================/**  * @brief  EXTI configuration for Ethernet link status.  * @param PHYAddress: external PHY address    * @retval None  */void Eth_Link_EXTIConfig(void){  GPIO_InitTypeDef GPIO_InitStructure;  EXTI_InitTypeDef EXTI_InitStructure;  NVIC_InitTypeDef NVIC_InitStructure;  /* Enable the INT (PB14) clock */  RCC_AHB1PeriphClockCmd(ETH_LINK_GPIO_CLK, ENABLE);  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);  /* Configure INT pin as input */  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  GPIO_InitStructure.GPIO_Pin = ETH_LINK_PIN;  GPIO_Init(ETH_LINK_GPIO_PORT, &GPIO_InitStructure);  /* Connect EXTI Line to INT Pin */  SYSCFG_EXTILineConfig(ETH_LINK_EXTI_PORT_SOURCE, ETH_LINK_EXTI_PIN_SOURCE);  /* Configure EXTI line */  EXTI_InitStructure.EXTI_Line = ETH_LINK_EXTI_LINE;  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  EXTI_InitStructure.EXTI_trigger = EXTI_Trigger_Falling;    EXTI_InitStructure.EXTI_LineCmd = ENABLE;  EXTI_Init(&EXTI_InitStructure);  /* Enable and set the EXTI interrupt to priority 1*/  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  NVIC_Init(&NVIC_InitStructure);}//==================2015/07/08 added by sucore ================================//==================????????°??à?????í????=====================================/**  * @brief  This function handles Ethernet link status.  * @param  None  * @retval None  */void Eth_Link_ITHandler(uint16_t PHYAddress){u32 temp;//OS_CPU_SR cpu_sr;//OS_ENTER_CRITICAL();  /* Check whether the link interrupt has occurred or not */  if( ((ETH_ReadPHYRegister(PHYAddress, PHY_INT)) & PHY_INT_LINK_STATUS)!= 0)  {  delay_ms(1);temp=(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & 4);    if(temp)    {      netif_set_link_up(&lwip_netif);    }    else    {      netif_set_link_down(&lwip_netif);    }  }//OS_EXIT_CRITICAL();}//==================2015/07/08 added by sucore ================================//==================????????°??à?????í????=====================================/**  * @brief  This function handles External line 10 interrupt request.  * @param  None  * @retval None  */void EXTI15_10_IRQHandler(void){  if(EXTI_GetITStatus(ETH_LINK_EXTI_LINE) != RESET)  {    Eth_Link_ITHandler(LAN8720_PHY_ADDRESS);   // ETH_Init(Ð_InitStructure,LAN8720_PHY_ADDRESS);/* Clear interrupt pending bit */    EXTI_ClearITPendingBit(ETH_LINK_EXTI_LINE);  }}

    轮询方案

    [C] 纯文本查看 复制代码

    /**********************************************************?????????? ???????í????×???  2015/07/11   added by sucore?????????? ???????????? ×?????   0????   1???????????÷?? ??**********************************************************/u8 netlink_status_check(void){ // u32 temp=0;    static u32 cursta,presta;  static u8 cnt;  //u8 retval;   cursta=(ETH_ReadPHYRegister(LAN8720_PHY_ADDRESS, PHY_BSR) & 4); cnt++;   if(cursta!=presta)   {    if(cnt!=1) {  if(cursta) { netif_set_link_up(&lwip_netif); } else { netif_set_link_down(&lwip_netif); } }         else         {;}  cnt=2;   } else {cnt=2;}     presta=cursta;return  cursta;}void  netlink_task(void *pdata){  OS_CPU_SR cpu_sr;static u8 sta=0;  while(1)  {  //u32 temp;    OSTimeDlyHMSM(0,0,2,500);    /* Check whether the link interrupt has occurred or not */  OS_ENTER_CRITICAL();  if(netlink_status_check()){ sta=1;}OS_EXIT_CRITICAL();if(sta) break;}   OSTaskSuspend(OS_PRIO_SELF); OSTimeDlyHMSM(0,0,0,500);}

    展开全文
  • 当前位置:我的异常网» Android»android ethernet网线不能热插拔,该如何解决android ethernet网线不能热插拔,该如何解决www.myexceptions.net网友分享于:2013-08-07浏览:177次android ethernet网线不能热插拔我在...

    当前位置:我的异常网» Android » android ethernet网线不能热插拔,该如何解决

    android ethernet网线不能热插拔,该如何解决

    www.myexceptions.net  网友分享于:2013-08-07  浏览:177次

    android ethernet网线不能热插拔

    我在android4.0.4上面添加的ethernet支持,做法是按照android-x86的patch来加的。现在出现了网线不能热插拔的问题,第一次热插拔网是通的,从第二次开始网就断了。

    以下是开机时候的信息:

    V/EthernetStateTracker( 892): Starts...

    V/EthernetStateTracker( 892): Successed

    V/EthernetStateTracker( 892): start to monitor the ethernet devices

    I/EthernetStateTracker( 892): reset device eth0

    I/EthernetStateTracker( 892): trigger dhcp for device eth0

    D/EthernetStateTracker( 892): DhcpHandler: DHCP request started

    I/EthernetStateTracker( 892): reset device eth0

    I/EthernetStateTracker( 892): trigger dhcp for device eth0

    E/EthernetStateTracker( 892): DhcpHandler: DHCP request failed: Timed out waiting for dhcpcd to start == mzhu property_set( ctl.start ==dhcpcd_eth0==)TOE2: toe2_isr()=>isr(0x00001C23).

    D/EthernetStateTracker( 892): DhcpHandler: DHCP request started

    I/EthernetStateTracker( 892): report new state DISCONNECTED on dev eth0

    V/EthernetStateTracker( 892): update network state tracker

    I/EthernetStateTracker( 892): report new state DISCONNECTED on dev eth0

    V/EthernetStateTracker( 892): update network state tracker

    I/EthernetStateTracker( 892): received disconnected events, stack=false HW=false

    I/EthernetStateTracker( 892): received disconnected events, stack=false HW=false

    V/EthernetStateTracker( 892): report interface is up for eth0

    I/EthernetStateTracker( 892): interface up event, kick off connection request

    I/EthernetStateTracker( 892): trigger dhcp for device eth0

    I/EthernetStateTracker( 892): report new state CONNECTED on dev eth0

    V/EthernetStateTracker( 892): update network state tracker

    I/EthernetStateTracker( 892): received HW connected, stack=false HW=false

    D/EthernetStateTracker( 892): DhcpHandler: DHCP request succeeded: addr: 192.168.9.192/24 mRoutes: 0.0.0.0/0 -> 192.168.9.254 | dns: 192.168.9.11,192.168.9.10 dhcpServer: 192.168.9.250 leaseDuration: 7200

    I/EthernetStateTracker( 892): received configured succeeded, stack=false HW=true

    D/EthernetStateTracker( 892): DhcpHandler: DHCP request started

    E/EthernetStateTracker( 892): DhcpHandler: DHCP request failed: Timed out waiting for DHCP to finish

    文章评论

    展开全文
  • 目前要做一个在嵌入式平台上的USB口的热插拔事件。经过我现在的分析总结目前有如下方法:1,定时检查/proc/scsi/scsi文件此方法只能在PC上,但在嵌入式平台上不可用。2,netlink方式使用netlink.#include #include #...

    目前要做一个在嵌入式平台上的USB口的热插拔事件。

    经过我现在的分析总结目前有如下方法:

    1,定时检查/proc/scsi/scsi文件

    此方法只能在PC上,但在嵌入式平台上不可用。

    2,netlink方式

    使用netlink.

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #define UEVENT_BUFFER_SIZE 2048

    static int init_hotplug_sock()

    {

    const int buffersize = 1024;

    int ret;

    struct sockaddr_nl snl;

    bzero(&snl, sizeof(struct sockaddr_nl));

    snl.nl_family = AF_NETLINK;

    snl.nl_pid = getpid();

    snl.nl_groups = 1;

    int s = socket(PF_NETLINK, SOCK_DGRAM,

    NETLINK_KOBJECT_UEVENT);

    if (s == -1)

    {

    perror("socket");

    return -1;

    }

    setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffersize,

    sizeof(buffersize));

    ret = bind(s, (struct sockaddr *)&snl,

    sizeof(struct sockaddr_nl));

    if (ret < 0)

    {

    perror("bind");

    close(s);

    return -1;

    }

    return s;

    }

    int main(int argc, char* argv[])

    {

    int hotplug_sock = init_hotplug_sock();

    while(1)

    {

    char buf[UEVENT_BUFFER_SIZE * 2] = {0};

    recv(hotplug_sock, &buf, sizeof(buf), 0);

    printf("%s\n", buf);

    }

    return 0;

    }

    经过测试发现只能实现插与拔,但是无法具体到具体是什么设备。

    3,使用mdev。

    此方法相当麻烦,现在在研究中。

    4,使用最原始的解析文件方式

    此方法相当麻烦,生成很多文件。

    就是用cat /proc/bus/usb/devices的信息生成的文件进行解析。

    目前我已经完成此功能。虽然能用,但是效率太低。

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

    2020-09-18 18:02:37
    2. 打开软件后, USB 热插拔 。 此时用WM_DEVICECHANGE消息去获取设备信息。 当设备插入或者移除时,系统给当前主窗口发送WM_DEVICECHANGE消息 。 注意: 默认状态, 任何设备都会通知。 所以需要注册指定的通知消息...
  • 另一方面,许多用户一直热插拔HDMI线,并且已经几十次或几百次没有烧毁设备了,那么问题就来了,到底HDMI接口能够热插拔吗?热插拔是什么意思?热插拔是一种带电插拔,允许用户在不关闭系统或电源的情况下移除和更换...
  • qDebug() << "USB_Arrived and The USBDisk is: "<<USBDisk ; } } qDebug() ; break; case DBT_DEVICEREMOVECOMPLETE: if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) ...
  • USB热拔插事件

    万次阅读 2018-08-26 11:35:41
    前言 USB(Universal Serial ...USB接口常用在诸如USB串行设备驱动(3G/4G上网卡、蓝牙设备、串口设备)、USB大容量磁盘驱动(U盘、移动硬盘)、USB主机控制器驱动(嵌入式otg,dwc_otg)、USB键盘鼠标等,这一些的...
  • [/url])automatically when you connect your USB HandSpring Visor to thecomputer, the following script located at /sbin/hotplug would work well:#!/bin/shUSER=gregkhif[ "$1" = "usb" ]; then if [ "$PRO...
  • Linux下自动检测USB热插拔

    万次阅读 2016-08-04 16:53:27
    做嵌入式开发,尤其在网关、路由器或者其他支持USB设备的终端上,为了提高用户体验...在Linux下,我们主要有两种办法检测USB热插拔。 第一种便是定时检查/proc/scsi/scsi文件,该文件内会按照标准格式保存着当前
  • Linux内核支持热插拔的部件有USB设备、PCI设备甚至CPU。Linux的热插拔支持是一个连接底层硬件、内核空间和用户空间程序的机制,且一直在变化,故立文讨论之。三种热插拔机制PCMCIA1995年,Linux就实现了一种PCMCIA...
  • usb热插拔的来龙去脉

    千次阅读 2016-02-29 14:44:39
    USB主机是如何检测到设备的插入的呢?首先,在USB集线器的每个下游端口的D+和D-上, 分别接了一个15K欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下拉电阻 拉到了低电平。而在USB设备端,在D+...
  • Qt提供了QAbstractNativeEventFilter来实现本地时间得过滤,通过对本地事件的检测,判断usb热插拔:(这里是windows 的例子); 首先,以QWidget, QAbstra ... 解决Qt程序在Linux下无法输入中文的办法 解决Qt程序在Linux...
  • ARM上的linux如何实现无线网卡的冷插拔和热插拔 fulinux凌云实验室 1.冷插拔 如果在系统上电之前就将RT2070/RT3070芯片的无线网卡(以下简称wlan)插上,即冷插拔。我们通过分析系统启动流程过程中的运行的脚本,...
  • 还记得在你拔出U盘之前的系统提示吗?...那么被USB所感化的热插拔设备有什么好处呢?热插拔就是带电插拔,此功能允许用户在不关闭系统不关闭电源的情况下取出和更换硬件,进而提高系统的扩展性与灵活性。各路US...
  • 问题现象1:当使用Hi3519V10X/Hi3559V100 USB3.0 Device UVC规格时,正常热插拔会必现不识别的问题。 问题现象2:当使用Hi3516CV300 USB2.0 Device UVC规格时,快速热插拔出现概率不识别问题, 此两种问题现象的解决...
  • cpu热插拔 # virsh setvcpus $domain_name --count 4 --live(--config可写入配置文件永久保存) #前提条件和后续激活参考《libvirt-qemu-虚拟机cpu分配和cpu热插拔》 内存热插拔 <memory model='dimm'...
  • OpenWrt热插拔HotPlug

    千次阅读 2019-11-12 18:02:22
    热插拔官方文档 当某些 events事件发生时,Procd(init系统和进程管理守护进程)会执行位于/etc/hotplug.d/中的脚本,例如当接口启动或关闭时,检测到新的存储驱动器时,或者按下按钮时. 当使用PPPoE连接或者在不...
  • libvirt-qemu-虚拟机设备热插拔实践

    千次阅读 2018-03-02 21:58:06
    (文章来自作者维护的社区微信公众号【虚拟化云计算】) ...cpu热插拔 # virsh setvcpus $domain_name --count 4 --live(--config可写入配置文件永久保存) #前提条件和后续激活参考《libvirt-qemu-虚拟机cpu分配...
  • 程序开机运行时如果由网线连接,那么正常初始化后按照上面的配置是可以实现热插拔的。但是,如果在初始化网卡之前没有连接网线,则程序会运行失败,甚至崩溃。 网卡初始化,调用HAL库的 hal_eth_init_status = HAL...
  • 如果是vSphere,请禁用NIC Hotplug用户可以使用系统托盘图标弹出以太网控制器。![] 要禁用此功能,请关闭虚拟机电源。关闭电源后,右键单击虚拟机,然后单击“ 编辑 设置”。在“ VM选项”选项卡上,展开“ 高级”,...
  • 回过头看看我们以前写的驱动程序随便看一个为什么要创建类 为什么要在类下面创建设备呢为了让mdev根据这些信息来创建设备节点我们来看看device_create凭什么可以让mdev创建设备节点然后进入这个device_create_vargs...
  • 现象:网卡和 SCSI 控制器显示为可移除设备。与该虚拟硬件对应的“安全移除硬件”选项显示在 Windows 系统任务栏中。...解决办法:可以使用 vSphere Client 或通过编辑 .vmx 文件来禁用热插拔功能。 注意...
  • usb热插拔实现机制

    千次阅读 2014-06-11 21:50:14
    一.等待static struct usb_driver hub_driver = { .name = "hub", .probe = hub_probe, .disconnect = hub_disconnect, .suspend = hub_suspend, .resume = hub_resume, .reset_r
  • 作者主要想到了两种办法,第一种通过脚本命令,第二种则是通过C代码来实现检测USB热插拔。先来说第一种方法—-lsusb命令———-华丽分割线———通过lsusb命令我们可以实现某个USB端口的设备检测,一般嵌入式设备...
  • 本次分享一中检测设备热插拔的方法,比如,在系统中插入一个usb设备,无线网卡等,都可以检测到,并决定后续的工作;研究检测计算机硬件的拔插,包括某类设备接口、文件系统、OEM或IHV厂商自定义设定的设备、端El...
  • 14.7. 热插拔

    2021-05-18 00:19:30
    14.7.热插拔有 2 个不同方法来看热插拔. 内核看待热插拔为硬件, 内核和内核驱动之间的交互. 用户看待热插拔是内核和用户空间的通过称为 /sbin/hotplug 的程序的交互. 这个程序被内核调用, 当它想通知用户空间某种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,308
精华内容 1,323
关键字:

usb网卡热插拔