Linux上的Gameport操纵杆


2

我在一家商店购买了一台Logitech Wingman Extreme Digital操纵杆并在周围挖了一个旧的PCI声卡,它有一个Gameport端口

将声卡插入计算机并确认声卡正常工作(将声音输出到扬声器)后,我将操纵杆插入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”和“analog”无济于事

“jstest / dev / input / jsX”,其中X为0到10,每次只给出“jstest:没有这样的设备或地址”

有没有人知道如何让这个设备在Linux中工作?我看过一些指南,但他们都给了我与上面尝试过的相同的步骤

系统信息

  • 发行 - Manjaro
  • 内核 - 4.9.13-1-MANJARO

编辑:这里是输出lspci -n -v -s 05:06.0aplay -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

No such file or directory无论我尝试什么,jstest都会给出。虽然没有运气/dev/js*0x200但我已经尝试并改变了游戏港0x207

在这一点上可以安全地假设操纵杆可能已经死了吗?有没有办法测试这个?

Answers:


0

正确的驱动程序是snd_cmipci。如果您查看Documentation/sound/alsa/CMIPCI.txt内核源代码中的文档,它会说:

操纵杆和调制解调器

支持传统操纵杆。要启用操纵杆支持,请传递 joystick_port=1模块选项。值1表示自动检测。如果自动检测失败,请尝试传递确切的I / O地址。

调制解调器通过卡控制开关“调制解调器”动态启用

还要通过正确的modprobes进行验证dmesgsnd_cmipci如果无法找出原因,请使用任何错误消息编辑您的问题。

编辑

好的,卡被正确检测到。我查看了源代码(sound/pci/cmipci.c)和数据表。唯一提到的是一个用于启用操纵杆的位,它不提供任何基址。基本地址也不是PCI区域的一部分,显然旧的PCI卡就是这样做的(对于传统的MPU401 / FM / SB16基础也是如此,尽管你可以选择那些,这意味着我们可以知道它们)。

传统上,游戏端口位于0x200- 0x207,与0x201通常使用的一样。因此,驱动程序代码只是尝试保留0x201和按此0x200顺序保留,joystick_port=1否则给定端口,然后启用卡中的操纵杆。没有正确的检测,也没有消息。

因此,首先检查资源是否空闲:未加载驱动程序(检查lsmodrmmod必要时使用),使用cat /proc/ioportsroot用户输出编辑问题(作为普通用户,您没有看到范围)。如果0x200采取了这个范围,我们必须找到一种方法来解放它。

对于探测,再次确保当您modprobe snd_cmipci joystick_port=0x201(或不处理该选项)时尚未加载驱动程序。

在不记得游戏端口出现的确切位置,但如果一切正常(范围是免费的),你现在应该看到gameport和其他一些模块lsmod,我认为你应该有一个设备/dev/js*或类似的,你可以用jscal或测试jstest。如果发生这种情况但您没有得到任何反应,请尝试0x200下一步。

编辑

正如我所说,我不记得你需要的模块堆栈,我不再拥有游戏端口硬件了。但是我挖出了我的旧操纵杆(也恰好是罗技WingMan Extreme,不知道是不是“数字”),查看旧文件并搜索了一下。这是我目前对模块堆栈的理解:

  • gameport 使游戏端口注册可访问
  • ns558 测量游戏端口上的模拟信号
  • analog 作为普通模拟操纵杆的驱动程序(如果你的Wingman在这种模式下工作)
  • adi 对于Logitech游戏杆,使用ADI协议(用于额外的按钮等)在游戏端口(你的Wingman的可能选择)
  • joydev 用于输入设备

在获得游戏端口后,按以下顺序尝试以下操作:

modprobe adi
modprobe joydev

并观察dmesgsudo 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端口。比使用旧的声卡更简单。:-)


Modprobing snd_cmipci没有显示任何内容dmesg。传递joystick_port=1也没有显示dmesg如何获得确切的I / O地址?
Jango Knight

请在修改lspci -n -v -s 05:06.0后输出编辑问题snd_cmipci。这也将为您提供I / O区域。此外,因为它是声卡,添加aplay -lmodprobe之后的输出以验证至少检测到声卡。
dirkt 2017年

添加了问题的两个输出
Jango Knight 2017年

添加了ioports和我的dmesg输出的输出
Jango Knight 2017年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.