dicro 发表于 2005-3-30 17:13:39

新手(为了玩ps手柄)编译模块,在模块检测时出错,求教.

我照着坛子里的贴子和自己的一点想法
自己编译手柄驱动模块gamecon.c

编译时把模块支持加入内核
# Loadable module support ->
Set version information on all module symbols
(1)当此项设置为y时编译后的文件无法加载(好像是版本效验错误,且不支持加载)
在重新启动时模块检测时会出错.
(2)当此项设置为n时编译后的文件可以加载(好像是版本效验错误,但可以加载,也可以用),
在重新启动时模块检测时也会出错.

请问:
用什么方法能编译出符合版本效验的模块?


以下是我编译时的简略过程和出错信息
编译时为了能加载改了Makefile里的版本号
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 20
#EXTRAVERSION = -8custom
EXTRAVERSION = -8

# make mrproper

# touch .config

# make config
# Loadable module support ->
Enable loadable module support y
Set version information on all module symbols y
kernel module loader y
... ...

# make dep

# make modules

覆盖原来的模块完成安装(这里我仅仅只编译了模块)

加载时出错
# modprobe gamecon gc=0,7,7,7,7,7
/lib/modules/2.4.20-8/kernel/drivers/char/joystick/gamecon.o: unresolved symbol
parport_unregister_device_R76e8567d
/lib/modules/2.4.20-8/kernel/drivers/char/joystick/gamecon.o: unresolved symbol
parport_enumerate_Rb019f67c
/lib/modules/2.4.20-8/kernel/drivers/char/joystick/gamecon.o: unresolved symbol
parport_register_device_Rf6150a17
/lib/modules/2.4.20-8/kernel/drivers/char/joystick/gamecon.o: unresolved symbol
parport_release_Re630d383
/lib/modules/2.4.20-8/kernel/drivers/char/joystick/gamecon.o: unresolved symbol
parport_claim_R91004644
/lib/modules/2.4.20-8/kernel/drivers/char/joystick/gamecon.o: insmod /lib/modules/2.4.20-8/kernel/drivers/char/joystick/gamecon.o failed
/lib/modules/2.4.20-8/kernel/drivers/char/joystick/gamecon.o: insmod gamecon failed

dicro 发表于 2005-4-2 00:35:51

哈,可能是问题我未表述清楚.

我想问的是:

在打开其 内核模块版本效验(# Loadable module support -> Set version information on all module symbols) 功能后
除了在编译内核时就连带编译出能通过其内核版本效验的模块,这个方法之外.
还有什么其他方法没有?

比如想增加模块或修改模块,但是又不想去重新编译内核.
我只是想让自己新编译的模块能通过 内核模块版本效验 这个功能的效验,并且不会产生冲突.

我是新手,好多东西都搞不懂,望各位多帮忙赐教,我先谢谢大家了.

dicro 发表于 2005-4-3 00:20:17

只有我来回贴?看来自己的问题还是自己最清楚了.(搞笑?)

google先然后摘录一段:

> ``Device busy'' 或 ``unresolved symbols''

> 您可能在 2.0.x 版核心中将音效卡支援编进核心内, 或是已载入 OSS/Lite(核心的)驱动程式(可用cat /proc/modules来检查). 移除该驱动程式或重新编译核心(请看 Kernel-HOWTO 後动手).

>在 2.0 版核心中的音效模组叫做 "sound.o", 不应该被启用. (虽然 ALSA 的驱动程式 "snd.o" 可以.)

> 如果您的核心是 2.2.x 版, 而没有将音效支援编译进去, ALSA 驱动程式也会无法作用.

> 我也知道这两种不同的状况令人困扰, 所以我在此再作一次解释. 如果您用的是 2.0.x版核心 ("uname -a"命令传回像 "Linux penguin 2.0.35 #6 Wed Sep 23 10:19:16 CEST 1998 i686 unknown") 那麽您必须将音效驱动程式剔除掉.

> 如果您的核心是 2.2.x版核心, 那麽您需要音效驱动程式. 2.2.x 版核心应该将音效驱动程式编译进核心, 但不加入任何音效卡的支援. 因此您要选音效支援, 但也确定不要加入任何音效卡驱动程式.

 
> 又见 Unresolved symbols

> 另一个造成 "unresolved symbols" 讯息的原因可能是新版核心配合旧版驱动程式. 请在重新编译核心之後别忘了也重新编译 ALSA 驱动程式. 如此才可以确定驱动程式能配上您的新核心.

这就是我理解的出错信息的解释,摘录自Alsa-sound-mini-HOWTO
页: [1]
查看完整版本: 新手(为了玩ps手柄)编译模块,在模块检测时出错,求教.