Zarządzanie informacjami o urządzeniach

Wstęp

Coraz to nowsze komputery przystosowane są do współpracy z różnego rodzaju urządzeniami zewnętrznymi. Dotychczas w Linuxie brakowało jednolitego zarządzania informacjami o urządzeniach.

Unified Device Model

Stworzenie Unified Device Model jest jedną z głównych zmian w jądrze 2.6. Zmiana ta przyczynia się do ujednolicenia interfejsów modułu. Pozwala na lepszą kontrolę i zarządzanie urzadzeniami (np. lepsze ustalenie zarządzania energią urządzeń systemowych).

Unified Device Model jest odpowiedzialny między innymi za:
- jakie urządzenia mamy w systemie, w jakim są stanie, do której szyny podłączone
- struktura szyn w systemie, które są połaczone z którymi, jakie urządzenia może wspierać ta szyna oraz które z nich są dostępne
- sterowniki urządzeń w systemie, jakie urządzenia dany sterownik może obsługiwac i z jakimi szynami współpracować
- jakie klasy urządzeń istnieją i jakie w nich istnieją urządzenia

Hotplug

Hotplug jest to urządzenie podobne do Windowsowych plug-and-play. Są to urządzenia, które same się uaktywniają po podłączeniu do komputera. W jądrze 2.4 istniało już wsparcie dla urządzeń hotplug ale dzięki rozszerzeniu w jądrze 2.6 możliwe stało się obsługiwanie miedzy innymi PCI.
Dzięki tej zdolności możemy włożyć wtyczkę PCI w dostępny slot PCI w czasie chodzenia systemu operacyjnego. Nowe zasoby stają się dostępne dla systemu operacyjnego i programów użytkowych (aplikacji) bez konieczności restartowania. Możemy również wymieniać wadliwe urządzenia innymi tego samego typu bez zamykania systemu. Jak wymienimy urządzenie istniejący sterownik podtrzyma urządzenie ponieważ ma konfigurację tego samego typu i informacje te będą zachowane dla zastępczego urządzenia.

Sysfs

Sysfs jest wirtualnym systemem plików dzięki któremu możemy wyciagnąć informację na temat zainstalowanego sprzętu.
System ten jest lepszy od tego by sterowniki mogły eksportować swoje wnętrzności przez /proc.

Ten system plików jest zawsze wkompilowany i może być montowany jak każdy inny wirtualny system plików. Nie potrzeba żadnych narzędzi przestrzeni użytkownika poza cat i echo. Narzędzie tree jest także dobre do oglądania ogólnej struktury.

    mount -t sysfs none /sys
Dzięki sysfs możemy zobaczyć informacje dotyczące skomplikowanej struktury sprzętu w systemie. Kilka wystąpień tego samego sprzętu (pogrubione na przykładzie pierwszy dysk IDE).

Przykład:

/sys
|-- block
|   |-- fd0
|   |   |-- dev
|   |   |-- iosched
|   |   |   |-- fifo_batch
|   |   |   |-- front_merges
|   |   |   |-- read_expire
|   |   |   |-- write_expire
|   |   |   `-- writes_starved
|   |   |-- range
|   |   |-- size
|   |   `-- stat
|   `-- hda
|       |-- dev
|       |-- device -> ../../devices/pci0/00:11.1/ide0/0.0
|       |-- hda1
|       |   |-- dev
|       |   |-- size
|       |   |-- start
|       |   `-- stat
|       |-- hda2
|       |   |-- dev
|       |   |-- size
|       |   |-- start
|       |   `-- stat
|       |-- hda3
|       |   |-- dev
|       |   |-- size
|       |   |-- start
|       |   `-- stat
|       |-- iosched
|       |   |-- fifo_batch
|       |   |-- front_merges
|       |   |-- read_expire
|       |   |-- write_expire
|       |   `-- writes_starved
|       |-- range
|       |-- size
|       `-- stat
|-- bus
|   |-- ide
|   |   |-- devices
|   |   |   |-- 0.0 -> ../../../devices/pci0/00:11.1/ide0/0.0
|   |   |   `-- 1.0 -> ../../../devices/pci0/00:11.1/ide1/1.0
|   |   `-- drivers
|   |       `-- ide-disk
|   |-- pci
|   |   |-- devices
|   |   |   |-- 00:00.0 -> ../../../devices/pci0/00:00.0
|   |   |   |-- 00:01.0 -> ../../../devices/pci0/00:01.0
|   |   |   |-- 00:05.0 -> ../../../devices/pci0/00:05.0
|   |   |   |-- 00:09.0 -> ../../../devices/pci0/00:09.0
|   |   |   |-- 00:09.1 -> ../../../devices/pci0/00:09.1
|   |   |   |-- 00:09.2 -> ../../../devices/pci0/00:09.2
|   |   |   |-- 00:0c.0 -> ../../../devices/pci0/00:0c.0
|   |   |   |-- 00:11.0 -> ../../../devices/pci0/00:11.0
|   |   |   |-- 00:11.1 -> ../../../devices/pci0/00:11.1
|   |   |   |-- 00:11.2 -> ../../../devices/pci0/00:11.2
|   |   |   |-- 00:11.3 -> ../../../devices/pci0/00:11.3
|   |   |   `-- 01:00.0 -> ../../../devices/pci0/00:01.0/01:00.0
|   |   `-- drivers
|   |       |-- AEC62xx IDE
|   |       |-- ALI15x3 IDE
|   |       |-- AMD IDE
|   |       |-- CMD64x IDE
|   |       |-- Cypress IDE
|   |       |-- HPT34x IDE
|   |       |-- HPT366 IDE
|   |       |-- PIIX IDE
|   |       |-- RZ1000 IDE
|   |       |-- SIS IDE
|   |       |-- SLC90e66 IDE
|   |       |-- Serverworks IDE
|   |       |-- VIA IDE
|   |       |   `-- 00:11.1 -> ../../../../devices/pci0/00:11.1
|   |       |-- eepro100
|   |       |   `-- 00:0c.0 -> ../../../../devices/pci0/00:0c.0
|   |       `-- parport_pc
|   |-- platform
|   |   |-- devices
|   |   |   `-- floppy0 -> ../../../devices/legacy/floppy0
|   |   `-- drivers
|   |-- pnp
|   |   |-- devices
|   |   `-- drivers
|   |       |-- parport_pc
|   |       `-- system
|   |-- system
|   |   |-- devices
|   |   |   |-- cpu0 -> ../../../devices/sys/cpu0
|   |   |   |-- pic0 -> ../../../devices/sys/pic0
|   |   |   |-- rtc0 -> ../../../devices/sys/rtc0
|   |   |   `-- timer0 -> ../../../devices/sys/timer0
|   |   `-- drivers
|   |       |-- cpu
|   |       |   `-- cpu0 -> ../../../../devices/sys/cpu0
|   |       |-- pic
|   |       |   `-- pic0 -> ../../../../devices/sys/pic0
|   |       `-- timer
|   |           `-- timer0 -> ../../../../devices/sys/timer0
|   `-- usb
|       |-- devices
|       `-- drivers
|           |-- hub
|           |-- usb
|           `-- usbfs
|-- class
|   |-- cpu
|   |   `-- cpu0
|   |       `-- device -> ../../../devices/sys/cpu0
|   |-- input
|   `-- tty
|-- devices
|   |-- legacy
|   |   |-- floppy0
|   |   |   |-- name
|   |   |   `-- power
|   |   |-- name
|   |   `-- power
|   |-- pci0
|   |   |-- 00:00.0
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:01.0
|   |   |   |-- 01:00.0
|   |   |   |   |-- class
|   |   |   |   |-- device
|   |   |   |   |-- irq
|   |   |   |   |-- name
|   |   |   |   |-- power
|   |   |   |   |-- resource
|   |   |   |   |-- subsystem_device
|   |   |   |   |-- subsystem_vendor
|   |   |   |   `-- vendor
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:05.0
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:09.0
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:09.1
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:09.2
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:0c.0
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:11.0
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:11.1
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- ide0
|   |   |   |   |-- 0.0
|   |   |   |   |   |-- block -> ../../../../../block/hda
|   |   |   |   |   |-- name
|   |   |   |   |   `-- power
|   |   |   |   |-- name
|   |   |   |   `-- power
|   |   |   |-- ide1
|   |   |   |   |-- 1.0
|   |   |   |   |   |-- name
|   |   |   |   |   `-- power
|   |   |   |   |-- name
|   |   |   |   `-- power
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:11.2
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- 00:11.3
|   |   |   |-- class
|   |   |   |-- device
|   |   |   |-- irq
|   |   |   |-- name
|   |   |   |-- power
|   |   |   |-- resource
|   |   |   |-- subsystem_device
|   |   |   |-- subsystem_vendor
|   |   |   `-- vendor
|   |   |-- name
|   |   `-- power
|   `-- sys
|       |-- cpu0
|       |   |-- name
|       |   `-- power
|       |-- name
|       |-- pic0
|       |   |-- name
|       |   `-- power
|       |-- power
|       |-- rtc0
|       |   |-- name
|       |   `-- power
|       `-- timer0
|           |-- name
|           `-- power
|-- firmware
|   `-- acpi
|       `-- namespace
|           `-- ACPI
|               |-- CPU0
|               |-- PWRF
|               `-- _SB
|                   |-- LNKA
|                   |-- LNKB
|                   |-- LNKC
|                   |-- LNKD
|                   |-- LNKE
|                   |-- MEM1
|                   |-- PCI0
|                   |   |-- IDE0
|                   |   |   |-- CHN0
|                   |   |   |   |-- DRV0
|                   |   |   |   `-- DRV1
|                   |   |   `-- CHN1
|                   |   |       |-- DRV0
|                   |   |       `-- DRV1
|                   |   |-- PCI1
|                   |   |-- PX40
|                   |   |   |-- COPR
|                   |   |   |-- DMA1
|                   |   |   |-- ECP
|                   |   |   |-- FDC0
|                   |   |   |-- IRDA
|                   |   |   |-- LPT
|                   |   |   |-- MSRD
|                   |   |   |-- PIC
|                   |   |   |-- PS2K
|                   |   |   |-- PS2M
|                   |   |   |-- PSMR
|                   |   |   |-- RTC
|                   |   |   |-- SBIO
|                   |   |   |-- SDRD
|                   |   |   |-- SPKR
|                   |   |   |-- SYS1
|                   |   |   |-- SYS2
|                   |   |   |-- SYS3
|                   |   |   |-- TMR
|                   |   |   |-- UAR1
|                   |   |   `-- UAR2
|                   |   |-- USB0
|                   |   `-- USB1
|                   `-- PWRB
|-- fs
|   |-- autofs
|   |-- bdev
|   |-- binfmt_misc
|   |-- devpts
|   |-- eventpollfs
|   |-- ext2
|   |-- ext3
|   |-- futexfs
|   |-- iso9660
|   |-- nfs
|   |-- nfs4
|   |-- nfsd
|   |-- pipefs
|   |-- proc
|   |-- ramfs
|   |-- rootfs
|   |-- rpc_pipefs
|   |-- sockfs
|   |-- sysfs
|   |-- tmpfs
|   |-- usbdevfs
|   `-- usbfs
`-- net
    `-- eth0

180 directories, 162 files