1,编译编译环境:arm-linux-gcc v4.4.3
2,开发板:FL2440,256M nand flash。
3,u-boot版本:u-boot-2011.09
4,linux 版本:linux-3.0
1】在初始化文件中加入UDA1341 , samsung_asoc_dma结构。(红色为添加内容)
#include <linux/dm9000.h>
//添加SD 卡设备结构所需的头文件
#include <linux/mmc/host.h>
#include <plat/mci.h>
//添加声卡头文件
#include <sound/s3c24xx_uda134x.h>
static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {
.l3_clk = S3C2410_GPB(4),
.l3_data = S3C2410_GPB(3),
.l3_mode = S3C2410_GPB(2),
.model = UDA134X_UDA1341,
};
static struct platform_device s3c24xx_uda134x = {
.name = "s3c24xx_uda134x",
.dev = {
.platform_data = &s3c24xx_uda134x_data,
}
};
static struct platform_device uda1340_codec = {
.name = "uda134x-codec",
.id = -1,
};
static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_ohci,
&s3c_device_lcd,
&s3c_device_rtc,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_adc,
&s3c_device_ts,
&s3c_device_adcdev,
&s3c_device_iis,
&s3c_device_dm9000,
&uda1340_codec,
&s3c24xx_uda134x,
&samsung_asoc_dma,
};
这样,我们基本就添加好了 UDA1341 音频设备的驱动。
【2】在内核中配置UDA1341 设备驱动
在终端中进入到内核源码根目录下执行make menuconfig
Device Drivers --->
<*> Sound card support --->
[*] Preclaim OSS device numbers
<*> Advanced Linux Sound Architecture --->
< > Sequencer support
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
[*] Dynamic device file minor numbers
[ ] Support old ALSA API
[*] Verbose procfs contents
<*> ALSA for SoC audio support --->
-*- SoC I2S Audio support UDA134X wired to a S3C24XX
【3】重新编译内核并测试
烧到fl2440板子上启动内核打印如何下说明UDA1341音频驱动添加成功了:
s3c-sdi s3c2440-sdi: mmc0 - using pio, sw SDIO IRQ
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
S3C24XX_UDA134X SoC Audio driver
UDA134X SoC Audio Codec
asoc: uda134x-hifi <-> s3c24xx-iis mapping ok
ALSA device list:
#0: S3C24XX_UDA134X
Netfilter messages via NETLINK v0.30.
nf_conntrack version 0.5.0 (928 buckets, 3712 max)
执行如下命令显示:
->cat /proc/devices
Character devices:
... ...
10 misc
13 input
14 sound
29 fb
3]madplay 移植播放mp3音乐
所需源码包:madplay-0.15.2b.tar.gz,libmad-0.15.1b.tar.gz,libid3tag-0.15.1b.tar.gz 和 zlib-1.1.4.tar.gz
1新建目录并上传源码包到madplay 目录并解压:
[liuchengdeng@centos6 ~]$ mkdir madplay
[liuchengdeng@centos6 ~]$ mkdir madplay/mad
[liuchengdeng@centos6 madplay]$ ls
mad [liuchengdeng@centos6 madplay]$ ls
mad madplay-0.15.2b.tar.gz,libmad-0.15.1b.tar.gz,libid3tag-0.15.1b.tar.gz 和 zlib-1.1.4.tar.gz
修改以下三项:
CC=gcc 修改为CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
AR=ar rc 修改为AR=a/opt/buildroot-2012.08/arm920t/usr/bin/rm-linux-ar rc
RANLIB=ranlib 修改为RANLIB=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ranlib
(3)编译make
(4)安装make install
3: 编译libid3tag-0.15.1b
进入到libid3tag-0.15.1b
1)运行以下命令
./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib --host=arm-linux --prefix=/home/liuchengdeng/madplay/mad --disable-shared CPPFLAGS=-I/home/liuchengdeng/madplay/mad/include/ LDFLAGS=-L/home/liuchengdeng/madplay/mad/lib
2)编译:make
3)安装:make install
4: 编译libmad-0.15.1b
进入到libmad-0.15.1b 路径:
1)运行以下命令
./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib --host=arm-linux --prefix=/home/liuchengdeng/madplay/mad --disable-shared CPPFLAGS=-I/home/liuchengdeng/madplay/mad/include/ LDFLAGS=-L/home/liuchengdeng/madplay/mad/lib
2)编译:make
3)安装:make install
5。编译madplay:进入madplay-0.15.2b
1)执行如下命令:
/configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib --host=arm-linux --prefix=/home/liuchengdeng/madplay/mad --disable-shared --enable-static --disable-nls CPPFLAGS=-I/home/liuchengdeng/madplay/mad/include/ LDFLAGS=-L/home/zhao/madplay/mad/lib
2)编译:make
3)安装:make install
如此就会看到当前目录有个madplay,这样生成的madplay最终是动态编译的.
注意了:为了静态编译,make之后输出的最后的编译命令复制一下,最后加上-static,执行如下命令:
/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -Wall -g -O2 -o madplay madplay.o getopt.o getopt1.o version.o resample.o filter.o tag.o crc.o rgain.o player.o audio.o audio_aiff.o audio_cdda.o audio_hex.o audio_null.o audio_raw.o audio_snd.o audio_wave.o audio_oss.o -L/home/liuchengdeng/madplay/mad/lib /home/liuchengdeng/madplay/mad/lib/libmad.a /madplay/mad/lib/libid3tag.a -lz -lm -static
(如果此命令不能编译成功,就把madplay下载到开发板上,然后在把所有需要的动态库下载到文件系统的lib目录下 。arm-linux-readelf -d madplay可以查看madplay需要哪些动态库)
在将当前目录下的madplay通过TFTP下载到开发板上,然后下载一个mp3格式的音频文件到开发板,执行:
./madplay xxx.mp3