读书人

FS_S5PC100之madplay移栽

发布时间: 2012-11-12 12:31:57 作者: rapoo

FS_S5PC100之madplay移植

FS_S5PC100平台

内核2.6.35

交叉编译器 arm-none-linux-gnueabi-gcc-4.5.1

一.驱动的添加

1.FS_S5PC100平台上WM9714 ALSA 移植:

这个驱动在内核中支持,我们只需要进行简单的配置就行了,配置如下:

修改 sound/soc/s3c24xx/Kconfig,使其支持FS_S5PC100平台

FS_S5PC100之madplay移栽

FS_S5PC100之madplay移栽

2.修改平台代码

(1)修改sound/soc/s3c24xx/s3c-ac97.c

添加如下内容:

static int s3c_ac97_hifi_prepare(struct snd_pcm_substream *substream,

struct snd_soc_dai *dai)

{

printk("%s %s: %d\n",__FILE__, __func__, __LINE__);

s3c_ac97_write(0,0x26,0x0);

s3c_ac97_write(0, 0x0c, 0x0808);

s3c_ac97_write(0,0x3c, 0xf803);

s3c_ac97_write(0,0x3e,0xb990);

if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {

s3c_ac97_write(0,0x02, 0x0404);

s3c_ac97_write(0, 0x04, 0x0606);

s3c_ac97_write(0,0x1c, 0x12aa);

}

else

{

s3c_ac97_write(0, 0x12, 0x0f0f);

#ifdef CONFIG_SOUND_WM9713_INPUT_STREAM_MIC

s3c_ac97_write(0,0x5c,0x2);

s3c_ac97_write(0,0x10,0x68);

s3c_ac97_write(0,0x14,0xfe00);

#else /* Input Stream is LINE-IN */

s3c_ac97_write(0, 0x14, 0xd612);

#endif

}

return 0;

}

(2)修改

static struct snd_soc_dai_ops s3c_ac97_dai_ops = {

.hw_params = s3c_ac97_hw_params,

.trigger = s3c_ac97_trigger,

};

为:

static struct snd_soc_dai_ops s3c_ac97_dai_ops = {

.hw_params = s3c_ac97_hw_params,

.trigger = s3c_ac97_trigger,

.prepare = s3c_ac97_hifi_prepare,

};

(3)修改arch/arm/plat-samsung/s3c-pl330.c

添加头文件

#include <linux/clk.h>

#include <linux/err.h>

(4)在1037行添加

struct clk *clk;

在1040行添加

clk = clk_get(&pdev->dev, "pdma");

if (IS_ERR(clk)) {

printk("cannot get adc clock source\n");

}

clk_enable(clk);

(5)修改arch/arm/mach-s5pc100/dma.c

修改 static struct platform_device s5pc100_device_pdma0中

.id = 1,

为:

.id = 0,

修改static struct platform_device s5pc100_device_pdma1中

.id = 2,

.id = 1,

(6)配置内核

$ 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 AC97 Audio support for SMDK with WM9713

<*> Build all ASoC CODEC drivers

重新编译内核

$ 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

.

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

Setsid madplay sun.mp3 后台执行

读书人网 >移动开发

热点推荐