Я использую Debian Jessie на своем Hummingboard, ARM SBC на базе iMX6.
root@torpedo:~# uname -a
Linux torpedo 4.11.4-cubox #2 SMP Tue Jun 13 14:51:52 CEST 2017 armv7l GNU/Linux
У него есть мини-слот PCI Express, который я планирую использовать для 4-портовой карты UART. У меня есть карта от систем Diamond, в которой используется чип UAR EXAR XR17V354.
Будучи оптимистом, я подключил карту и загрузился, надеясь на лучшее.
Похоже, карта распознана:
root@torpedo:~# lspci -v
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01) (prog-if 00 [Normal deco de])
Flags: bus master, fast devsel, latency 0
Memory at 01000000 (32-bit, non-prefetchable) [size=1M]
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
Memory behind bridge: 01100000-011fffff
[virtual] Expansion ROM at 01200000 [disabled] [size=64K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
Capabilities: [70] Express Root Port (Slot-), MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Virtual Channel
Kernel driver in use: pcieport
01:00.0 Serial controller: Exar Corp. Device 0354 (rev 03) (prog-if 02 [16550])
Flags: fast devsel, IRQ 334
Memory at 01100000 (32-bit, non-prefetchable) [size=16K]
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [78] Power Management version 3
Capabilities: [80] Express Endpoint, MSI 01
Capabilities: [100] Virtual Channel
Тем не менее, dmesg не содержит упоминаний о ttys, созданных во время загрузки, кроме GPIO, связанных с Hummingboard, которые всегда были там.
Поставщик (Diamond) предоставляет пользовательский драйвер, который я скачал и собрал из исходного кода. Когда я загружаю .ko, dmesg говорит:
[ 640.564446] DSMPESER4MDriver: loading out-of-tree module taints kernel.
[ 640.565123] The init fun get called
[ 640.565199] pci 0000:01:00.0: enabling device (0140 -> 0142)
[ 640.565359] DS-MPE-SER4M driver loaded
И /var/log/messages говорит:
root@torpedo:~# tail -f /var/log/messages
...
Apr 17 15:48:50 torpedo kernel: DSMPESER4MDriver: loading out-of-tree module taints kernel.
Apr 17 15:48:50 torpedo kernel: The init fun get called
Apr 17 15:48:50 torpedo kernel: pci 0000:01:00.0: enabling device (0140 -> 0142)
Apr 17 15:48:50 torpedo kernel: DS-MPE-SER4M driver loaded
Несколько вопросов:
- Как мне исправить «загрузку ядра модуля из дерева».? (не техническая проблема - см. комментарий)
- Как мне использовать mknod для создания файлов /dev/tty для этого драйвера?
- Как настроить модуль для загрузки во время загрузки?