2つのシリアルポートと1つのパラレルポートを備えたPCIカードをインストールしました。チップセットはMCS9865
です。 ここ から最新のドライバー(V1.0.12)をダウンロードしました。 make
とmake 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を実行しています。
これが通常機能する方法は次のとおりです。
MODULE_DEVICE_TABLE
マクロへの呼び出しが含まれています。__mod_alias_NNN
と呼ばれるシンボルの値として格納されます。ここで、NNNは整数です。値は、デバイスのバスIDをエンコードします。 ベンダー0x971 、デバイス0x9865として識別されるPCIデバイスのpci:v00009710d00009865sv*sd*bc*sc*i*
。__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.pcimap
、modules.usbmap
、…などのファイルを作成します。これらのファイルは、modprobeに組み込まれた廃止されたホットプラグインフラストラクチャによって使用されます。kernel.modprobe
sysctl (デフォルトでは /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