1

Я купил джойстик Logitech Wingman Extreme Digital в магазине товаров повседневного спроса, покопался и нашел старую звуковую карту PCI с портом Gameport

Вставив звуковую карту в мой компьютер и убедившись, что звуковая карта работает (выводит звук на динамики), я подключил джойстик к игровому порту, и Linux вообще не обнаружит джойстик

"lspci" дает это для информации о звуковой карте

05:06.0 Multimedia audio controller: C-Media Electronics Inc CMI8738/CMI8768 PCI Audio (rev 10)

Я использовал "modprobe" для загрузки "joydev", "gameport", "adi", "ns558", "snd_cmipci" и "аналог" безрезультатно

«jstest /dev /input /jsX», где X от 0 до 10, просто каждый раз давал «jstest: нет такого устройства или адреса»

У кого-нибудь есть информация о том, как заставить это устройство работать в Linux? Я видел несколько руководств, но все они дали мне те же шаги, что я пытался выше

Системная информация

  • Дистро - Манджаро
  • Ядро - 4.9.13-1-МАНЖАРО

РЕДАКТИРОВАТЬ: здесь вывод lspci -n -v -s 05:06.0 06.0 и aplay -l

05:06.0 0401: 13f6:0111 (rev 10)
Subsystem: 13f6:0111
Flags: bus master, stepping, medium devsel, latency 32, IRQ 20, NUMA node 0
I/O ports at ae00 [size=256]
Capabilities: [c0] Power Management version 2
Kernel driver in use: snd_cmipci
Kernel modules: snd_cmipci

sudo modprobe snd_cmipci joystick_port=1 ничего не делает и не делает joystick_port=ae00

Вот вывод aplay -l

**** List of PLAYBACK Hardware Devices ****
card 0: CMI8738 [C-Media CMI8738], device 0: CMI8738 [C-Media PCI DAC/ADC]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: CMI8738 [C-Media CMI8738], device 1: CMI8738 [C-Media PCI 2nd DAC]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: CMI8738 [C-Media CMI8738], device 2: CMI8738 [C-Media PCI IEC958]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 0: ALC887-VD Analog [ALC887-VD Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 1: ALC887-VD Digital [ALC887-VD Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: HDMI [HDA ATI HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: HDMI [HDA ATI HDMI], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: HDMI [HDA ATI HDMI], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: HDMI [HDA ATI HDMI], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: HDMI [HDA ATI HDMI], device 11: HDMI 5 [HDMI 5]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

РЕДАКТИРОВАТЬ: вывод cat /proc/ioports

0000-0cf7 : PCI Bus 0000:00
  0000-001f : dma1
  0020-0021 : pic1
  0040-0043 : timer0
  0050-0053 : timer1
  0060-0060 : keyboard
  0061-0061 : PNP0800:00
  0064-0064 : keyboard
  0070-0073 : rtc0
  0080-008f : dma page reg
  00a0-00a1 : pic2
  00c0-00df : dma2
  00f0-00ff : PNP0C04:00
    00f0-00ff : fpu
  0170-0177 : 0000:00:14.1
    0170-0177 : pata_atiixp
  01f0-01f7 : 0000:00:14.1
    01f0-01f7 : pata_atiixp
  0220-0225 : pnp 00:00
  0228-022f : pnp 00:01
    022d-022e : it87
      022d-022e : it87
  0290-0294 : pnp 00:00
  0376-0376 : 0000:00:14.1
    0376-0376 : pata_atiixp
  0378-037a : parport0
  03c0-03df : vesafb
  03f6-03f6 : 0000:00:14.1
    03f6-03f6 : pata_atiixp
  03f8-03ff : serial
  040b-040b : pnp 00:01
  04d0-04d1 : pnp 00:00
  04d6-04d6 : pnp 00:01
  0b00-0b0f : pnp 00:01
  0b10-0b1f : pnp 00:01
  0b20-0b3f : pnp 00:01
  0c00-0c01 : pnp 00:01
  0c14-0c14 : pnp 00:01
  0c50-0c52 : pnp 00:01
  0c6c-0c6d : pnp 00:01
   0c6f-0c6f : pnp 00:01
  0cd0-0cd1 : pnp 00:01
  0cd2-0cd3 : pnp 00:01
  0cd4-0cdf : pnp 00:01
0cf8-0cff : PCI conf1
0d00-ffff : PCI Bus 0000:00
  4000-40fe : pnp 00:01
    4000-4003 : ACPI PM1a_EVT_BLK
    4004-4005 : ACPI PM1a_CNT_BLK
    4008-400b : ACPI PM_TMR
    4020-4027 : ACPI GPE0_BLK
    4050-4050 : ACPI PM2_CNT_BLK
  4100-411f : pnp 00:01
  4210-4217 : pnp 00:01
  a000-afff : PCI Bus 0000:05
    ae00-aeff : 0000:05:06.0
  b000-bfff : PCI Bus 0000:02
  c000-cfff : PCI Bus 0000:01
    ce00-ceff : 0000:01:00.0
  d000-dfff : PCI Bus 0000:04
  e000-efff : PCI Bus 0000:03
    ee00-eeff : 0000:03:00.0
      ee00-eeff : r8168
  fa00-fa0f : 0000:00:14.1
    fa00-fa0f : pata_atiixp
  fb00-fb0f : 0000:00:11.0
    fb00-fb0f : ahci
  fc00-fc03 : 0000:00:11.0
    fc00-fc03 : ahci
  fd00-fd07 : 0000:00:11.0
    fd00-fd07 : ahci
  fe00-fe03 : 0000:00:11.0
    fe00-fe03 : ahci
  ff00-ff07 : 0000:00:11.0
    ff00-ff07 : ahci

После выполнения modprobe snd_cmipci joystick_port=0x201 я действительно получил это в dmseg [74167.823806] gameport gameport0: C-Media Gameport is pci0000:05:06.0/gameport0, io 0x201, speed 714kHz

Однако jstest не дает No such file or directory что бы я ни пытался. Я попытался /dev/js* и изменил игровой порт на 0x200 хотя 0x207 без удачи

На данный момент безопасно ли предположить, что джойстик может быть мертвым? Будет ли способ проверить это?

1 ответ1

0

Правильный драйвер - это snd_cmipci . Если вы посмотрите документацию в Documentation/sound/alsa/CMIPCI.txt в исходниках ядра, там написано:

Джойстик и модем

Устаревший джойстик поддерживается. Чтобы включить поддержку джойстика, передайте опцию модуля joystick_port=1 . Значение 1 означает автоопределение. Если автоопределение не удается, попробуйте передать точный адрес ввода-вывода.

Модем включается динамически через плату управления коммутатором "Модем"

Также проверьте через dmesg что snd_cmipci modprobes правильно, и отредактируйте свой вопрос с любыми сообщениями об ошибках, если вы не можете выяснить причину.

Редактировать:

Хорошо, карта правильно обнаружена. Я посмотрел на исходный код sound/pci/cmipci.c и техническое описание. Единственное, что упомянуто, это один бит для включения джойстика, и он не дает никакого базового адреса. Базовый адрес также не является частью регионов PCI, по-видимому, старые карты PCI делали это таким образом (это то же самое для устаревших баз MPU401/FM/SB16, хотя вы можете выбрать те, что означает, что мы могли бы их знать).

Традиционно игровой порт был 0x200 - 0x207 , с 0x201 как обычно используемый. Таким образом, код драйвера просто пытается зарезервировать 0x201 и 0x200 , в этом порядке, для joystick_port=1 , и заданный порт в противном случае, а затем включает джойстик на карте. Там нет надлежащего обнаружения, и нет сообщений.

Итак, сначала проверьте, что ресурс свободен: без загруженного драйвера (проверьте с помощью lsmod , при необходимости используйте rmmod ), отредактируйте вопрос с выводом cat /proc/ioports от имени пользователя root (как обычный пользователь, вы не видите диапазоны). Если диапазон 0x200 взят, мы должны найти способ освободить его.

Для проверки снова убедитесь, что драйвер еще не загружен, когда вы modprobe snd_cmipci joystick_port=0x201 (или опция не будет обработана).

Я точно не помню, где отображается игровой порт, но если все работает (диапазон свободен), вы должны увидеть gameport и некоторые другие модули в lsmod , и я думаю, что у вас должно быть устройство /dev/js* или подобное который вы можете проверить с помощью jscal или jstest . Если это произойдет, но вы не получите никакой реакции, попробуйте 0x200 дальше.

редактировать

Как я уже сказал, я не помню, какой именно стек модулей вам нужен, и у меня больше нет оборудования для игрового порта. Но я вытащил свой старый джойстик (который также является Logitech WingMan Extreme, без понятия "цифровой" или нет), посмотрел на старые файлы и немного погуглил. Вот мое текущее понимание стека модулей:

  • gameport чтобы сделать регистр игрового порта доступным
  • ns558 для измерения аналоговых сигналов на игровом порту
  • analog в качестве драйвера для простых аналоговых джойстиков (если ваш Wingman работает в этом режиме)
  • adi для джойстиков Logitech, использующих протокол ADI (для дополнительных кнопок и т. д.) над игровым портом (вероятный выбор для вашего Wingman)
  • joydev для устройства ввода

Поэтому после получения игрового порта попробуйте следующее в таком порядке:

modprobe adi
modprobe joydev

и посмотрите dmesg или sudo tail -f /var/log/syslog чтобы увидеть, что происходит. Вы должны получить устройство /dev/input/js0 которое вы можете протестировать с помощью jstest /dev/input/js0 . Если это не сработает, попробуйте вместо

modprobe ns558
modprobe analog map=auto
modprobe joydev

Кстати, мой Wingman является многопротокольным (USB + ADI, возможно, также аналоговым) и поставляется с переходным кабелем игрового порта к USB, который позволяет мне подключить его к USB-порту. Проще, чем использовать старую звуковую карту. :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .