我有一个运行 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 ~]#
Run Code Online (Sandbox Code Playgroud)
我想找到还有哪些其他芯片组。例如,我知道有支持 HDMI 的声卡和视频卡。这样的芯片不会放在 USB 线上。
我在 /proc/config.gz 上查看了当前在设备上运行的内核配置,它列出了以下内容:
#
# Bus support
#
CONFIG_ARM_AMBA=y
# CONFIG_PCI_SYSCALL is not set …
Run Code Online (Sandbox Code Playgroud) 假设我正在使用计算机,或多或少是任何典型的现代计算机。设备驱动程序负责我在屏幕上看到的所有内容,包括在我键入此内容时更新屏幕(当然,这在操作系统的范围内,例如 Windows)。
让我们将其降低到硬件不关心是否有内核,而只接受指令的级别。
基本上,GPU 是如何“确切地知道”如何做所有事情的?驱动程序是否基本上控制了使用驱动程序提供的特殊指令计算用于显示的二进制数据可能或需要的每个微小的、内在的或硬件电路级功能?
如果是这样,GPU 是否像 CPU 一样使用“特殊”语言或“汇编”来理解发送给它的指令?
我的知识有太多空白,而且 GPU 背后存在这种令人不快的“谜团”,并可以通过硬件直接访问它们。
例如,GPU 和 CPU 必须能够以某种方式连接,因此可以通过 CPU 组件访问 GPU 并实现正确的数据/地址总线。设备供应商不可能让驱动程序之外的 GPU 无法访问,因为驱动程序也是编译代码,而 GPU 作为可编程电路,必须使用二进制指令。
我问过这些类型的问题,但在许多网站上,它们很快就被删除了,为什么没有答案,那么这里的大谜团/秘密是什么?它是主板上的一块硬件,可以像其他任何硬件一样访问。
所以真的......假设这是一个关于软件和硬件的“确定”问题,任何人都可以直接访问GPU而无需供应商特定文件,因为这些文件并不神奇。
那么,GPU 是如何从裸机、直接硬件角度在特定于硬件的层面上“编程”的呢?
在这张来自http://en.kioskea.net/contents/pc/bus.php3 的图片中,它解释了计算机中的总线
那些来自 LAN、SCSI、ISA、USB、IDE 的短黑线也是总线,它们的名字是什么?
请注意,图中来自二级缓存、AGP 和 RAM 的黑线分别命名为处理器总线、AGP 总线和内存总线。
数据流如何?
例如,我的以下理解是否正确?
从 CPU 到 Level 2 缓存,路线是源自 CPU 和处理器总线的黑线。
从 CPU 到 AGP 或 RAM,路线是源自 CPU、北桥和 AGP 总线或内存总线的黑线。
从CPU到LAN或SCSI,黑线是CPU、北桥、PCI总线,黑线是LAN或SCSI。
从CPU到ISA、USB、IDE中的任何一个,走的路线是黑线是CPU、北桥、南桥,黑线是ISA、USB或IDE。
非 CPU 组件之间的数据流如何?
谢谢!
我对 PCI 总线/设备/功能枚举感到困惑。查看PCI 配置的 Wikipedia 页面,我看到对于给定的总线,主机将使用函数 0 请求所有设备的供应商 ID 和设备 ID。如果返回所有 0xFF,则没有设备存在,枚举继续进行。如果找到了有效的设备 ID 和供应商 ID,则那里有一个 PCI 单元,并且将对其进行枚举。我不确定 bus.device.function 中的设备是如何确定的。
例如,假设我有一个 CPU,它带有一个 PCI 总线和一个连接到它的 PCI 外围设备。我知道 CPU 将查看总线 0(默认情况下),并将检查查看功能 0 的所有设备编号。如何确定外围设备的设备编号?
我正在做的事情需要一个非常快速/宽的前端总线(FSB)。FSB 属于哪个组件?它是 CPU 还是主板的一部分?它是可以放在板上的东西,还是从根本上说它是主板的一部分,因此无法更换?
当我同时将 4 个 USB 驱动器连接到PC上的 4 个可用插槽时,每个插槽的理论速度是 480 Mbit/s 还是将其分成四等分并且每个端口只有 120 Mbit/s?
当您在Marvell SoC 中放置 4 个 USB 驱动器时,这是否会发生变化,或者是否存在相同的内部基础架构?
我有一个远程服务器,我应该在其中使用 USB 驱动器测试某些应用程序的工作。不幸的是,无法在那里安装任何 USB 驱动器。所以,我需要在 Windows 中模拟一个虚拟 USB 驱动器。应用程序检查 USB 总线类型的磁盘:
Get-Disk | Where-Object { ($_.BusType -eq "usb")
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Windows 中模拟虚拟 USB 驱动器?
bus ×10
usb ×3
cpu ×2
drivers ×2
motherboard ×2
arm ×1
emulation ×1
gpu ×1
linux ×1
memory ×1
memory-card ×1
pci ×1
performance ×1
register ×1
sd-card ×1
speed ×1
usb-storage ×1
virtual-disk ×1
windows ×1
windows-10 ×1