• 设备offline时如何自动重置


    在linux底层

    Linux/include/uapi/linux/usbdevice_fs.h中,重置_IO('U', 20)可以重置usb设备。

    因此,我们可以在脚本中利用这个方法去重置USB

    代码链接:https://gist.github.com/PaulFurtado/fce98aef890469f34d51

    """
        Example code for resetting the USB port that a Teensy microcontroller is
        attached to. There are a lot of situations where a Teensy or Arduino can
        end up in a bad state and need resetting, this code is useful for 
    """
    
    import os
    import fcntl
    import subprocess
    
    
    # Equivalent of the _IO('U', 20) constant in the linux kernel.
    USBDEVFS_RESET = ord('U') << (4*2) | 20
    
    
    def get_teensy():
        """
            Gets the devfs path to a Teensy microcontroller by scraping the output
            of the lsusb command
            
            The lsusb command outputs a list of USB devices attached to a computer
            in the format:
                Bus 002 Device 009: ID 16c0:0483 Van Ooijen Technische Informatica Teensyduino Serial
            The devfs path to these devices is:
                /dev/bus/usb/<busnum>/<devnum>
            So for the above device, it would be:
                /dev/bus/usb/002/009
            This function generates that path.
        """
        proc = subprocess.Popen(['lsusb'], stdout=subprocess.PIPE)
        out = proc.communicate()[0]
        lines = out.split('
    ')
        for line in lines:
            if 'Teensyduino' in line:
                parts = line.split()
                bus = parts[1]
                dev = parts[3][:3]
                return '/dev/bus/usb/%s/%s' % (bus, dev)
    
    
    def send_reset(dev_path):
        """
            Sends the USBDEVFS_RESET IOCTL to a USB device.
            
            dev_path - The devfs path to the USB device (under /dev/bus/usb/)
                       See get_teensy for example of how to obtain this.
        """
        fd = os.open(dev_path, os.O_WRONLY)
        try:
            fcntl.ioctl(fd, USBDEVFS_RESET, 0)
        finally:
            os.close(fd)
    
    
    def reset_teensy():
        """
            Finds a teensy and reset it.
        """
        send_reset(get_teensy())
  • 相关阅读:
    PHP 使用 ElasticSearch
    PHP面试题目
    MySQL取得某一范围随机数
    Git版本控制的基本命令
    PHP中array_merge和array相加的区别分析
    nginx服务器常见错误代码500、501、502、503、504、505
    Laravel小项目之第4节 Laravel-通过表单实现新增及操作状态提示功能
    前端基础 jQuery
    前端基础 DOM & BOM
    前端基础 & 初识JS(JavaScript)
  • 原文地址:https://www.cnblogs.com/alexkn/p/6742536.html
Copyright © 2020-2023  润新知