这两天想用C++写个小程序,通过调用程序播放MP3音乐文件,当然被调用的程序非madplay了,可是但编译好后,如运行:./madplay chenyu.mp3 按理说,这是可以播放的,可是,却出现了 在/dev/dsp No such file or directory,原来ubuntu自带的内核里没有声卡的支持,只好把它的内核从新编译了,我在网上发现了一个很好的教程,现在引用到此,以便日后查用,也为了方便大家的学习,在此向作者表示崇拜。
当然,这个过程中可能会出现一些问题,如果是在虚拟机里做的话,为了不破坏你的原有系统,我还是建议你把当前的系统做个备份,怎么样备份我就不说了,可以看虚拟机的使用。
Ubuntu 11.10的 内核版本是3.0.0.可以使用命令 uname -r 查看下。
1,安装所需软件包
sudo apt-get install kernel-wedge kernel-package libncurses5-dev
在这里我注释一下:红 {MOD}的那个是为了执行make menuconfig 所要用到的
2,运行命令
sudo apt-get build-dep --no-install-recommends linux-image-$(uname -r)
3,创建源目录
mkdir ~/src
cd ~/src
4,下载内核源码
apt-get source linux-image-$(uname -r)
5,配置内核
cd linux-3.0.0
make menuconfig
在这里你可以配置内核,你可以对它进行裁剪,我这里是要让其支持声卡,应该这样选:
Device Drivers --->
<*> Sound card support --->
<*> Advanced Linux Sound Architecture --->
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
注释:在这里讲一下,什么是OSS,OSS就是OSS(Open Sound System,开放声音系统)的简称,现在ubuntu用的还是OSS (我之前用的是红帽的企业版5,那里面不用这个,用的是ALSA)
还有就是,声卡中主要有两个基本装置:Mixer和CODEC(ADC/DAC)。Mixer用来控制输入音量的大小,对应的设备文件为/dev/mixer;CODEC用来实现录音(模拟信号转变为数字信号)和播放声音(数字信号转变为模拟信号)的功能,对应的设备文件为/dev/dsp。
6,加速构建
export CONCURRENCY_LEVEL=3
提示,通常是CONCURRENCY_LEVEL=处理器数目+1
7,若是原先编译过内核,现在清理下temp文件夹
make-kpkg clean
8,编译内核
time fakeroot make-kpkg --initrd --append-to-version=-chenyu kernel-image kernel-headers
提示,这里-chenyu,可以修改成你自己喜欢的名称
9,安装内核
cd ~/src
sudo dpkg -i linux-image-3.0.0.30-chenyu_3.0.0.30-chenyu-10.00.Custom_amd64.deb
sudo dpkg -i linux-headers-3.0.0.30-chenyu_3.0.0.30-chenyu-10.00.Custom_amd64.deb
10,重启下,看看是否成功,
后记。经过上述步骤后,在~/src目录下就有了一个linux-3.0.0,以后你要是还要加入什么模块,直接对他进行裁剪就可以了,不过,在make menuconfig 之前要加 sudo,不然是无法执行的,会报错的。