Linuxが新しいインストールにインストールするドライバとインストール方法を知る方法

Linuxが新しいインストールにインストールするドライバとインストール方法を知る方法

Linux(Ubuntuなど)が最初からインストールするときに、インストール方法とインストールするドライバをどのように「知っている」のか疑問に思います。たとえば、システムなしで新しいコンピュータを購入し、Ubuntuをインストールしました。私のPCにはGPU、HDDなどが組み込まれており、マウス、キーボードなどの一部の周辺機器もあります。明らかに、新しくインストールすると、システムがハードウェアを制御して通信するために必要なドライバーはありません。もしそうなら、Ubuntuはどのようにインストール/ダウンロードするドライバを「知って」いるのですか?

ベストアンサー1

(Google キャッシュのコピーに基づく)http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html著者:ピーター・ライン・ホードソン(Peter Reinhodson)

ハードウェアでは、特定のI / Oバスまたはサブシステムへの標準アクセス方法を知っている限り、実際のデバイスに関する追加の知識がなくても、特定の標準デバイス識別子にアクセスできます。 Linuxでは、これらの識別子を使用して構築します。モーダル文字列は、各デバイスの正しいドライバを見つけるために使用されます。

各ドライバモジュールのソースコードには、コマンドが特定のモジュールMODULE_DEVICE_TABLEdepmodサポートされているハードウェアのモーダル文字列と一致するモジュールエイリアスワイルドカードエントリを生成するために使用する構造を含めることができます。

カーネルがハードウェアに対して一致するドライバがまだロードされていないことを検出すると、ハードウェア識別子に基づいてモーダル文字列を生成し、それを使用してモジュールの自動ロードを要求します。modprobeその後、コマンドは生成されたファイルを使用して、一致するモジュールが存在することを/lib/modules/$(uname -r)/modules.alias[.bin]確認depmodします。その場合は、モジュールをロードし、必要に応じてハードウェアを調べて詳細を確認してください。

たとえば、DVB TVカードがあります。

$ lspci -v -nn -s 07:00.0
07:00.0 Multimedia video controller [0400]: Conexant Systems, Inc. CX23885 PCI Video and Audio Decoder [14f1:8852] (rev 04)
    Subsystem: Hauppauge computer works Inc. CX23885 PCI Video and Audio Decoder [0070:6a28]

これにより、次のモーダル文字列が生成されます。

pci:v000014F1d00008852sv00000070sd00006A28bc04sc00i00

このモジュールのソースコードには、cx23885次のエイリアスがあります。MODULE_DEVICE_TABLE

# modinfo cx23885
...
alias:          pci:v000014F1d00008880sv*sd*bc*sc*i*
alias:          pci:v000014F1d00008852sv*sd*bc*sc*i*
...

カーネルがカードを検出すると、効果的にmodprobe pci:v000014F1d00008852sv00000070sd00006A28bc04sc00i00コマンドを実行します。モジュールの2番目のエイリアスがcx23885一致するため、モジュールがロードされます。

PCI/PCI-X/PCIeバスユニット

これが「PCIサブタイプ」です。次のモーダル文字列を使用します。

pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00

次のようにデコードできます。

v   00008086  (vendor)
d   00002770  (device)
sv  00001028  (subvendor)
sd  000001AD  (subdevice)
bc  06        (bus class)
sc  00        (bus subclass)
i   00        (interface)

を使用すると、lspci -nnクラス、サブクラス、ベンダー、およびデバイスIDを表示できます。これらのオプションを追加すると、-vsubvendor:subdevice IDも表示できます。

USBデバイス

USB デバイスの場合、モーダル文字列は次のようになります。

usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00

これにより、次のように解凍されます。

v    1D6B  (device vendor)
p    0001  (device product)
d    0206  (bcddevice)
dc     09  (device class)
dsc    00  (device subclass)
dp     00  (device protocol)
ic     09  (interface class)
isc    00  (interface subclass)
ip     00  (interface protocol)

このlsusbコマンドを使用すると、ベンダーと製品IDを表示できます。そのオプションを使用すると、-v他のIDも表示できます。

ACPIデバイス

acpi:接頭辞付きでコロンで区切られたACPI PNP識別子を使用します。

acpi:IBM0071:PNP0511:

DMIデバイス

これは非常に長いモーダル文字列です。

dmi:bvnIBM:bvr1UETB6WW(1.66):bd06/15/2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:

これにより、次のように解凍されます。

bvn  IBM            (BIOS vendor)
bvr  1UETB6WW(1.66) (BIOS version)
bd   06/15/2005     (BIOS date)
svn  IBM            (system vendor)
pn   2371H4G        (product name)
pvr  ThinkPadX40    (product version)
rvn  IBM            (board vendor)
rn   2371H4G        (board name)
rvr  NotAvailable   (board version)
cvn  IBM            (chassis vendor)
ct   10             (chassis type)
cvr  NotAvailable   (chassis version)

SerIOデバイス、つまり主にPS / 2マウス

モーダル文字列は次のとおりです。

serio:ty01pr00id00ex00

ここにある値は次のとおりです。

ty  01  (type)
pr  00  (prototype)
id  00  (id)
ex  00  (extra)

その他のバス/デバイスタイプ

Linuxカーネルは他の多くのバスタイプも認識します。カーネルソースファイルの内容の研究File2alias.c各タイプのモーダル文字列コンポーネントの意味を解読するのに役立ちます。

おすすめ記事