首页
> 网管技术 >
硬件技术
> 正文
用简单易行的方法单独编译一个声卡驱动模块
作者:kj501 Linux先生 (2005-03-30 11:57:42)
我的LFS原来把声音驱动模块编译进内核心时是有声音的,后来需要安装alsa,把内核中的声音驱动去掉了。结果alsa安装死活不能成功(郁闷。。。),只好恢复到原来的状态。但如果重新编译内核,比较费时费力,首先就想到了用单独编译一个模块的方法,以避免重新编译整个内核。在参考置顶的贴了后,尝试用这种方法编译一个CMI的驱动模块(我的声卡是板载集成的CMI9738)。先进入/usr/src/linux- 2.4.19/drivers/sound目录,然后执行:
gcc -D_KERNEL_-DMODULE -I/usr/src/linux-2.4.19/include -O3 -c cmpci.c
结果出现一堆错误提示,编译以失败告终。
经过分析,认为模块之间存在的依赖关系是造成编译失败的原因。但对于一般人来说,不可能有条件深入了解模块之间的依赖关系。于是,采用另一种方法:修改.config文件。
平时编译内核时,执行的make config,make menuconfig,make xconfig等等所选定的配置,全部保存在/usr/src/linux-xxxx/目录下的.config文件中,打开这个文件,就能看到 CONFIG_XXXX_XXXX=y或者#CONFIG_XXXX_XXXX is not set的字样。找到#CONFIG_SOUND_CMPCI is not set这一行,改为
CONFIG_SOUND_CMPCI=m
其中m的意思就是编译成模块。然后把其它所有的CONFIG_XXXX_XXXX=m全部注释掉。接着在/usr/src/linux-2.4.19目录下直接执行make modules,仅仅几秒钟,编译就完成了,很快吧。但千万不能接着执行make modules_install,它会把系统中现有的模块删除,只安装新编译的模块。此时应该进入/usr/src/linux- 2.4.19/drivers/sound/目录,找到编译好的cmpci.o文件,将其复制到 /lib/modules/2.4.20/kernel/drivers/sound/目录下,执行depmod后,用modprobe cmpci把模块插入内核。再用lsmod命令就可以看到cmpci已经被插入内核了。应该说到此为止模块的编译是成功的,但我的声卡还是不能发出声音(再次郁闷。。。),后来改成i810和ac97的驱动,才发出了声音,至于编译的方法和前面所说的一样,也是修改.config,make modules就行了。在实际操作中还发现一个问题,普通用户不能打开/dev/dsp设备文件,用ls -l /dev/dsp查看,发现权限没有问题,再仔细看看,发现这个/dev/dsp是一个到/dev/dsp0的链接,而/dev/dsp0的权限只能 root使用,chmod 777 /dev/dsp0后,一切正常。看来如果/dev/dsp是链接的话,仅仅修改它的权限是不能解决问题的,必须修改真正使用的设备文件权限才起作用。
采用这种方法单独编译一个模块,好处在于不需要考虑模块之间的依赖关系,简单易行,只要编译过一次内核,以后修改.config就可以随时加入所需要的功能。仅仅为增加一个一个功能而重新编译整个内核是不值得的,建议大家不妨采用这种方法。
(http://www.fanqiang.com)
相关文章
Soundblaster 16 PnP Mini-Howto 如何在Linux设定16位PnP声卡
 2001-04-27 17:03:47
Sound Blaster AWE 32/64 HOWTO 如何在Linux设定声卡
 2001-04-27 17:06:31
Open Sound System:Unix声卡驱动的一揽子解决方案
 2001-08-29 09:00:01
FreeBSD handbook中文版 14 声卡
 2003-01-20 06:02:00
Fedora下声卡驱动全功略(入门篇)
 2005-03-30 11:55:31
★ 感谢所有的作者为我们学习技术知识提供了一条捷径 ★
www.fanqiang.com