Linux中如何查看usb设备信息

 更新时间:2023年06月01日 10:38:25   作者:www.wowothink.com  
这篇文章主要介绍了Linux中如何查看usb设备信息问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

下面的信息都是在VMware中运行Ubuntu12-04系统上执行的。

同样该命令也支持在嵌入式系统中进行USB调试。

一、cat设备节点获取信息

在一些嵌入式开发中需要调试USB功能,经常会cat /sys 下的相关设备节点来查看某些信息,比如说我们可以看到 /sys/bus/usb/devices 目录有多个子目录。

进入到某个子目录可以看到usb设备更加详细的信息(可以理解为设备描述符)。

1、usb设备在总线上的信息

// usb设备在总线上的信息
root@ubuntu:/sys/kernel/debug# cd /sys/bus/usb/devices
root@ubuntu:/sys/bus/usb/devices# ll
total 0
drwxr-xr-x 2 root root 0 Nov 26 21:21 ./
drwxr-xr-x 4 root root 0 Nov 26 21:21 ../
lrwxrwxrwx 1 root root 0 Nov 26 21:21 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-0:1.0/
lrwxrwxrwx 1 root root 0 Dec 15 23:10 1-1 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/
lrwxrwxrwx 1 root root 0 Dec 15 23:18 1-1:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-0:1.0/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-1 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-1/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-1:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-1/2-1:1.0/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-2 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 2-2:1.0 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-2/2-2:1.0/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 usb1 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/
lrwxrwxrwx 1 root root 0 Nov 26 21:21 usb2 -> ../../../devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/

其中 usbx/第x个总线,x-y:a.b/的目录格式,x表示总线号,y表示端口,a表示配置,b表示接口。

具体解释可以参照如下:

The names that begin with "usb" refer to USB controllers. More accurately, they refer to the "root hub" associated with each controller. The number is the USB bus number. In the example there is only one controller, so its bus is number 1. Hence the name "usb1".
"1-0:1.0" is a special case. It refers to the root hub's interface. This acts just like the interface in an actual hub an almost every respect; see below.
All the other entries refer to genuine USB devices and their interfaces. The devices are named by a scheme like this:
    bus-port.port.port ...
In other words, the name starts with the bus number followed by a '-'. Then comes the sequence of port numbers for each of the intermediate hubs along the path to the device.
For example, "1-1" is a device plugged into bus 1, port 1. It happens to be a hub, and "1-1.3" is the device plugged into port 3 of that hub. That device is another hub, and "1-1.3.1" is the device plugged into its port 1.
The interfaces are indicated by suffixes having this form:
    :config.interface
That is, a ':' followed by the configuration number followed by '.' followed by the interface number. In the above example, each of the devices is using configuration 1 and this configuration has only a single interface, number 0. So the interfaces show up as;
    1-1:1.0     1-1.3:1.0       1-1.3.1:1.0
A hub will never have more than a single interface; that's part of the USB spec. But other devices can and do have multiple interfaces (and sometimes multiple configurations). Each interface gets its own entry in sysfs and can have its own driver.

2、特定设备的详细信息

进入到某个目录中去,可以看到该设备的详细信息,可用cat命令获取信息。

// usb设备的详细信息
root@ubuntu:/sys/bus/usb/devices/usb1# ll
total 0
drwxr-xr-x  6 root root     0 Nov 26 21:21 ./
drwxr-xr-x  4 root root     0 Nov 26 21:21 ../
drwxr-xr-x 10 root root     0 Nov 26 21:21 1-0:1.0/
drwxr-xr-x  5 root root     0 Dec 15 23:10 1-1/
-rw-r--r--  1 root root  4096 Dec 15 23:40 authorized
-rw-r--r--  1 root root  4096 Dec 15 23:40 authorized_default
-rw-r--r--  1 root root  4096 Dec 15 23:40 avoid_reset_quirk
-r--r--r--  1 root root  4096 Nov 26 21:21 bcdDevice
-rw-r--r--  1 root root  4096 Nov 26 21:21 bConfigurationValue
-r--r--r--  1 root root  4096 Nov 26 21:21 bDeviceClass
-r--r--r--  1 root root  4096 Nov 26 21:21 bDeviceProtocol
-r--r--r--  1 root root  4096 Nov 26 21:21 bDeviceSubClass
-r--r--r--  1 root root  4096 Dec 15 23:40 bmAttributes
-r--r--r--  1 root root  4096 Dec 15 23:40 bMaxPacketSize0
-r--r--r--  1 root root  4096 Dec 15 23:40 bMaxPower
-r--r--r--  1 root root  4096 Dec 15 23:40 bNumConfigurations
-r--r--r--  1 root root  4096 Dec 15 23:40 bNumInterfaces
-r--r--r--  1 root root  4096 Nov 26 21:21 busnum
-r--r--r--  1 root root  4096 Dec 15 23:40 configuration
-r--r--r--  1 root root 65553 Nov 26 21:21 descriptors
-r--r--r--  1 root root  4096 Dec 15 23:40 dev
-r--r--r--  1 root root  4096 Nov 26 21:21 devnum
-r--r--r--  1 root root  4096 Dec 15 23:40 devpath
lrwxrwxrwx  1 root root     0 Nov 27 20:06 driver -> ../../../../../bus/usb/drivers/usb/
drwxr-xr-x  3 root root     0 Dec 15 23:40 ep_00/
-r--r--r--  1 root root  4096 Nov 26 21:21 idProduct
-r--r--r--  1 root root  4096 Nov 26 21:21 idVendor
-r--r--r--  1 root root  4096 Dec 15 23:40 ltm_capable
-r--r--r--  1 root root  4096 Nov 26 21:21 manufacturer
-r--r--r--  1 root root  4096 Dec 15 23:40 maxchild
drwxr-xr-x  2 root root     0 Nov 26 21:21 power/
-r--r--r--  1 root root  4096 Nov 26 21:21 product
-r--r--r--  1 root root  4096 Dec 15 23:40 quirks
-r--r--r--  1 root root  4096 Nov 26 21:21 removable
--w-------  1 root root  4096 Dec 15 23:40 remove
-r--r--r--  1 root root  4096 Nov 26 21:21 serial
-r--r--r--  1 root root  4096 Nov 26 21:21 speed
lrwxrwxrwx  1 root root     0 Nov 26 21:21 subsystem -> ../../../../../bus/usb/
-rw-r--r--  1 root root  4096 Nov 26 21:21 uevent
-r--r--r--  1 root root  4096 Dec 15 23:40 urbnum
-r--r--r--  1 root root  4096 Dec 15 23:40 version

二、使用debugfs

1、挂载 debugfs 到 /sys/kernel/debug 路径下

root@ubuntu:mount -t debugfs none /sys/kernel/debug

2、执行上述步骤之后

在 /sys/kernel/debug 就会生成如下的文件

root@ubuntu:/sys/bus/usb/devices# cd /sys/kernel/debug/
root@ubuntu:/sys/kernel/debug# ll
total 0
drwx------ 22 root root 0 Nov 26 21:21 ./
drwxr-xr-x  7 root root 0 Nov 26 21:21 ../
drwxr-xr-x  2 root root 0 Nov 26 21:21 acpi/
drwxr-xr-x 32 root root 0 Dec  4 16:30 bdi/
drwxr-xr-x  2 root root 0 Nov 26 21:21 bluetooth/
drwxr-xr-x  2 root root 0 Nov 26 21:21 cleancache/
drwxr-xr-x  2 root root 0 Nov 26 21:21 dma_buf/
drwxr-xr-x  4 root root 0 Nov 26 21:21 dri/
drwxr-xr-x  2 root root 0 Nov 26 21:21 dynamic_debug/
drwxr-xr-x  2 root root 0 Nov 26 21:21 extfrag/
drwxr-xr-x  2 root root 0 Nov 26 21:21 frontswap/
-r--r--r--  1 root root 0 Nov 26 21:21 gpio
drwxr-xr-x  3 root root 0 Nov 26 21:21 hid/
drwxr-xr-x  2 root root 0 Nov 26 21:21 kprobes/
drwxr-xr-x  3 root root 0 Nov 26 21:21 kvm-guest/
drwxr-xr-x  2 root root 0 Nov 26 21:21 mce/
drwxr-xr-x  2 root root 0 Nov 26 21:21 pinctrl/
-r--r--r--  1 root root 0 Nov 26 21:21 pwm
drwxr-xr-x  2 root root 0 Nov 26 21:21 regmap/
drwxr-xr-x  3 root root 0 Nov 26 21:21 regulator/
-rw-r--r--  1 root root 0 Nov 26 21:21 sched_features
-r--r--r--  1 root root 0 Nov 26 21:21 sleep_time
-r--r--r--  1 root root 0 Nov 26 21:21 suspend_stats
drwxr-xr-x  7 root root 0 Nov 26 21:21 tracing/
drwxr-xr-x  3 root root 0 Nov 26 21:21 usb/
drwxr-xr-x  2 root root 0 Nov 26 21:21 virtio-ports/
-r--r--r--  1 root root 0 Nov 26 21:21 vmmemctl
-r--r--r--  1 root root 0 Nov 26 21:21 wakeup_sources
drwxr-xr-x  2 root root 0 Nov 26 21:21 x86/

3、cat 设备节点

执行下述命令之后会以特定格式打印目前USB总线上所有USB设备的信息如下:

root@ubuntu:/sys/kernel/debug# cat usb/devices 
T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12   MxCh= 2
B:  Alloc= 17/900 us ( 2%), #Int=  1, #Iso=  0
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0001 Rev= 3.13
S:  Manufacturer=Linux 3.13.0-32-generic uhci_hcd
S:  Product=UHCI Host Controller
S:  SerialNumber=0000:02:00.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms
T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12   MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0e0f ProdID=0003 Rev= 1.03
S:  Manufacturer=VMware
S:  Product=VMware Virtual USB Mouse
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=1ms
T:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  3 Spd=12   MxCh= 7
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0e0f ProdID=0002 Rev= 1.00
S:  Product=VMware Virtual USB Hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=255ms
T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 6
B:  Alloc=  0/800 us ( 0%), #Int=  1, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 3.13
S:  Manufacturer=Linux 3.13.0-32-generic ehci_hcd
S:  Product=EHCI Host Controller
S:  SerialNumber=0000:02:03.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  7 Spd=480  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs=  1
P:  Vendor=0bda ProdID=0129 Rev=39.60
S:  Manufacturer=Generic
S:  Product=USB2.0-CRW
S:  SerialNumber=20100201396000000
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=06 Prot=50 Driver=rts5139
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=83(I) Atr=03(Int.) MxPS=   3 Ivl=64ms

至于信息的详细解析可以参照 Linux源代码中 Documentation/usb/proc_usb_info.txt 文件。

现摘录其中对该格式的详细解释:

Each line is tagged with a one-character ID for that line:
T = Topology (etc.)
B = Bandwidth (applies only to USB host controllers, which are
    virtualized as root hubs)
D = Device descriptor info.
P = Product ID info. (from Device descriptor, but they won't fit
    together on one line)
S = String descriptors.
C = Configuration descriptor info. (* = active configuration)
I = Interface descriptor info.
E = Endpoint descriptor info.
Legend:
  d = decimal number (may have leading spaces or 0's)
  x = hexadecimal number (may have leading spaces or 0's)
  s = string
Topology info:
T:  Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd
|   |      |      |       |       |      |        |        |__MaxChildren
|   |      |      |       |       |      |        |__Device Speed in Mbps
|   |      |      |       |       |      |__DeviceNumber
|   |      |      |       |       |__Count of devices at this level
|   |      |      |       |__Connector/Port on Parent for this device
|   |      |      |__Parent DeviceNumber
|   |      |__Level in topology for this bus
|   |__Bus number
|__Topology info tag
    Speed may be:
        1.5 Mbit/s for low speed USB
    12  Mbit/s for full speed USB
    480 Mbit/s for high speed USB (added for USB 2.0);
          also used for Wireless USB, which has no fixed speed
    5000    Mbit/s for SuperSpeed USB (added for USB 3.0)
    For reasons lost in the mists of time, the Port number is always
    too low by 1.  For example, a device plugged into port 4 will
    show up with "Port=03".
Bandwidth info:
B:  Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd
|   |                       |         |__Number of isochronous requests
|   |                       |__Number of interrupt requests
|   |__Total Bandwidth allocated to this bus
|__Bandwidth info tag
    Bandwidth allocation is an approximation of how much of one frame
    (millisecond) is in use.  It reflects only periodic transfers, which
    are the only transfers that reserve bandwidth.  Control and bulk
    transfers use all other bandwidth, including reserved bandwidth that
    is not used for transfers (such as for short packets).
    The percentage is how much of the "reserved" bandwidth is scheduled by
    those transfers.  For a low or full speed bus (loosely, "USB 1.1"),
    90% of the bus bandwidth is reserved.  For a high speed bus (loosely,
    "USB 2.0") 80% is reserved.
Device descriptor info & Product ID info:
D:  Ver=x.xx Cls=xx(s) Sub=xx Prot=xx MxPS=dd #Cfgs=dd
P:  Vendor=xxxx ProdID=xxxx Rev=xx.xx
where
D:  Ver=x.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd
|   |        |             |      |       |       |__NumberConfigurations
|   |        |             |      |       |__MaxPacketSize of Default Endpoint
|   |        |             |      |__DeviceProtocol
|   |        |             |__DeviceSubClass
|   |        |__DeviceClass
|   |__Device USB version
|__Device info tag #1
where
P:  Vendor=xxxx ProdID=xxxx Rev=xx.xx
|   |           |           |__Product revision number
|   |           |__Product ID code
|   |__Vendor ID code
|__Device info tag #2
String descriptor info:
S:  Manufacturer=ssss
|   |__Manufacturer of this device as read from the device.
|      For USB host controller drivers (virtual root hubs) this may
|      be omitted, or (for newer drivers) will identify the kernel
|      version and the driver which provides this hub emulation.
|__String info tag
S:  Product=ssss
|   |__Product description of this device as read from the device.
|      For older USB host controller drivers (virtual root hubs) this
|      indicates the driver; for newer ones, it's a product (and vendor)
|      description that often comes from the kernel's PCI ID database.
|__String info tag
S:  SerialNumber=ssss
|   |__Serial Number of this device as read from the device.
|      For USB host controller drivers (virtual root hubs) this is
|      some unique ID, normally a bus ID (address or slot name) that
|      can't be shared with any other device.
|__String info tag
Configuration descriptor info:
C:* #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA
| | |       |       |      |__MaxPower in mA
| | |       |       |__Attributes
| | |       |__ConfiguratioNumber
| | |__NumberOfInterfaces
| |__ "*" indicates the active configuration (others are " ")
|__Config info tag
    USB devices may have multiple configurations, each of which act
    rather differently.  For example, a bus-powered configuration
    might be much less capable than one that is self-powered.  Only
    one device configuration can be active at a time; most devices
    have only one configuration.
    Each configuration consists of one or more interfaces.  Each
    interface serves a distinct "function", which is typically bound
    to a different USB device driver.  One common example is a USB
    speaker with an audio interface for playback, and a HID interface
    for use with software volume control.
Interface descriptor info (can be multiple per Config):
I:* If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss
| | |      |      |       |             |      |       |__Driver name
| | |      |      |       |             |      |          or "(none)"
| | |      |      |       |             |      |__InterfaceProtocol
| | |      |      |       |             |__InterfaceSubClass
| | |      |      |       |__InterfaceClass
| | |      |      |__NumberOfEndpoints
| | |      |__AlternateSettingNumber
| | |__InterfaceNumber
| |__ "*" indicates the active altsetting (others are " ")
|__Interface info tag
    A given interface may have one or more "alternate" settings.
    For example, default settings may not use more than a small
    amount of periodic bandwidth.  To use significant fractions
    of bus bandwidth, drivers must select a non-default altsetting.
    Only one setting for an interface may be active at a time, and
    only one driver may bind to an interface at a time.  Most devices
    have only one alternate setting per interface.
Endpoint descriptor info (can be multiple per Interface):
E:  Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddss
|   |        |            |         |__Interval (max) between transfers
|   |        |            |__EndpointMaxPacketSize
|   |        |__Attributes(EndpointType)
|   |__EndpointAddress(I=In,O=Out)
|__Endpoint info tag
    The interval is nonzero for all periodic (interrupt or isochronous)
    endpoints.  For high speed endpoints the transfer interval may be
    measured in microseconds rather than milliseconds.
    For high speed periodic endpoints, the "MaxPacketSize" reflects
    the per-microframe data transfer size.  For "high bandwidth"
    endpoints, that can reflect two or three packets (for up to
    3KBytes every 125 usec) per endpoint.
    With the Linux-USB stack, periodic bandwidth reservations use the
    transfer intervals and sizes provided by URBs, which can be less
    than those found in endpoint descriptor.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 5个可能被你忽略的Linux安全设置方法

    5个可能被你忽略的Linux安全设置方法

    众所周知,网络安全是一个非常重要的课题,而服务器是网络安全中最关键的环节。Linux被认为是一个比较安全的Internet服务器,作为一种开放源代码操作系统,一旦Linux系统中发现有安全漏洞,Internet上来自世界各地的志愿者会踊跃修补它。
    2008-09-09
  • linux环境下恢复rm误删的文件方法

    linux环境下恢复rm误删的文件方法

    大家好,本篇文章主要讲的是linux环境下恢复rm误删的文件方法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦
    2021-11-11
  • Linux使用shell脚本定时删除历史日志文件

    Linux使用shell脚本定时删除历史日志文件

    这篇文章主要介绍了Linux使用shell脚本定时删除历史日志文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • centos 6.X升级ffmpeg包步骤详解

    centos 6.X升级ffmpeg包步骤详解

    众所周知FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。之前公司已经安装了ffmpeg包,但因为时间较久,所以最近打算升级下,所以这篇文章就记录了在centos 6.X升级ffmpeg包的详细步骤,下面来一起看看吧。
    2016-11-11
  • centos中yum命令删除还原的补救方法介绍

    centos中yum命令删除还原的补救方法介绍

    Yum: 即Yellowdog Update Modifier,是一种基于rpm的包管理工具,这篇文章主要给大家介绍了关于在centos中yum命令删除还原的补救方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • Yum中报错:“pycurl.so: undefined symbol: CRYPTO_num_locks”的问题排查

    Yum中报错:“pycurl.so: undefined symbol: CRYPTO_num_locks”的问题排查

    这篇文章主要给大家介绍了在Yum中报错: "pycurl.so: undefined symbol: CRYPTO_num_locks"的问题排查的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • Linux中rsync命令使用方式

    Linux中rsync命令使用方式

    rsync是一款高效的文件同步工具,支持增量同步、远程同步、文件压缩、权限保留等功能,它可以用于本地或远程文件夹的同步,支持断点续传和排除规则,在本地模式下,可以通过cp命令替代,实现数据的增量备份,在远程模式下
    2025-01-01
  • Linux 使用init命令实现关机,重启,切换模式

    Linux 使用init命令实现关机,重启,切换模式

    这篇文章主要介绍了Linux 使用init命令实现关机,重启,切换模式的相关资料,需要的朋友可以参考下
    2017-03-03
  • IO多路复用之poll全面总结(必看篇)

    IO多路复用之poll全面总结(必看篇)

    下面小编就为大家带来一篇IO多路复用之poll全面总结(必看篇)。小编觉得挺不错的。现在就分享给大家。也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 如何在linux服务器上使用tensorboard

    如何在linux服务器上使用tensorboard

    这篇文章主要介绍了如何在linux服务器上使用tensorboard,包括错误记录,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06

最新评论