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 

  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

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

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

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

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 :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

...

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

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

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

你可能感兴趣的:(open source)