redhat open source university 硬件资源

硬件资源

https://osu.redhat.com/content/courses-zh-cn/rha130-4/section_0002/tag_lessons/section_0002/section_0001/tag_resource

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 1
  0:    6091325          XT-PIC 2timer
  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 3usb-uhci, eth1, Audigy
 12:     848836          XT-PIC  PS/2 Mouse
 14:     190363          XT-PIC  ide0
 15:    1765002          XT-PIC  ide1
NMI:          0 4
ERR:          0
1

在 SMP 机器上,硬件中断请求是向独立的 CPU 发出的,每个 CPU 上的中断请求活动会分别列出。

2

计时器(timer) 设备驱动程序一定会使用 IRQ 0。timer 固定每秒钟会中断内核 100 次(timer 以每秒 100 次的固定频率中断内核),提醒内核中断一般的活动,执行任意定期或待处理的工作。

3

三个完全不相关的设备驱动程序(USB 控制器、一个以太网网络接口卡和 Audigy 声卡)共享 IRQ 11。

4

NMI 字段计录“不可掩盖中断(Non Maskable Interrupt)”发生的次数。这些中断一般表示低层硬件出错情况。

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 :1System RAM 
0009fc00-0009ffff : reserved
000a0000-000bffff :2Video RAM area
000c0000-000c7fff : Video ROM
000f0000-000fffff : System ROM
00100000-2dfeffff : System RAM
  00100000-002766f6 : Kernel code
  002766f7-00384807 : Kernel data
...
e3000000-e3003fff :3Creative 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
...
1

在看到这个文件以前,机器的主内存 (RAM 或“随机存取内存(Random Access Memory”)被视为“一个其它设备”,并与低层物理地址空间映射。

2

物理地址空间不需要连续(没有间隔地)使用。在这里系统 RAM 的映射被打断以便映射 VGA 显卡。这个设备的地址之前曾在物理地址空间出现,但由于某些原因不能被删除。

3

多数有缓存的先进设备会被映射到物理地址空间的上层地址。

原文地址:https://www.cnblogs.com/cute/p/2022659.html