Linux大学Linux学部LPIC学科講師のLPIC猿です。

本日の講義は「ホットプラグについて]です。


USB規格では、PCに電源を入れたまま周辺機器やパーツの取り付け・
取り外しができるホットプラグに対応しています。以前は/sbin/hotplug
を実行認識していましたが、現在では/sbin/hotplugを使用せず動的に
デバイスを管理するudevを使用した対応が一般的となっています。

すなわち、ホットプラグデバイス接続時にカーネルがudevのデーモン
であるudevdに通知し、udevdは/etc/udev/ディレクトリ以下に格納
されたスクリプトを実行します。

このとき、デバイスに関する情報はシステム上のデバイスのデータベースを
管理しているHALのデーモンであるhaldに通知され、新たにデバイスの登録が
行われます。その後、D-BUSにより各アプリケーションにその情報が通知され、
デバイスを使用できるようになります。

USB接続デバイスの確認は「lsusb」コマンドを使用します。

# lsusb
Bus 004 Device 001: ID 0000:0000 Virtual Hub
Bus 003 Device 001: ID 0000:0000 Virtual Hub
Bus 002 Device 003: ID 046d:c001 Logitech Inc. N48/M-BB48 [FirstMouse Plus]
Bus 002 Device 001: ID 0000:0000 Virtual Hub
Bus 001 Device 002: ID 049f:0052 Compaq Computer Corp.
Bus 001 Device 001: ID 0000:0000 Virtual Hub

【お勧め問題集】
LPIC予想問題ドットコム
Linux大学Linux学部LPIC学科講師のLPIC猿です。

本日の講義は「USBデバイスについて]です。

USBは、キーボードやマウス、モデムなどの周辺機器とパソコンを結ぶバスの
規格の1つです。プラグアンドプレイやホットプラグ対応といった特徴を持ち、
広く普及しています。

従来の規格USB1.1は最大転送速度が12Mbpsと低速でしたが、
現在ではUSB2.0(転送速度480Mbps)が普及しています。

Linuxもカーネル2.4からUSB1.1に対応、
2.4.18以降(2.6も含む)のカーネルでUSB2.0が対応しました。


特徴を以下にまとめてます。
・最大127のUSBデバイスを接続可能
・プラグアンドプレイによりドライバを自動認識
・ホットプラグを実装し、PC起動中に抜き差し可能
・USBポートからの電源供給
・USBコントローラとしてOHCI,UHCI,EHCIがある


USBコントローラとは、USBを制御するためのチップのことです。

【USB1.1】
☆Intel社とVIA社主導
USBコントローラ:UHCI
USBモジュール(カーネル2.6):uhci_hcd

☆SiS社主導
USBコントローラ:OHCI
USBモジュール(カーネル2.6):ohci_hcd


【USB2.0】
UHCIとOHCIの互換性の問題を解消するべくEHCIに統一。

USBコントローラ:EHCI
USBモジュール(カーネル2.6):ehci_hcd


USB規格は、「デバイスクラス」として、USBデバイスの機能ごとに
データ送受信形式を標準化して定義しています。「クラス・ドライバ」
はデバイスクラスごとに利用される汎用ドライバを指し、1つのデバイスクラス
に属するUSBデバイスは、同じクラス・ドライバを介して制御されます。

各デバイスクラスには固有の「クラスID」が設定されており、各USBデバイスは、
自身が属するデバイスクラスのクラスIDに応じて、クラス・ドライバを選択利用します。

なおクラスID255は、汎用ドライバであるクラス・ドライバでは対応できないUSB
デバイスのデバイスクラスを表します。この場合はドライバとしてクラス・ドライバ
ではなく、ベンダーが提供している「ベンダー・デバイス・ドライバ」を利用します。

【お勧め問題集】
LPIC予想問題ドットコム
Linux大学Linux学部LPIC学科講師のLPIC猿です。

本日の講義は「PCIデバイスについて]です。

PCIカードというものがあり、今でもいろいろと拡張するときに使用されています。 例えば、代表的なPCIカードとしてLANカードがあります。今では、LANカードはパソコンに標準でついていますが、昔は、LANカードが付いていないパソコンもあり、ネットワークに接続できずに、インターネットもできないということもあったのです。

そこで、PCIカードの出番となります。パソコンの中にマザーボードというものがあります。
そのマザーボードにはPCIスロットというものがあり、LANカード(PCIカード)を差し込むことができます。これで、LANカードを認識させればネットワークが利用できるようになるのです。

Linuxカーネルが認識しているPCIデバイス一覧を表示するには「lspci」コマンドを実行します。デバイスの種類、ベンダー、デバイス名といった情報を一覧表示します。


# lspci

00:00.0 Host bridge: Intel Corporation 82865G/PE/P DRAM Controller/Host-Hub Interface (rev 02)
00:02.0 VGA compatible controller: Intel Corporation 82865G Integrated Graphics Controller (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev c2)
00:1f.0 ISA bridge: Intel Corporation 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801EB/ER (ICH5/ICH5R) IDE Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801EB (ICH5) SATA Controller (rev 02)
00:1f.5 Multimedia audio controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller (rev 02)
05:02.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5782 Gigabit Ethernet (rev 03)

オプション「-v」をつけるとIRQやI/Oポートアドレスの詳細情報を表示することができます。

# lspci -v

00:00.0 Host bridge: Intel Corporation 82865G/PE/P DRAM Controller/Host-Hub Interface (rev 02)
Subsystem: Hewlett-Packard Company: Unknown device 12bd
Flags: bus master, fast devsel, latency 0
Memory at e0000000 (32-bit, prefetchable) [size=256M]
Capabilities:

00:02.0 VGA compatible controller: Intel Corporation 82865G Integrated Graphics Controller (rev 02) (prog-if 00 [VGA])
Subsystem: Hewlett-Packard Company: Unknown device 12bd
Flags: bus master, fast devsel, latency 0, IRQ 4
Memory at f0000000 (32-bit, prefetchable) [size=128M]
Memory at f8400000 (32-bit, non-prefetchable) [size=512K]
I/O ports at 14e0 [size=8]
Capabilities:

00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 (rev 02) (prog-if 00 [UHCI])
Subsystem: Hewlett-Packard Company: Unknown device 12bd
Flags: bus master, medium devsel, latency 0, IRQ 4
I/O ports at 1440 [size=32]


「proc/pci」ファイルの内容を表示することで、PCIデバイスの一覧を表示でき、各PCIデバイスに搭載されているチップ名、IRQやI/Oポートアドレスの一覧を確認できます。

# cat /proc/pci

PCI devices found:
Bus 0, device 0, function 0:
Class 0600: PCI device 8086:2570 (rev 2).
Prefetchable 32 bit memory at 0xe0000000 [0xefffffff].
Bus 0, device 2, function 0:
Class 0300: PCI device 8086:2572 (rev 2).
IRQ 4.
Prefetchable 32 bit memory at 0xf0000000 [0xf7ffffff].
Non-prefetchable 32 bit memory at 0xf8400000 [0xf847ffff].
I/O at 0x14e0 [0x14e7].
Bus 0, device 29, function 0:
Class 0c03: PCI device 8086:24d2 (rev 2).
IRQ 4.
I/O at 0x1440 [0x145f].
Bus 0, device 29, function 1:
Class 0c03: PCI device 8086:24d4 (rev 2).
IRQ 5.
I/O at 0x1460 [0x147f].


PCIカードを組み込む際に発生するトラブルとして多いのは、他のデバイスとIRQ番号が重複してしまうことです。

PCIカードはプラグ&プレイに対応しており、ほとんどの場合 IRQ番号などが自動的に割り当てられるため、特に設定を行う必要はありません。もしIRQが衝突した場合は、BIOSでIRQを適切に設定し直す必要があります。

【お勧め問題集】
LPIC予想問題ドットコム