打印

编译内核让之支持PS并口改装手柄!

编译内核让之支持PS并口改装手柄!

PS并口改装手柄是接在打印机口上的手柄,相比传统的接在声卡MIDI多功能口的模拟手柄,它是纯数字的,因此有定位正确(不用像模拟手柄需要调校才能正确定位),而且,支持的按键可以达到十多个(比模拟手柄多很多),完全可以满足任何游戏的需要;由于是数字式的手柄,因此手柄的电路非常简单,价格低廉,在广州这里,一对PS改装手柄才16块,通街都有得卖,效果却非常好!(相信很多朋友也是用它吧!)

PS手柄的WIN版驱动非常多,但在linux下,对它的支持的资料却一直非常缺乏,在网络上也没见过有人提起过;由于我经常在linux下玩各种各样的模拟器,对此无法支持手柄这事一直耿耿于怀.近来无意之中竟然发现内核之中,其实早就已经提供了支持,一番试验+翻阅内核自带文档,终于试验成功!下面介绍一下方法:

系统:红旗3.0desktop,内核2.4.18(更早一点的可能也支持,不过我还没试验过)

1.由于PS并口手柄用到并口,而且是手柄设备,因此,请先检查你有没有/dev/parport*,/dev/js*,/dev/input/js*这些设备,如果有,可以忽略这步;如果没有,请先建立,方法是:
cd /dev
rm js*
mkdir input
mknod input/js0 c 13 0
mknod input/js1 c 13 1
mknod input/js2 c 13 2
mknod input/js3 c 13 3
ln -s input/js0 js0
ln -s input/js1 js1
ln -s input/js2 js2
ln -s input/js3 js3

2.进你的内核源码文件所在目录(譬如我的是/usr/src/2.4.1,执行make xconfig命令配置内核(图一所标为配置过程中改动的大选项)

先配置并口相关的:如图二,所标地方最好标配置成Y,选M应该也可以,但不推荐;这样就将并口支持功能内建于内核中,内核启动时会自动检测并口并让/dev/parport*起作用

3.配置input core support,如图三,将所标地方选M,这样将手柄功能配置成模块,当加载时,让/dev/js0这些起作用;虽然input core support的帮助文档中说是配置USB设备的,但实际上,这些是手柄设备通用的,不配置这个,则无法配置下一步(当初我就是没配置这个,结果搞了半天joystice的选项都是灰色的,无法配置)----这步配置编译后将生成input.o和joydev.o这两个模块

4.配置joystick:点击character device里的joystick选项(图十二)进入手柄配置窗口(图四,图五),将所标地方选M,一个是配置声卡上的MIDI口(这个应该可以省略,据内核文档说明,是对模拟手柄提供支持的,对数字手柄没用,但我还没试验过),一个是PSX手柄的支持----这步配置编译后将生成gameport.o和gamecon.o这两个模块

5.保存配置退出,重新编译内核和模块并安装,这里就不罗嗦了,关于编译内核的资料本站的"技术论坛"就有不少

6.进入"/lib/modules/your kernel/kernel/drivers/"(譬如我的是/lib/modules/2.4.18/kernel/drivers)目录下,应该见到input目录下有input.o和joydev.o两个模块;char/joystick目录下应该有gamecon.o和gameport.o模块;见图六

7.编辑/etc/modules.conf文件,加入如下两行语句:
alias pspad gamecon
options gamecon gc=0,7,7,7,7,7
第一行的意思是给gamecon.o这个模块起个别名pspad,那以后就可以用modprobe pspad这个命令加载;第二行的意思是给gamecon这个模块加上gc这个参数,其中"0,7,7,7,7,7"的"0"表示手柄是接在第一个打印机口(/dev/parport0),如果你的手柄是接在第二个,则用1,类推;后面的第一个"7"代表第一手柄,类型是PS手柄改装的,第二个"7"代表第二个手柄,类型也是PS手柄,由于并口可以同时接5个手柄,所以有5个7,如果你只有一个接上,只写一个"7"就可以了(1是代表超任改装手柄,2是代表红白机改装手柄,6是代表N64改装手柄,7代表PS改装手柄);这两行很重要,特别是第二行,不加这个参数的话加载gamecon模块会报错说参数错误!(图七)

8.重起,使用新内核,启动过程中,你会发现有并口检测信息出现,这是因为并口支持功能已经在内核中起作用;进入系统后,开一个终端窗口,依次执行下面命令:
modprobe input
modprobe joydev
modprobe pspad
没任何出错信息的话,再lsmod一下,应该可以看到类似图八的输出,确认其中有input,joydev和gamecon这三个模块,其中的gameport一般随声卡驱动自动加载

9.运行jstest /dev/js0(如果你的系统没有这个命令,请上www.rpmfind.net搜索joystick关键字,安装一个叫joystickxxx.rpm的包就有了),应该可以见到图九的输出,这时你按一下手柄的按键,如果屏幕输出有相应的改变,那么,恭喜你,手柄驱动完全成功了!

10.你现在可以运行一下一个模拟器,或其他游戏,用游戏中的手柄功能设置一下,就可以立即可以使用了;譬如epsxe这个模拟器,你可以用ammo joydevice pad driver这个插件(图十),配置一下(图十一)就可以用了,其中/dev/js0代表第一个手柄,/dev/js1代表第二个手柄,类推!经本人试验,凡是可以应用手柄的出程序都可以正常实现手柄的功能,效果一流!以后你可以将第8步中的modprobe那三行加载模块命令加入到rc.local中让它随启动自加载,则一进系统后就可以使用手柄了!或将它写成一个脚本,需要是再执行也可以!

以上很多信息都是来自内核自带的说明文档,大家如果有什么不明白,请先阅读内核源码所在目录下Documentation/input目录下的joystick.txt和joystick-parport.txt这些文档,当然可以回贴!

(绝对原创!转贴请注明www.linuxfans.org)
附件: 您所在的用户组无法下载或查看附件
http://llc.linuxsky.org

TOP

经过再次编译内核证明:上述第4步中,对gameport的支持可以选N去掉,手柄仍然可以驱动;根据内核文档说,gameport只是对接在声卡上的手柄提供支持.
http://llc.linuxsky.org

TOP

唯一的缺陷是:
启动了驱动后,玩游戏时会出现速度下降(帧速减小)的现象!
这应该是此版本手柄驱动的bug之一,在win下的驱动虽然也有这个问题,但不明显;只有期待下一个版本的驱动了,这个已经是最新的了...
http://llc.linuxsky.org

TOP

老兄!我看全公社就你最疯狂了!!你看看自己得贴,都快3000了!

我现在的担忧是:你毕业了,公社会受到影响!

TOP

呵呵,我毕业时,大家应该也是老鸟了,何况,现在公社的好手越来越多了;退一步说,就算毕业工作了,有机会我还是回来看看公社的

下面该是好消息了:
今晚本来打算编译2.4.20内核,试试对ps并口手柄的支持有没有改进(也就是改善那个驱动后游戏帧速减小的现象),后来想想,还是对比一下它们关于ps手柄部分的内核源码先,于是先看看rh8自带的源码,ps手柄模块是用gamecon模块驱动的,它的源码是/usr/src/linux-2.4.18-14/drivers/char/joystick/gamecon.c这个文件,大略看了一下,吸引我的是里面有这样一行:
#define GC_PSX_DELAY        60                /* 60 usec */
按字面的意思,应该是定义某个延时的宏的,于是猜想,将这个延时的数值调低会不会加快速度(因为我记得win下某个版本驱动也有一个延时的设置选项,调低时明显游戏速度加快),这个诱惑实在太大了,想想就算不行也没什么损失,大不了改回来,于是一下子将那个60改成30(嘿嘿,够狠吧),保存退出;由于我以前已经编译过内核和相应模块,这次只是改动模块部分而已,应该无需编译整个内核,仅重新编译模块就可以了;于是make dep&&make modules&&make modules_install,重起顺利进入系统后,重新编译nvidia驱动并安装好,startx进入kde,加载手柄驱动模块,运行zsnes这个超任模拟器,加载这几天一直在玩的<天地创造中文版>,开始不觉有何异常,一走到外面的3D大地图时大吃一惊,差点眼镜没丢下来------以前在那个地图走动时,只有21FPS,屏幕一晃一晃的,现在竟然是42FPS,足足提升了20FPS!!!!!!!!差点开心得没晕过去!于是再改,这次从30改成15,按上面的步骤重做一遍后,嘿嘿,42FPS变成了50FPS,又提高了8FPS!!再来,这次是从15改成8,结果50FPS提升为56FPS!!可惜,调到8以下,就无法驱动手柄了!!不过,56FPS的速度已经是绝对绝对可以接受了,就算是win下的相应版本,用win下的手柄驱动,也比这个数值多一点而已!!现在这个驱动可以说是完全可以玩了,余下的靠源码开发者优化代码了.而2.4.20内核,看来也没必要编译了!!

什么是diy精神,这就是diy精神!     
http://llc.linuxsky.org

TOP

果真DIY精神.高啊.^_^

TOP

好贴啊,我正想用手柄呢。只是……图在哪里呢?

TOP

在modprobe pspad时,提示找不到gamecon.o.gz(No Such Device)
明明有的吗,怎么会找不到呢,而且是找不到设备
我以为我的手柄没插的缘故,插好,重启动,这次就更强了,我的usb鼠标失灵啦(灯亮的,说明USB设备驱动已经加载了),问题依旧。
而且,我的Mandrake9,我看看congfigue里,文中所要的步骤,除了要建立几个目录外,其他都已经在安装时就选好了的。
没有在重装中变态,就会在重装中成长 如果你爱她,就给她装LINUX,因为这里是天堂,如果你恨她,就给她装LINUX,因为这里是地狱 本人Email:mikeshi80@163.com

TOP

在2.6.0-test6内核里,PSX_delay的值已经改成25,还没测试改成8的效果
http://llc.linuxsky.org

TOP

由于论坛有bug,导致附件里的photo.zip有问题,处理方法如下:

下载后附件名字应该为photo.zip,用winzip或winrar解开后,可能得到的为photo的文件,自己手动将解出来的photo命名为photo.zip,再用winzip或winrar解压一次即可

不知道论坛为何有这种bug,有时正常,有时又不正常
http://llc.linuxsky.org

TOP

在2.6.x系列内核里,input已经无法编译成模块,只能是内建内核或不编译,因此,只能选择编译进内核
而相应的加载驱动模块的命令也改成

modprobe joydev
modprobe gamecon gc=0,7
modprobe gamecon map=0,7(2.6.6版本及以上,没测试2.6.5)——单个手柄

强烈建议将并口驱动模块编译进内核
http://llc.linuxsky.org

TOP