LINUX.ORG.RU

Задать драйвер принудительно...


0

3

Есть устройство подключенное по PCI на шине оно видно, но драйвер ему не присваивается, хотя должен. Можно ли както задать драйвер принудительно, как в винде... (Адрес устройства тут 0000:03:0b). Производитель гарантировал поддержу под ядрами >= 2.6.32.

Объясните пожалуйста, что это значит (PCI INT C disabled) и может ли это сказаться как то на работе устройств.

dmesg | grep "disabled"
[    0.000000]   3 disabled
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.090970] pci 0000:00:1d.7: PME# disabled
[    0.091747] pci 0000:02:00.0: PME# disabled
[    0.091880] pci 0000:02:01.0: PME# disabled
[    0.091987] pci 0000:02:02.0: PME# disabled
[    0.092106] pci 0000:02:08.0: PME# disabled
[    0.100001] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 5 6 7 10 12 14 15) *0, disabled.
[    0.118595] pnp 00:06: Plug and Play ACPI device, IDs PNP0700 (disabled)
[    0.161487] pci 0000:00:1d.0: PCI INT A disabled
[    0.161621] pci 0000:00:1d.1: PCI INT B disabled
[    0.161755] pci 0000:00:1d.2: PCI INT C disabled
[    0.161919] pci 0000:00:1d.7: PCI INT D disabled
[    0.162732] audit: initializing netlink socket (disabled)
[    0.290857] serial 0000:03:0b.0: PCI INT A disabled
[    2.072621] e100 0000:02:08.0: PME# disabled


dmesg | grep "PCI INT"
[    0.161414] pci 0000:00:1d.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.161487] pci 0000:00:1d.0: PCI INT A disabled
[    0.161552] pci 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19
[    0.161621] pci 0000:00:1d.1: PCI INT B disabled
[    0.161686] pci 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18
[    0.161755] pci 0000:00:1d.2: PCI INT C disabled
[    0.161820] pci 0000:00:1d.7: PCI INT D -> GSI 23 (level, low) -> IRQ 23
[    0.161919] pci 0000:00:1d.7: PCI INT D disabled
[    0.290769] serial 0000:03:0b.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
[    0.290857] serial 0000:03:0b.0: PCI INT A disabled
[    0.349529] ata_piix 0000:00:1f.1: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[    0.352415] ehci_hcd 0000:00:1d.7: PCI INT D -> GSI 23 (level, low) -> IRQ 23
[    0.380924] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.381678] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19
[    0.382368] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18
[    1.427297] e1000 0000:02:00.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21
[    1.743467] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    1.986687] e100 0000:02:08.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20
[    2.073792] e1000 0000:02:01.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22

драйвер ему не присваивается, хотя должен


1. Какой драйвер используешь?
2. Как знаешь что драйвер «не присваивается»?
3. Дай вывод вот этой команды:

$ lspci -v

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Kroz
03:0b.0 Serial controller: ADDI-DATA GmbH Device 7003 (prog-if 06 [16950])
        Subsystem: Oxford Semiconductor Ltd Device 9501
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
        Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Interrupt: pin A routed to IRQ 19
        Region 0: I/O ports at 3020 [size=32]
        Region 1: Memory at e0301000 (32-bit, non-prefetchable) [size=4K]
        Region 2: I/O ports at 3000 [size=32]
        Region 3: Memory at e0300000 (32-bit, non-prefetchable) [size=4K]

03:0b.1 Bridge: ADDI-DATA GmbH Device 7503
        Subsystem: Oxford Semiconductor Ltd Device 9511
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
        Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Interrupt: pin A routed to IRQ 5
        Region 0: I/O ports at 3060 [size=32]
        Region 1: Memory at e0303000 (32-bit, non-prefetchable) [size=4K]
        Region 2: I/O ports at 3040 [size=32]
        Region 3: Memory at e0302000 (32-bit, non-prefetchable) [size=4K]
:~$ dmesg | grep "8250"
[    0.283056] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
:~$ dmesg | grep "serial"
[    0.290769] serial 0000:03:0b.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
[    0.290857] serial 0000:03:0b.0: PCI INT A disabled
:~$ dmesg | grep "ttyS"
:~$ dmesg | grep "0000:03:0b.0"
[    0.092297] pci 0000:03:0b.0: [15b8:7003] type 0 class 0x000700
[    0.092315] pci 0000:03:0b.0: reg 10: [io  0x3020-0x303f]
[    0.092328] pci 0000:03:0b.0: reg 14: [mem 0xe0301000-0xe0301fff]
[    0.092341] pci 0000:03:0b.0: reg 18: [io  0x3000-0x301f]
[    0.092354] pci 0000:03:0b.0: reg 1c: [mem 0xe0300000-0xe0300fff]
[    0.290769] serial 0000:03:0b.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
[    0.290857] serial 0000:03:0b.0: PCI INT A disabled
:~$ find /sys -name "0000:03:0b.0"
/sys/devices/pci0000:00/0000:00:1e.0/0000:02:02.0/0000:03:0b.0
/sys/bus/pci/devices/0000:03:0b.0
find: `/sys/kernel/debug': Permission denied
:~$ udevadm info -q all -p "/sys/bus/pci/devices/0000:03:0b.0"
P: /devices/pci0000:00/0000:00:1e.0/0000:02:02.0/0000:03:0b.0
E: DEVPATH=/devices/pci0000:00/0000:00:1e.0/0000:02:02.0/0000:03:0b.0
E: MODALIAS=pci:v000015B8d00007003sv00001415sd00009501bc07sc00i06
E: PCI_CLASS=70006
E: PCI_ID=15B8:7003
E: PCI_SLOT_NAME=0000:03:0b.0
E: PCI_SUBSYS_ID=1415:9501
E: SUBSYSTEM=pci
E: UDEV_LOG=3
LinuxDebian ★★★★
() автор топика
Ответ на: комментарий от Kroz

1. Какой драйвер используешь?

8250_pci.ko оно в ядре

2. Как знаешь, что драйвер «не присваивается»?

Догадываюсь :)

LinuxDebian ★★★★
() автор топика
Ответ на: комментарий от LinuxDebian

Это какой-то serial port адаптер?

lscpi для других устройств выводит информацию о модуле ядра, kernel module? (должна, по памяти не помню). Если да, то драйвер действительно не подключен.

В ядре драйвер включен?

Рекомендую алгоритм:
1. Включаем в ядре этот, и «похожие» драйверы как модули; если я правильно понимаю, то это 8250_pci, 8250_pnp, 8250, serial_core (посмотри в описании соотв. опций в make menuconfig )
2. Загружаемся; может даже сразу заработает (особенно, если до этого не было включено)
3. Если нет, с помощью modprobe и rmmod подгружаем/выгружаем «вручную» эти модули, параллельно наблюдая изменения в dmesg (рекомендую `tail -f /var/log/messages` на соседний терминал).

Да, и мы четко должны понимать результат успеха; я так понимаю, что в /dev должно появиться какое-то устройство?

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Это какой-то serial port адаптер?

Ага. В ядре драйвер включен? sudo modprobe -r 8250_pci FATAL: Module 8250_pci is builtin Это же значит, что он в ядре? lsmod его не выдает.

Рекомендую алгоритм:
1 и 2

Пробовал

3

Тогда ступил /var/log/messages не смотрел только видел что 8250_pci висит. попробую еще...

LinuxDebian ★★★★
() автор топика
Ответ на: комментарий от Kroz

Да, и мы четко должны понимать результат успеха; я так понимаю, что в /dev должно появиться какое-то устройство?

В мануале говорят о появлении /dev/ttyS*

LinuxDebian ★★★★
() автор топика

Если я правильно понял, то ваша карточка имеет PCI-идентификатор 15b8:7003. Вот в этом мануале: http://www.addi-data.com/treiber/linux/linux_APCI7xxx.pdf её нет, там есть 7000, 7001, 7002, а 7003 нет. В ядре, соответсвенно, тоже нет.

Я не знаю, что это: новый чип, или заводской брак, или китайская подделка, или ошибка передачи данных по PCI-шине. По приколу можно написать производителю.

Можно попробовать поправить ядро. Нужно в linux/include/linux/pci_ids.h добавить pci-идентификатор для 7003 по аналогии со строкой PCI_DEVICE_ID_ADDIDATA_APCI7500 В файле /drivers/serial/8250_pci.c создать структуру наподобие этой:

        {       PCI_VENDOR_ID_ADDIDATA,
                PCI_DEVICE_ID_ADDIDATA_APCI7500,
                PCI_ANY_ID,
                PCI_ANY_ID,
                0,
                0,
                pbn_b0_4_115200 },

только указать созданный pci-идентификатор из файла pci_ids.h.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.