原文地址 http://blog.csdn.net/west_609/archive/2007/10/17/1828437.aspx
由原文修改而来
FS2410平台samsu2410
内核2.6.35.9
交叉编译器 arm-none-linux-gnueabi-gcc-4.3.2
Uda驱动:
修改平台代码
修改arch/arm/mach-s3c2410/mach-smdk2410.c添加如下内容
#include <sound/s3c24xx_uda134x.h>
#include <mach/regs-gpio.h>
//audio UDA1341
static struct s3c24xx_uda134x_platform_data smdk2410_audio_pins = {
.l3_clk = S3C2410_GPB(4),
.l3_mode = S3C2410_GPB(2),
.l3_data = S3C2410_GPB(3),
.model = UDA134X_UDA1341
};
static struct platform_device s3c_device_audio = {
.name = "s3c24xx_uda134x",
.id = 0,
.dev = {
.platform_data = &smdk2410_audio_pins,
},
};
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_ohci,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_adc,
&s3c_device_ts,
&s3c_device_audio, //添加内容
};
配置内核
$ 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
[*] Support old ALSA API
[*] Verbose procfs contents
[*] Verbose printk
<*> ALSA for SoC audio support --->
<*> SoC Audio for the Samsung S3CXXXX chips
-*- SoC I2S Audio support UDA134X wired to a S3C24XX
重新编译内核
$ make zImage
$ cp arch/arm/boot/zImage /tftpboot
测试
系统启动以后会在dev目录下产生dsp设备节点
文件系统没有支持udev或mdev的话就必须进行下面步骤
建立块专用或字符专用文件
mknod /dev/dsp c 14 3
mknod /dev/mixer c 14 0
注:
/dev/dsp 数字信号处理(DSP):DSP是指声卡中专门处理效果的芯片,称为效果器,对提高声卡性能很有用
/dev/mixer 混音器混音器是一台控制音频信号的提升,并将音频信号导向所指目的地的设备
cat test.wav>/dev/dsp 如果驱动移植成功,这时可以听到杂音
复制一个madplay音频播放程序,可以用来播放mp3
播放器的移植
现在有很多的播放器可以移植到arm9上,你mplayer,madplay等。但发现移植mplayer时 遇到了一个很致命的文件错误,怎么也解决不了,<<mplayer在2410上的移植.pdf>>中也没有相关的方法,我只好暂时耽下,换了 另外一个播放器madplay.
1. 移植madplay前的准备。
madplay的移植需要以下的几个包:madplay-0.15.2b.tar.gz,libmad-0.15.1b.tar.gz,
libid3tag-0.15.1b.tar.gz 和 zlib-1.1.4.tar.gz。其中前面的三个包可以在http://sourceforge.net/project/showfiles.php?group_id=12349下载,后一个包可以在http://www.gzip.org/zlib/zlib-1.1.4.tar.gz中找到。
为了编译这个播放器,还需要一个交叉编译器,gcc version 4.3.2 (crosstool-NG-1.8.1-none)
2. 开始编译
2.1. 用交叉编译工具编译zlib,并且把库生成到交叉编译环境的库目录下,我把它放到/home/toolchain/arm-none-linux-gnueabi目录 下。--prefix=/home/toolchain/arm-none-linux-gnueabi。
再修改(不能跟上面的步骤调转)makefile文件:
CC=arm-none-linux-gnueabi-gcc
AR=arm-none-linux-gnueabi-ar rcs
RANLIB=arm-none-linux-gnueabi-ranlib
make ,make install ,编译好之后就可以在上面prefix指定的目录下的lib目录下找到libz.a这个库。
2.2. 编译libid3tag
../configure CC=arm-none-linux-gnueabi-gcc --prefix=/home/toolchain/arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/home/toolchain/arm-none-linux-gnueabi/include LDFLAGS=-L/home/toolchain/arm-none-linux-gnueabi/lib
其中,--disable-shared --enable-static是指定为静态编译。不过我发现这样并不能够进行编译。至于如何进行表态编译,我将在下面中进行介绍。
make, make install
2.3. 编译libmad
./configure CC=arm-none-linux-gnueabi-gcc --prefix=/home/toolchain/arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/home/toolchain/arm-none-linux-gnueabi/include LDFLAGS=-L/home/toolchain/arm-none-linux-gnueabi/lib
然后,make ,make install
报错:cc1: error: unrecognized command line option “-fforce-mem”
解决方式:找到libmad configure之后的Makefile,
vi Makefile
找到包含"-fforce-mem"字符串,将其删除,就ok了
2.4. 编译madplay
./configure ./configure CC=arm-none-linux-gnueabi-gcc --prefix=/home/toolchain/arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/home/toolchain/arm-none-linux-gnueabi/include LDFLAGS=-L/home/toolchain/arm-none-linux-gnueabi/lib
然后,make
编译完成后,查看了一下madplay这个可执行文件就把它下载到板子中,敲入:
$> ./madplay pig.mp3