我有一台运行 ArchLinux 的 ARM 设备。该设备似乎没有任何 PCI 总线,尽管它有 USB。
[root@alarm ~]# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
[root@alarm ~]# lspci
pcilib: Cannot open /proc/bus/pci
lspci: Cannot find any working access method.
[root@alarm ~]#
我想了解还有哪些其他芯片组。例如,我知道有一款支持 HDMI 的声卡和显卡。这样的芯片不会放在 USB 线上。
我查看了 /proc/config.gz 上当前在设备上运行的内核配置,其中列出了以下内容:
#
# Bus support
#
CONFIG_ARM_AMBA=y
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
# CONFIG_PCCARD is not set
我不知道 AMBA 是什么。彻底搜索 Google 会返回内核数据库中的此条目,但没有实际解释,除非您不知道自己在做什么,否则不要使用它。
使用 lshw 也不会显示更多信息:
[root@alarm ~]# lshw
alarm
description: Computer
width: 32 bits
*-core
description: Motherboard
physical id: 0
*-memory
description: System memory
physical id: 0
size: 307MiB
*-cpu
physical id: 1
bus info: cpu@0
size: 1008MHz
capacity: 1008MHz
capabilities: cpufreq
*-network
description: Ethernet interface
physical id: 1
logical name: eth0
serial: 00:01:02:03:04:05
size: 10Mbit/s
capacity: 100Mbit/s
capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
configuration: autonegotiation=off broadcast=yes driver=wemac driverversion=1.01 duplex=half ip=192.168.1.1 link=yes multicast=yes port=MII speed=10Mbit/s
[root@alarm ~]#
该内核中似乎没有加载任何模块:
[root@alarm ~]# lsmod
Module Size Used by
[root@alarm ~]#
此外,hwinfo 似乎不可用:
[root@alarm ~]# pacman -Syu
:: Synchronizing package databases...
core is up to date
extra is up to date
community is up to date
alarm is up to date
aur is up to date
:: Starting full system upgrade...
there is nothing to do
[root@alarm ~]# pacman -S hwinfo
error: target not found: hwinfo
[root@alarm ~]# hwinfo
-bash: hwinfo: command not found
[root@alarm ~]#
我需要知道这个系统上使用的是什么芯片,这样我才能编译正确的视频驱动模块,如何在没有工作 lspci 的系统上找出它是什么?
答案1
这是您在回复我的评论后我的正式回复。我可能有些地方说错了,欢迎指正。
我不确定英特尔何时开始将 PCIe(PCI 的软件兼容扩展)整合到其 CPU 中。然而,在 x86 出现的大部分时间里,情况并非如此。PCI 实际上是整个“PC 平台”的一部分,其中包括许多其他标准和预期的东西,例如设备的标准 ISA 端口/I/O 地址/IRQ 等。
回溯到 PCI 出现之前 - 基本上,除了使用 ISAPNP 引入 PnP 标准的失败尝试之外,您实际上并没有“探测”某些设备。您通常需要事先假设它们存在。当然,您可以测试寄存器等,看看事情是否按预期响应,但如果有其他设备,您就会遇到麻烦,可能会导致挂起等。实际上没有办法“扫描”ISA 总线。或者实际上任何其他不以标准化方式支持 PnP 概念的总线。
ACPI 应该解决的问题之一是提供一些信息表,告诉您内置了哪些 ISA 设备。即使在 ACPI 出现之前,BIOS 也会被用来决定系统中有多少个软盘驱动器。这就是为什么在较旧的系统上,即使您没有连接软盘,如果您将 BIOS 设置为显示有软盘驱动器,您也会在 Windows 中看到 A: 驱动器。
因此,您可能会问现代操作系统如何确定或与 PCI 芯片组交互。大多数情况下,芯片组作为 PCI 总线本身上的设备出现。PCI 接口寄存器“预先存在”在 PC 平台中已知的标准位置。在这里,可以通过编程扫描 PCI 空间中的所有设备和功能插槽。ISA 不存在类似的东西。如果设备与 ISA 一起位于总线上,则其寄存器在加载/存储时会做出响应,仅此而已。您实际上无法与总线本身对话。
顺便说一句,PCI 芯片组甚至可能具有控制“PCI-ISA”桥接器并将一些 PnP 功能带入 ISA(或现在的 LPC)总线的能力。不过,ISA 本身就表示您只能靠自己。
ARM没有这样的标准平台。 至少目前还没有。ARM CPU 可以在许多独特的平台上运行。PCI、I2C 和 SDIO 总线(可能还有更多我不知道的总线)是其中一些平台的共同点,但同样,有些 ARM 平台没有这些总线。据我所知,除了 Microsoft Surface RT 之外,ARM 上没有实现 ACPI。 如果不使用支持 PnP 概念的标准化总线,实际上就无法“探测”任何东西。您需要预先了解系统之外应该存在的硬件。U-Boot 是一种常用的 ARM 引导程序,需要支持并针对其要运行的特定平台进行构建。它有点像一个标准,但即便如此,据我所知,它通常是针对每个平台构建的。
简单谷歌搜索后发现,这款设备配备了“Mali 400”视频芯片组。进一步搜索后,Mali GPU 驱动程序源代码网站。我的 C 语言有点生疏,但我看了看。似乎你应该做的是,当你构建驱动程序时,告诉它需要命中的地址以便与 GPU 通信。我真的没有深入研究源代码,但如果它不是与总线通信,而是直接从内存映射 I/O 加载/存储,我也不会感到惊讶。
因此,不幸的是,我认为没有一个适用于所有 ARM 平台的通用答案。
答案2
你可以尝试一下hwinfo
。它在 Arch 仓库中。
$ hwinfo --gfxcard
08: PCI 02.0: 0300 VGA compatible controller (VGA)
[Created at pci.318]
Unique ID: _Znp.jjHn_gm8Jz5
SysFS ID: /devices/pci0000:00/0000:00:02.0
SysFS BusID: 0000:00:02.0
Hardware Class: graphics card
Model: "Intel VGA compatible controller"
Vendor: pci 0x8086 "Intel Corporation"
Device: pci 0x0162
SubVendor: pci 0x1849 "ASRock Incorporation"
SubDevice: pci 0x0162
Revision: 0x09
Driver: "i915"
Driver Modules: "drm"
Memory Range: 0xf7800000-0xf7bfffff (rw,non-prefetchable)
Memory Range: 0xe0000000-0xefffffff (ro,non-prefetchable)
I/O Ports: 0xf000-0xf03f (rw)
IRQ: 57 (6 events)
Module Alias: "pci:v00008086d00000162sv00001849sd00000162bc03sc00i00"
Driver Info #0:
Driver Status: i915 is active
Driver Activation Cmd: "modprobe i915"
Config Status: cfg=new, avail=yes, need=no, active=unknown
Primary display adapter: #8
答案3
dmesg 可以提供一些信息
和
cat /proc/devices
find /proc
lshw 值得一试重建