Nainstaloval jsem PCI kartu se dvěma sériovými a jedním paralelním portem. čipová sada je MCS9865
. Stáhl jsem si nejnovější ovladač (V1.0.12) odtud. Spustil jsem make
a make install
. nyní jsou dva sériové porty /dev/ttyD0
a /dev/ttyD1
. Testoval jsem je pomocí picocom
a funguje to perfektně. problém je v tom, že když restartuji systém, žádné /dev/ttyD0
a /dev/ttyD1
. Potřebuji provést další make install
. Existuje nějaké řešení?
výstup lspci -v
ukazuje toto:
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
ukazuje toto:
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
Používám debian 6.0.5 s většinou aktualizovaných balíčků.
Přijatá odpověď:
Běžně to funguje takto:
- Zdrojový kód modulu obsahuje volání
MODULE_DEVICE_TABLE
makro pro deklaraci tabulky identifikátorů zařízení, které tento modul podporuje. - V zkompilovaném modulu jsou aliasy uloženy jako hodnoty symbolů nazvaných
__mod_alias_NNN
kde NNN jsou celá čísla. Hodnota kóduje identifikaci sběrnice pro zařízení, např.pci:v00009710d00009865sv*sd*bc*sc*i*
pro zařízení PCI identifikované jako vendor 0x9710, zařízení 0x9865.
Jsou také uloženy pod názvem__mod_pci_device_table
pro zařízení PCI__mod_usb_device_table
pro zařízení USB atd. depmod
program vytvoří mapování tabulky aliasů__mod_alias_NNN
hodnoty k názvu modulu. Tato tabulka je uložena v souborumodules.alias
v kořenovém adresáři modulů jádra, např./lib/modules/2.6.32-5-amd64/modules.alias
.
Vytváří také soubory jakomodules.pcimap
,modules.usbmap
, …, které používá zastaralá hotplug infrastruktura, která byla zahrnuta zpět do modprobe.- Když jádro detekuje zařízení, pro které není přítomen žádný ovladač, pokusí se načíst modul voláním programu označeného
kernel.modprobe
sysctl, což je/sbin/modprobe
ve výchozím stavu. Jádro předá argument domodprobe
který označuje, jaký ovladač je požadován. U zařízení PCI je to název jakopci:v00009710d00009865sv*sd*bc*sc*i*
. modprobe
hledá modul s daným názvem. Pokud nalezne modul s požadovaným názvem (po následování aliasu definovaného v jeho konfiguračních souborech, které zahrnují/etc/modprobe.d/*.conf
a/lib/modules/$(uname -r)/modules.alias
), načte tento modul.modprobe
nenačte modul, který byl nablacklist
direktivu ve svých konfiguračních souborech.
Spusťte lspci -n
abyste viděli PCI ID vašeho zařízení, a zkontrolujte řetězec výše, abyste viděli, kde se něco pokazilo.
Někdy ovladač funguje pro zařízení, které je velmi podobné zařízení, pro které je určeno, ale má jiné PCI id. V takovém případě je možné, že ovladač bude fungovat, ale nenačte se automaticky, protože nedeklaruje PCI id pro vaše zařízení. Alias můžete přidat ručně v /etc/modprobe/my_aliases.conf
.
Můžete vynutit automatické načtení modulu při bootování přidáním jeho názvu do /etc/modules
.