web-dev-qa-db-ja.com

Debianは再起動後にシリアルPCIカードを検出しません

2つのシリアルポートと1つのパラレルポートを備えたPCIカードをインストールしました。チップセットはMCS9865です。 ここ から最新のドライバー(V1.0.12)をダウンロードしました。 makemake installを実行しました。現在、2つのシリアルポートは/dev/ttyD0/dev/ttyD1です。 picocomでテストしましたが、完全に機能しています。問題は、システムを再起動すると、/dev/ttyD0/dev/ttyD1がないことです。別のmake installを行う必要があります。解決策はありますか?

lspci -vの出力はこれを示しています:

03:01.0 Serial controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 02 [16550])
    Subsystem: Device a000:1000
    Flags: bus master, medium devsel, latency 32, IRQ 19
    I/O ports at df00 [size=8]
    Memory at fbeff000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefe000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2
    Kernel driver in use: mcs9865-serial

03:01.1 Serial controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 02 [16550])
    Subsystem: Device a000:1000
    Flags: bus master, medium devsel, latency 32, IRQ 18
    I/O ports at de00 [size=8]
    Memory at fbefd000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefc000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2
    Kernel driver in use: mcs9865-serial

03:01.2 Parallel controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 03 [IEEE1284])
    Subsystem: Device a000:2000
    Flags: bus master, medium devsel, latency 32, IRQ 7
    I/O ports at dd00 [size=8]
    I/O ports at dc00 [size=8]
    Memory at fbefb000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefa000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2

make installはこれを示しています:

cp mcs9865.ko mcs9865-isa.ko /lib/modules/2.6.32-5-AMD64/kernel/drivers/serial/
depmod -A
chmod +x mcs9865
cp mcs9865 /etc/init.d/
ln -s /etc/init.d/mcs9865 /etc/rcS.d/S99mcs9865 || true
ln: creating symbolic link `/etc/rcS.d/S99mcs9865': File exists
modprobe mcs9865
modprobe mcs9865-isa

私はほとんどのアップデートパッケージでdebian6.0.5を実行しています。

4
Majid Azimi

これが通常機能する方法は次のとおりです。

  • モジュールのソースコードには、このモジュールがサポートするデバイス識別子のテーブルを宣言するための MODULE_DEVICE_TABLE マクロへの呼び出しが含まれています。
  • コンパイルされたモジュールでは、エイリアスは__mod_alias_NNNと呼ばれるシンボルの値として格納されます。ここで、NNNは整数です。値は、デバイスのバスIDをエンコードします。 ベンダー0x971 、デバイス0x9865として識別されるPCIデバイスのpci:v00009710d00009865sv*sd*bc*sc*i*
    また、PCIデバイスの場合は__mod_pci_device_table、USBデバイスの場合は__mod_usb_device_tableなどの名前で保存されます。
  • depmod プログラムは、__mod_alias_NNN値をモジュール名にマッピングするエイリアステーブルを作成します。このテーブルは、カーネルモジュールディレクトリのルートにあるファイルmodules.aliasに保存されます。 /lib/modules/2.6.32-5-AMD64/modules.alias
    また、modules.pcimapmodules.usbmap、…などのファイルを作成します。これらのファイルは、modprobeに組み込まれた廃止されたホットプラグインフラストラクチャによって使用されます。
  • カーネルは、ドライバーが存在しないデバイスを検出すると、kernel.modprobesysctl (デフォルトでは /sbin/modprobe )で示されるプログラムを呼び出してモジュールをロードしようとします。カーネルは、どのドライバーが要求されているかを示す引数をmodprobeに渡します。 PCIデバイスの場合、これはpci:v00009710d00009865sv*sd*bc*sc*i*のような名前です。
  • modprobeは、指定された名前のモジュールを検索します。要求された名前のモジュールが見つかった場合(/etc/modprobe.d/*.confおよび/lib/modules/$(uname -r)/modules.aliasを含む構成ファイルで定義されたエイリアスに従った後)、そのモジュールをロードします。
    modprobeは、構成ファイルでblacklistディレクティブによってブラックリストに登録されたモジュールをロードしません。

lspci -nを実行してデバイスのPCIIDを確認し、上記のチェーンをチェックしてどこで問題が発生したかを確認します。

ドライバーは、対象のデバイスと非常によく似ているが、PCIIDが異なるデバイスで動作する場合があります。その場合、ドライバーは機能する可能性がありますが、デバイスのPCI IDが宣言されていないため、自動的に読み込まれません。エイリアスは/etc/modprobe/my_aliases.confで手動で追加できます。

モジュールの名前を/etc/modulesに追加することで、起動時にモジュールを強制的に自動的にロードできます。

簡単な修正は、再起動するたびに実行することです

modprobe mcs9865
modprobe mcs9865-isa

私には、カーネルモジュールが自動挿入されていないように見えます。

initスクリプトがあるので、これを使用してデフォルトの実行レベルに追加する必要があるかもしれません

Sudo update-rc.d mcs9865 defaults
2
Joe