LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3459|回复: 14

[==LFS精华系列==]另类内核编译

[复制链接]
发表于 2003-3-18 09:37:36 | 显示全部楼层 |阅读模式
我的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就可以随时加入所需要的功能。仅仅为增加一个一个功能而重新编译整个内核是不值得的,建议大家不妨采用这种方法。
发表于 2003-3-18 09:56:46 | 显示全部楼层
呵呵,应该作一个脚本来作这个事情,就是把一个加m,其他都去掉。
发表于 2003-3-18 11:16:32 | 显示全部楼层

Gentoo

gentoo-alsa有....

alsa是内核的一部分,在2.6会包含进去
发表于 2003-3-18 12:37:34 | 显示全部楼层
make menuconfig
make dep
make clean
make modules SUBDIRS=drivers/sound
 楼主| 发表于 2003-3-19 08:39:15 | 显示全部楼层
penny兄的方法不错,我昨天试过了,很好用。
发表于 2003-3-20 01:19:35 | 显示全部楼层
  1. cat .config | sed -e 's/^\(.*\)=m/# \1 is not set/' > .config.new
  2. mv -i .config .config.orig
  3. mv .config.new .config
复制代码

This will turn off all modules without changing the kernel. Then go in
with "make menuconfig" and turn on the module you wish to build.
发表于 2003-10-27 17:29:52 | 显示全部楼层
都是高手哇,好好向你们学习!
发表于 2003-10-27 17:30:54 | 显示全部楼层
2.6.0内核里有alsa支持,是否意味着不用安装alsa软件包??
发表于 2003-10-27 17:36:32 | 显示全部楼层
是啊
发表于 2003-11-3 09:42:11 | 显示全部楼层
谢谢qing!美女吗?呵呵!似乎不是吧?哈!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表