Linux

Debian 重新啟動後未檢測到串列 PCI 卡

  • February 12, 2017

我已經安裝了一個帶有兩個串列和一個並行埠的 PCI 卡。晶片組是MCS9865我從這裡下載了最新的驅動程序(V1.0.12)。我跑makemake install。現在兩個串口是/dev/ttyD0/dev/ttyD1。我已經對它們進行了測試,picocom並且執行良好。問題是當我重新啟動系統時沒有/dev/ttyD0and /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

我正在使用最新的軟體包執行 debian 6.0.5。

這通常的工作方式是:

  • 模組原始碼包含對宏的呼叫,MODULE_DEVICE_TABLE以聲明該模組支持的設備標識符表。
  • 在編譯的模組中,別名儲存為稱為符號的值,__mod_alias_NNN其中 NNN 是整數。該值對設備的匯流排標識進行編碼,例如pci:v00009710d00009865sv*sd*bc*sc*i*,對於標識為供應商 0x9710、設備 0x9865 的 PCI 設備。

它們還__mod_pci_device_table以 PCI 設備、__mod_usb_device_tableUSB 設備等的名稱儲存。

  • 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以查看設備的 PCI id,並檢查上面的鏈以查看哪裡出了問題。

有時,驅動程序適用於與其預期的設備非常相似但具有不同 PCI id 的設備。在這種情況下,驅動程序可能會工作,但不會自動載入,因為它沒有為您的設備聲明 PCI id。您可以在 中手動添加別名/etc/modprobe/my_aliases.conf

您可以通過將模組名稱添加到/etc/modules.

引用自:https://unix.stackexchange.com/questions/43699