Debian 重启后未检测到串行 PCI 卡

Debian 重启后未检测到串行 PCI 卡

我安装了一张 PCI 卡,上面有两个串行端口和一个并行端口。芯片组是MCS9865.我从以下网址下载了最新的驱动程序(V1.0.12)这里。我跑了,make然后make install。现在两个串口是/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

我正在运行 debian 6.0.5 以及最新的软件包。

答案1

通常的工作方式是:

  • 模块源代码包含对MODULE_DEVICE_TABLE宏来声明该模块支持的设备标识符表。
  • 在编译的模块中,别名存储为符号值,__mod_alias_NNN其中 NNN 是整数。该值对设备的总线标识进行编码,例如pci:v00009710d00009865sv*sd*bc*sc*i*,对于标识为的 PCI 设备供应商 0x9710,设备0x9865。
    它们还存储在__mod_pci_device_tablePCI 设备、__mod_usb_device_tableUSB 设备等名称下。
  • depmod程序创建一个别名表,将__mod_alias_NNN值映射到模块名称。该表存储在modules.alias内核模块根目录的文件中,例如/lib/modules/2.6.32-5-amd64/modules.alias.
    它还创建诸如modules.pcimapmodules.usbmap、 ... 之类的文件,这些文件由过时的热插拔基础设施使用,该基础设施已被纳入 modprobe。
  • 当内核检测到没有驱动程序的设备时,它会尝试通过调用由kernel.modprobe 系统控制,即/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.

答案2

一个快速修复方法是每次重新启动后运行

modprobe mcs9865
modprobe mcs9865-isa

对我来说,似乎内核模块没有自动插入。

有一个初始化脚本,因此您可能只需将其添加到默认运行级别即可

sudo update-rc.d mcs9865 defaults

相关内容