Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Фундаментальные основы Linux. Часть IX. Приложения

Оригинал: Linux Fundamentals
Автор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 24 декабря 2014 г.

Приложение B. Аппаратное обеспечение

Шины

О шинах

Аппаратные компоненты взаимодействуют с центральным процессором (Central Processing Unit или CPU) посредством шин. На сегодняшний день наиболее часто используемыми шинами являются шины usb, pci, agp, pci-express, а также шина pcmcia, известная, как pc-card. Все они являются шинами с поддержкой технологии Plug and Play.

Более старые компьютеры архитектуры x86 обычно имели шины isa, которые настраивались с помощью джамперов или dip-переключателей.

Директория /proc/bus

Для того, чтобы получить список шин вашего компьютера, распознанных ядром Linux, следует обратиться к файлам из директории /proc/bus/ (ниже приведены примеры списков файлов из данной директории в случае использования дистрибутивов Ubuntu 7.04 и RHEL 4.4 соответственно).
root@laika:~# ls /proc/bus/
input  pccard  pci  usb
[root@RHEL4b ~]# ls /proc/bus/
input  pci  usb

Можете ли вы догадаться, какой из этих двух списков файлов был создан при работе с ноутбуком?

Утилита /usr/sbin/lsusb

Для получения списка всех устройств usb, соединенных с вашей системой, вам придется прочитать содержимое файла /proc/bus/usb/devices (конечно же, в том случае, если этот файл существует), причем вы также можете получить аналогичный лучше читаемый список с помощью утилиты lsusb, вывод которой для системы SPARC под управлением дистрибутива Ubuntu приведен ниже.
root@shaka:~# lsusb
Bus 001 Device 002: ID 0430:0100 Sun Microsystems, Inc. 3-button Mouse
Bus 001 Device 003: ID 0430:0005 Sun Microsystems, Inc. Type 6 Keyboard
Bus 001 Device 001: ID 04b0:0136 Nikon Corp. Coolpix 7900 (storage)
root@shaka:~#

Файл /var/lib/usbutils/usb.ids

Файл /var/lib/usbutils/usb.ids содержит сжатый с помощью утилиты gzip список всех известных идентификаторов и соответствующих им описаний устройств usb.
paul@barry:~$ zmore /var/lib/usbutils/usb.ids | head
------> /var/lib/usbutils/usb.ids <------
#
#       List of USB ID's
#
#       Maintained by Vojtech Pavlik <vojtech@suse.cz>
#       If you have any new entries, send them to the maintainer.
#       The latest version can be obtained from
#               http://www.linux-usb.org/usb.ids
#
# $Id: usb.ids,v 1.225 2006/07/13 04:18:02 dbrownell Exp $

Утилита /usr/sbin/lspci

Для получения списка всех подсоединенных к системе устройств PCI вы можете либо обратиться к содержимому файла /proc/bus/pci, либо использовать утилиту lspci (фрагмент вывода которой приведен ниже).
paul@laika:~$ lspci
...
00:06.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-139...
00:08.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-816...
00:09.0 Multimedia controller: Philips Semiconductors SAA7133/SAA713...
00:0a.0 Network controller: RaLink RT2500 802.11g Cardbus/mini-PCI 
00:0f.0 RAID bus controller: VIA Technologies, Inc. VIA VT6420 SATA ...
00:0f.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A...
00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1....
00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1....
...

Запросы прерываний

О запросах прерываний

Запрос прерывания (Interrupt request или IRQ) является запросом, отправляемым устройством центральному процессору. Устройство генерирует запрос прерывания в тот момент, когда ему должно быть уделено внимание со стороны центрального процессора (этот момент может наступить тогда, когда устройство заканчивает накопление данных, которые должны быть переданы центральному процессору).

С момента презентации шины PCI запросы прерываний могут разделяться между устройствами.

Запрос прерывания с идентификатором 0 всегда зарезервирован за системным таймером, с идентификатором 1 - за клавиатурой, а с идентификатором 2 используется в качестве канала для запросов прерываний с идентификаторами из диапазона от 8 до 15 и, таким образом, совпадает с запросом прерывания с идентификатором 9.

Файл /proc/interrupts

Вы можете ознакомиться со списком идентификаторов запросов прерываний в вашей системе, прочитав содержимое файла /proc/interrupts.
paul@laika:~$ cat /proc/interrupts 
      CPU0     CPU1       
0:  1320048     555  IO-APIC-edge      timer
1:    10224       7  IO-APIC-edge      i8042
7:        0       0  IO-APIC-edge      parport0
8:        2       1  IO-APIC-edge      rtc
10:     3062     21  IO-APIC-fasteoi   acpi
12:      131      2  IO-APIC-edge      i8042
15:    47073      0  IO-APIC-edge      ide1
18:        0      1  IO-APIC-fasteoi   yenta
19:    31056      1  IO-APIC-fasteoi   libata, ohci1394
20:    19042      1  IO-APIC-fasteoi   eth0
21:    44052      1  IO-APIC-fasteoi   uhci_hcd:usb1, uhci_hcd:usb2,...
22:   188352      1  IO-APIC-fasteoi   ra0
23:   632444      1  IO-APIC-fasteoi   nvidia
24:     1585      1  IO-APIC-fasteoi   VIA82XX-MODEM, VIA8237

Утилита dmesg

Также вы можете использовать утилиту dmesg для установления идентификаторов запросов прерываний, резервируемых для определенных устройств в процессе загрузки системы.
paul@laika:~$ dmesg | grep "irq 1[45]"
[ 28.930069] ata3: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0x2090 irq 14
[ 28.930071] ata4: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0x2098 irq 15

Порты ввода-вывода

О портах ввода-вывода

Передача данных в противоположном направлении от центрального процессора к устройству осуществляется посредством портов ввода-вывода (IO Ports). Центральный процессор записывает данные или управляющие коды в порт ввода-вывода устройства. Но данный метод передачи данных не является односторонним, так как центральный процессор может также использовать порт ввода-вывода устройства для чтения информации о состоянии устройства. В отличие от запросов прерываний, порты ввода-вывода не могут разделяться между устройствами!

Файл /proc/ioports

Вы можете получить список портов ввода-вывода устройств вашей системы, прочитав содержимое файла /proc/interrupts.
[root@RHEL4b ~]# cat /proc/ioports 
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
02f8-02ff : serial
...

Технология DMA

О технологии DMA

Устройство, которое передает большие объемы данных, а также требует для своей работы генерации большого количества запросов прерываний и создания большого количества портов ввода-вывода, может создавать значительную нагрузку на центральный процессор. Благодаря технологии прямого доступа к памяти (Direct Memory Access или DMA), устройство может получить доступ (временный) к определенному диапазону адресов оперативной памяти.

Файл /proc/dma

Прочитав содержимое файла /proc/dma, вы наверняка не получите необходимой информации ввиду того, что данный файл содержит исключительно информацию об используемых в данный момент каналах прямого доступа к памяти для устройств ISA.
root@laika:~# cat /proc/dma 
1: parport0
4: cascade
Ввиду того, что данные об устройствах PCI, использующих технологию прямого доступа к памяти, не приводятся в файле /proc/dma, в случае необходимости получения информации о таких устройствах может оказаться полезной утилита dmesg. В примере ниже показано, что в процессе загрузки параллельный порт получил канал прямого доступа к памяти номер 1, а инфракрасный порт - канал прямого доступа к памяти номер 3.
root@laika:~# dmesg | egrep -C 1 'dma 1|dma 3'
[   20.576000] parport: PnPBIOS parport detected.
[   20.580000] parport0: PC-style at 0x378 (0x778), irq 7, dma 1...
[   20.764000] irda_init()
--
[   21.204000] pnp: Device 00:0b activated.
[   21.204000] nsc_ircc_pnp_probe() : From PnP, found firbase 0x2F8...
[   21.204000] nsc-ircc, chip->init


Предыдущий раздел: Оглавление Следующий раздел:
Приложение A. Раскладки клавиатуры   Приложение C. Лицензия