Debian 在重启后没有检测到串行 PCI 卡

Maj*_*imi 4 linux drivers kernel-modules serial-port

我已经安装了一个带有两个串行端口和一个并行端口的 PCI 卡。芯片组是MCS9865。我从这里下载了最新的驱动程序(V1.0.12)。我跑makemake 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我正在使用最新的软件包运行 debian 6.0.5。

Gil*_*il' 8

这通常的工作方式是:

  • 模块源代码包含对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.