硬件资源
x86 架构提供硬件和 Linux 内核交流的通用机制。在为机器添加新设备时,必须小心分享以下资源,以避免不同设备之间的冲突。
中断请求(Interrupt Request Line - IRQ)和 /proc/interrupts
每个设备都要有吸引内核注意力的方式,比如告诉内核:“嘿,有人移动了鼠标!”,或“嘿,我按照你的要求将那段信息转移到磁盘上了!”许多设备使用中断请求(interrupt request line)或 IRQ 达到这一目的。在 x86 架构中,有 15 条 IRQ 可用,而且多个设备可以共享同一条 IRQ 线。
proc 文件系统文件 /proc/interrupts
显示可用的 IRQ 行和使用它们的设备驱动程序。这个文件还显示(从机器引导以来)发生中断的所有次数。
[root@station root]# cat /proc/interrupts
CPU0
0: 6091325 XT-PIC timer
1: 41608 XT-PIC keyboard
2: 0 XT-PIC cascade
3: 0 XT-PIC ehci-hcd
5: 115473 XT-PIC usb-uhci
8: 1 XT-PIC rtc
10: 16384184 XT-PIC usb-uhci, eth0
11: 9720993 XT-PIC usb-uhci, eth1, Audigy
12: 848836 XT-PIC PS/2 Mouse
14: 190363 XT-PIC ide0
15: 1765002 XT-PIC ide1
NMI: 0
ERR: 0
I/O 端口和 /proc/ioports
吸引到内核注意力后(通过提出一个中断请求),设备通常会为系统输出或从系统输入一些数据。x86 架构为设备提供一个单独的 16 位的地址空间,这个地址为 I/O 端口。使用 I/O 端口和内核交流时,设备和内核必须在使用哪个端口上达成共识。
proc 文件系统文件 /proc/ioports
显示不同设备驱动程序要求的端口。(端口地址用十六进制数字显示。)
[root@station root]# cat /proc/ioports
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
...
03c0-03df : vesafb
03f6-03f6 : ide0
03f8-03ff : serial(auto)
0cf8-0cff : PCI conf1
c000-c01f : Creative Labs SB Audigy
c000-c01f : Audigy
c400-c407 : Creative Labs SB Audigy MIDI/Game port
c800-c8ff : Linksys Network Everywhere Fast Ethernet 10/100 model NC100
c800-c8ff : tulip
...
设备内存缓冲区和 /proc/iomem
许多比较先进的设备都有自己的内存,这些内存一旦映射到系统的内存地址空间中,可以利用它们轻松地传递数据。显卡是典型的自己提供内存缓冲区的设备。
proc 文件系统文件 /proc/iomem
显示所有内存缓冲区映射到物理内存的设备,和分配给每个缓冲区的物理内存地址(以十六进制数字列出)。
[root@station root]# cat /proc/iomem
00000000-0009fbff :System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff :Video RAM area
000c0000-000c7fff : Video ROM
000f0000-000fffff : System ROM
00100000-2dfeffff : System RAM
00100000-002766f6 : Kernel code
002766f7-00384807 : Kernel data
...
e3000000-e3003fff :Creative Labs SB Audigy FireWire Port
e3004000-e30043ff : Linksys Network Everywhere Fast Ethernet 10/100 model NC100
e3004000-e30043ff : tulip
e3005000-e30057ff : Creative Labs SB Audigy FireWire Port
e3006000-e30060ff : VIA Technologies, Inc. USB 2.0
e3006000-e30060ff : ehci-hcd
e3007000-e30070ff : VIA Technologies, Inc. VT6102 [Rhine-II]
e3007000-e30070ff : via-rhine
...