新闻  |   论坛  |   博客  |   在线研讨会
用简单易行的方法单独编译一个声卡驱动模块
xwaixwz | 2008-03-12 14:41:48    阅读:1210   发布文章

  我的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就可以随时加入所需要的功能。仅仅为增加一个一个功能而重新编译整个内核是不值得的,建议大家不妨采用这种方法。 
本文转自:
维库电子

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客