Ubuntu12.04で/dev/dspを使えるようにする

Ubuntu12.04で/dev/dspを使えるようにします。/dev/dspはUbuntu10.10以降のカーネルでデフォルトだと無効になっているので、カーネルをビルドし直します。

手順

ビルドに必要なものをインストール

$ sudo apt-get install build-essential
$ sudo apt-get install kernel-package
$ sudo apt-get install libncurses5-dev


linuxのソースをダウンロード

$ apt-cache search linux-source
linux-source - Linux kernel source with Ubuntu patches
linux-source-3.2.0 - Linux kernel source for version 3.2.0 with Ubuntu patches
$ sudo apt-get install linux-source-3.2.0

/usr/src/linux-source-3.2.0.tar.bz2 にダウンロードされます。


ソースコードを展開する

$ sudo su - 
# cd /usr/src/
# tar xf linux-source-3.2.0.tar.bz2
# ls
linux-headers-3.2.0-23  linux-headers-3.2.0-23-generic  linux-headers-3.2.0-24
linux-headers-3.2.0-24-generic  linux-source-3.2.0  linux-source-3.2.0.tar.bz2
# cd linux-source-3.2.0/


現在のビルドの設定を反映させる

# cp /boot/config-3.2.0-24-generic .config
# make oldconfig


/dev/dspを使えるように設定を変更する

# make menuconfig

configのメニューが開くので、「Device Drivers」->「Sound card support」->「Advanced Linux Sound Architecture」と進み、
・OSS PCM (digital audio) API - Include plugin system
・OSS Sequencer API
にチェックを入れます。


Makefileを編集してカーネルのバージョンに名前をつける

# vim Makefile
// 4行目を変更
EXTRAVERSION = -24-generic.devdsp

カーネルのバージョンは3.2.xx{EXTRAVERSION}になります。僕の環境だと3.2.16-24-generic.devdspになりました。


カーネルをビルドする

# CONCURRENCY_LEVEL=2 make-kpkg --revision=1 --initrd kernel-image

CONCURRENCY_LEVELは並列でビルドするときのコア数です。ビルドが完了すると/usr/srcにパッケージファイルが作成されます。


カーネルのインストール

# cd ../
# ls
linux-headers-3.2.0-23          linux-headers-3.2.0-24          linux-image-3.2.16-24-generic.devdsp_1_amd64.deb
linux-source-3.2.0.tar.bz2      linux-headers-3.2.0-23-generic  linux-headers-3.2.0-24-generic  linux-source-3.2.0
# dpkg -i linux-image-3.2.16-24-generic.devdsp_1_amd64.deb

インストール後に再起動します。


これで/dev/dspはデバイスとして有効になっているはずですが、デバイスドライバがないためか、使おうとするとbusy状態で使えませんとエラーが出ます。
デバイスドライバのインストール

$ sudo apt-get install alsa-oss


試しに使ってみる

$ echo 1 > /dev/dsp