当前位置:编程学习 > 网站相关 >>

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平台



 
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;
 
在1079行添加
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
 
二.播放器的移植
 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
Setsid madplay

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,