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.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

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进行验证dmesg,snd_cmipci如果无法找出原因,请使用任何错误消息编辑您的问题。

编辑:

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

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

因此,首先检查资源是否空闲:未加载驱动程序(检查lsmod,rmmod必要时使用),使用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

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


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.