FS_S5PC100之madplay移植

本文介绍了FS_S5PC100平台上的ALSA驱动配置过程,包括修改内核代码以支持WM9714音频芯片,以及madplay音频播放器的移植步骤,涉及交叉编译环境搭建与多个依赖库的编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FS_S5PC100平台

内核2.6.35

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

.驱动的添加

1.FS_S5PC100平台上WM9714 ALSA 移植

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

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

 

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设备节点

文件系统没有支持udevmdev的话就必须进行下面步骤

建立块专用或字符专用文件

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

 

.播放器的移植
 1.
移植madplay前的准备。
 madplay
的移植需要以下的几个包:madplay-0.15.2b.tar.gzlibmad-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

Setsid madplay sun.mp3    后台执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值