首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用setpci查找和控制wlan卡?

如何使用setpci查找和控制wlan卡?
EN

Ask Ubuntu用户
提问于 2012-11-17 20:31:07
回答 1查看 4.1K关注 0票数 3

我的笔记本电脑上有一些功能/热键不起作用,比如控制亮度或打开/关闭wlan卡。幸运的是,我知道如何使用setpci ex:setpci -s 00:02.0 F4.B=55来控制亮度,其中55是所需的亮度级别。

所以问题是,我如何找到我的无线局域网卡,并使它继续/关闭。

这是dumpregs命令输出:

代码语言:javascript
运行
复制
cap pos w name
     00 W VENDOR_ID
     02 W DEVICE_ID
     04 W COMMAND
     06 W STATUS
     08 B REVISION
     09 B CLASS_PROG
     0a W CLASS_DEVICE
     0c B CACHE_LINE_SIZE
     0d B LATENCY_TIMER
     0e B HEADER_TYPE
     0f B BIST
     10 L BASE_ADDRESS_0
     14 L BASE_ADDRESS_1
     18 L BASE_ADDRESS_2
     1c L BASE_ADDRESS_3
     20 L BASE_ADDRESS_4
     24 L BASE_ADDRESS_5
     28 L CARDBUS_CIS
     2c L SUBSYSTEM_VENDOR_ID
     2e W SUBSYSTEM_ID
     30 L ROM_ADDRESS
     3c B INTERRUPT_LINE
     3d B INTERRUPT_PIN
     3e B MIN_GNT
     3f B MAX_LAT
     18 B PRIMARY_BUS
     19 B SECONDARY_BUS
     1a B SUBORDINATE_BUS
     1b B SEC_LATENCY_TIMER
     1c B IO_BASE
     1d B IO_LIMIT
     1e W SEC_STATUS
     20 W MEMORY_BASE
     22 W MEMORY_LIMIT
     24 W PREF_MEMORY_BASE
     26 W PREF_MEMORY_LIMIT
     28 L PREF_BASE_UPPER32
     2c L PREF_LIMIT_UPPER32
     30 W IO_BASE_UPPER16
     32 W IO_LIMIT_UPPER16
     38 L BRIDGE_ROM_ADDRESS
     3e W BRIDGE_CONTROL
     10 L CB_CARDBUS_BASE
     14 W CB_CAPABILITIES
     16 W CB_SEC_STATUS
     18 B CB_BUS_NUMBER
     19 B CB_CARDBUS_NUMBER
     1a B CB_SUBORDINATE_BUS
     1b B CB_CARDBUS_LATENCY
     1c L CB_MEMORY_BASE_0
     20 L CB_MEMORY_LIMIT_0
     24 L CB_MEMORY_BASE_1
     28 L CB_MEMORY_LIMIT_1
     2c W CB_IO_BASE_0
     2e W CB_IO_BASE_0_HI
     30 W CB_IO_LIMIT_0
     32 W CB_IO_LIMIT_0_HI
     34 W CB_IO_BASE_1
     36 W CB_IO_BASE_1_HI
     38 W CB_IO_LIMIT_1
     3a W CB_IO_LIMIT_1_HI
     40 W CB_SUBSYSTEM_VENDOR_ID
     42 W CB_SUBSYSTEM_ID
     44 L CB_LEGACY_MODE_BASE
  01 00 - CAP_PM
  02 00 - CAP_AGP
  03 00 - CAP_VPD
  04 00 - CAP_SLOTID
  05 00 - CAP_MSI
  06 00 - CAP_CHSWP
  07 00 - CAP_PCIX
  08 00 - CAP_HT
  09 00 - CAP_VNDR
  0a 00 - CAP_DBG
  0b 00 - CAP_CCRC
  0c 00 - CAP_HOTPLUG
  0d 00 - CAP_SSVID
  0e 00 - CAP_AGP3
  0f 00 - CAP_SECURE
  10 00 - CAP_EXP
  11 00 - CAP_MSIX
  12 00 - CAP_SATA
  13 00 - CAP_AF
0001 00 - ECAP_AER
0002 00 - ECAP_VC
0003 00 - ECAP_DSN
0004 00 - ECAP_PB
0005 00 - ECAP_RCLINK
0006 00 - ECAP_RCILINK
0007 00 - ECAP_RCECOLL
0008 00 - ECAP_MFVC
000a 00 - ECAP_RBCB
000b 00 - ECAP_VNDR
000d 00 - ECAP_ACS
000e 00 - ECAP_ARI
000f 00 - ECAP_ATS
0010 00 - ECAP_SRIOV
EN

回答 1

Ask Ubuntu用户

发布于 2012-12-09 20:13:58

首先,使用setpci直接设置硬件寄存器和状态可能是危险的,仅仅因为硬件访问级别很低,除非您知道它之前已经尝试过,比如您提到的亮度设置。

其次,由于我不知道您的膝上型计算机模型及其组件的技术规范,这篇文章只是介绍如何使用lspcisetpci查找信息,您可以适应您的需要。

第三,所有命令都可以运行,因为它们只是查询设备;只有使用sudo运行的setpci才会更改设备设置。

(如果您只想断开连接,而不是实际关闭硬件设备,您可以选择您的无线局域网设备并运行sudo iwconfig wlan0 down。这是遥远的(!))比尝试使用setpci启用/禁用硬件设备更容易。)

首先运行lspci以查找所有硬件的地址;例如,我的以太网控制器是

代码语言:javascript
运行
复制
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

现在使用总线地址/域(02:00:0)并再次运行lspci

代码语言:javascript
运行
复制
sudo lspci -s 02:00.0 -nnvvxxx

您将获得可用信息的完整读取和PCI配置空间的十六进制转储:

代码语言:javascript
运行
复制
02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ [10ec:8139] (rev 10)
    Subsystem: Billionton Systems Inc LNR-100 Family 10/100 Base-TX Ethernet [14cb:0200]
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 64 (8000ns min, 16000ns max)
    Interrupt: pin A routed to IRQ 17
    Region 0: I/O ports at 2400 [size=256]
    Region 1: Memory at 44000000 (32-bit, non-prefetchable) [size=512]
    Capabilities: [50] Power Management version 2
        Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
    Kernel driver in use: 8139too
    Kernel modules: 8139too, 8139cp
00: ec 10 39 81 07 00 90 02 10 00 00 02 00 40 00 00
10: 01 24 00 00 00 00 00 44 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 02 01 00 00 cb 14 00 02
30: 00 00 00 00 50 00 00 00 00 00 00 00 11 01 20 40
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

十六进制转储仍在继续,但我已经缩减了它;您需要对设备进行进一步的技术规范,才能使这些值具有任何意义。

现在使用setpci --dumpregs,您可以了解一般硬件寄存器,然后使用setpci查询设备地址(02:00.0),例如,其中一个寄存器:

代码语言:javascript
运行
复制
setpci -s 02:00.0 STATUS

返回值。这可以在列表中的其他寄存器中重复,但您需要同时查阅设备上的详细技术信息。

总之,您需要参考您的WLAN卡的技术规范(可能还包括PCI规范),以便您能够找到并选择正确的寄存器,然后引用lspcisetpci数据,以便您可以准备启用/禁用该卡的sudo setpci命令设置。如果没有深度规范,就不可能找到正确的寄存器,而且通常很难找到正确的寄存器。然而,我希望这一简短的讨论可能有助于你指出正确的方向。

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/218606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档