===================================================

主机操作系统:Centos 6.7 
交叉编译器环境:arm-linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询)
开发板平台: fl2440 
Linux内核版本: linux-3.0 .54

===================================================================
一. S3C2440 与 UDA1341 接口硬件描述
      下图为FL2440开发板 IIS Interface原理图, S3C2440 处理器内置了 IIS 总线接口,S3C2440 的 IIS 总线时钟信号 SCK 与 Philips 公司的 UDA1341 的 BCK 连接,字段选择连接于 WS 引脚。UDA1341 提供两个音频通道,分别用于输入和输出,对应的引脚连接:IIS 总线的音频输出 IISSDO 对应于 UDA1341 的音频输入,IIS 总线的音频输入 IISSDI 对应于UDA1341 的音频输出。
      UDA1341 的 L3 接口相当于一个混音器控制接口,可以用来控制输入/输出音频信号的音量大小、低音等。L3 接口的引脚 L3MODE、L3DATA、L3CLOCK 分别连接到 S3C2440 的 3 个 GPIO 来控制。
Linux设备驱动之udal341声卡驱动与madplay播放器移植
ALSA (Advanced Linux Sound Architecture) 是在 Linux 下进行音频编程时一种可供选择的声卡驱动体系结构。它 支持多种声卡设备, 具有更加友好的编程接口,并且完全兼容于 OSS。
OSSOpen Sound System)是Linux平台上一个统一的音频接口即只要音频处理应用程序按照OSSAPI来编写,那么在移植到另外一个平台时,只需要重新编译即可。值得注意的是OSS只是部分开源。无论是选择ALSA还是OSS都是为了一个目的:将声卡抽象为一个统一的设备供linux程序员使用。我们测试选用的OSS系列。
二.修改配置文件
Linux-3.0 已经完美的支持UDA1341音频芯片的驱动, 我们只要在arch/arm/mach-s3c2440/mach-smdk2440.c 文件中注册UDA1341 平台设备的控制端口就可以了
Linux设备驱动之udal341声卡驱动与madplay播放器移植
(1)添加头文件
Linux设备驱动之udal341声卡驱动与madplay播放器移植
(2)添加相关设备结构体
Linux设备驱动之udal341声卡驱动与madplay播放器移植
(3)将设备结构体加入主设备结构体
Linux设备驱动之udal341声卡驱动与madplay播放器移植
注意:上述添加的各类结构体均要放在添加设备的devices[ ]结构体数组之前,否则会出现未定义,以及定义了没使用等错误。因为编译器是按顺序编译,所以声明必须放在结构体或者函数之前。
三.make menuconfig选项
Device Drivers  --->
 <*> Sound card support  --->
    [*]   Preclaim OSS device numbers   
    <*>   Advanced Linux Sound Architecture  --->
         --- 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                                                    | |
  | |           [ ]   Verbose printk                                                             | |
  | |           [ ]   Debug                                                                      | |
  | |           [ ]   Generic sound devices  --->                                                | |
  | |           [ ]   ARM sound devices  --->                                                    | |
  | |           [ ]   SPI sound devices  --->                                                    | |
  | |           [*]   USB sound devices  --->
        <*>   ALSA for SoC audio support  --->
            |           --- ALSA for SoC audio support                                                   | |
  | |               [ ]   Support LZO compression for register caches                                | |
  | |               <*>   ASoC support for Samsung                                                   | |
  | |               < >   SoC AC97 Audio support for LN2440SBC - ALC650                              | |
  | |               <*>   SoC I2S Audio support UDA134X wired to a S3C24XX                           | |
  | |               < >   SoC I2S Audio support for TLV320AIC23 on Simtec boards                     | |
  | |               < >   SoC I2S Audio support for Simtec Hermes board                              | |
  | |               < >   Build all ASoC CODEC drivers                                               | |
  | |                                                                         
重新编译,烧录开发板,启动过程中打印如下信息则表示添加驱动成功
Linux设备驱动之udal341声卡驱动与madplay播放器移植
四.mdplay移植和播放MP3音乐
移植第三方程序的主要步骤分别为:解压缩、配置(./configure)、编译(make)、安装(make install)
1.下载源码包 
madplay-0.15.2b.tar.gz         //播放程序的压缩包,MP3播放器的源码,下载地址 https://sourceforge.NET/projects/mad/files/
libmad-0.15.1b.tar.gz           //madplay的库文件 ,下载地址 https://sourceforge.Net/projects/mad/files/libmad/0.15.1b/libmad-0.15.1b.tar.gz/download?use_mirror=jaist
libid3tag-0.15.1b.tar.gz        //mp3的解码库,下载地址http://download.csdn.net/detail/qin1174586290/6364763
zlib-1.1.4.tar.gz                   //用于文件的压缩与解压,下载地址http://zlib.net/fossils/
[[email protected] 3rdparty]$ cd
[[email protected] ~]$ cd fl2440/3rdparty/
[[email protected] 3rdparty]$ mkdir uda1341
[[email protected] 3rdparty]$ cd uda1341/
[[email protected] uda1341]$ mkdir install
将上述源码包下载到uda1341文件夹下,用tar -xzf 指令解压(由于是.tar.gz格式)
Linux设备驱动之udal341声卡驱动与madplay播放器移植
一般源码包解压缩之后,若已经存在Makefile则可以直接make编译;但大多数情况下需要使用源码包目录下的./configure脚本来配置源码包生成Makefile文件;
以下几个配置参数:
 --host:   用于指定平台;如: --host==arm-linux
--prefix: 用于指定文件的安装路径;   如:--prefix=/home/weiming/fl2440/3rdparty/uda1341/install
-I : 指定头文件的路径;  如:-I/home/weiming/fl2440/3rdparty/uda1341/install/include
-L : 指定库文件的路径;如:-L
/home/weiming/fl2440/3rdparty/uda1341/install/lib--disable-shared      使用静态库编译
LDFLAGS:告诉链接器从哪里寻找库文件
CPPFLAGS 是编译选项,同自己用的编译器有关 可以 用于 C 和 C++ 两者预编处理
如果是要编译到arm板子上跑则在make的时候还需要加上AR(将.o文件打包生成.a的静态库文件)=   LD(所链接)=     CC(交叉编译器)=   RANLIB(随机库创建器)       AS(汇编器)=    NM(库查看工具)
2.配置,编译

注:

四次编译存在依赖关系,顺序不能乱。并且每次都应用sudo权限。
(一)zlib-1.1.4:
(1)配置configure文件,生成Makefile
[[email protected] uda1341]$ cd zlib-1.1.4
[[email protected] zlib-1.1.4]$  sudo ./configure --prefix=/home/weiming/fl2440/3rdparty/uda1341/install
Linux设备驱动之udal341声卡驱动与madplay播放器移植
(2)修改Makefile:
[[email protected] zlib-1.1.4]$vim Makefile
Linux设备驱动之udal341声卡驱动与madplay播放器移植
Linux设备驱动之udal341声卡驱动与madplay播放器移植
(3)编译make
[[email protected] zlib-1.1.4]$sudo make
(4)安装make install 
[[email protected] zlib-1.1.4]$sudo make install
Linux设备驱动之udal341声卡驱动与madplay播放器移植
(二)libid3tag-0.15.1b
[[email protected] uda1341]$ cd libid3tag-0.15.1b
[[email protected] libid3tag-0.15.1b]$ sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/weiming/fl2440/3rdparty/uda1341/install  CPPFLAGS=-I/home/weiming/fl2440/3rdparty/uda1341/install/include/ LDFLAGS=-L/home/weiming/fl2440/3rdparty/uda1341/install/lib  
Linux设备驱动之udal341声卡驱动与madplay播放器移植
[[email protected] libid3tag-0.15.1b]$sudo make
[[email protected] libid3tag-0.15.1b]$sudo make install
(三)libmad-0.15.1b:
[[email protected] uda1341]$ cd libmad-0.15.1b
[[email protected] libmad-0.15.1b]$sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/weiming/fl2440/3rdparty/uda1341/install  CPPFLAGS=-I/home/weiming/fl2440/3rdparty/uda1341/install/include/ LDFLAGS=-L/home/weiming/fl2440/3rdparty/uda1341/install/lib
[[email protected] libmad-0.15.1b]$sudo make
如出现以下错误:
Linux设备驱动之udal341声卡驱动与madplay播放器移植
解决方法:找到libmad configure之后的Makefile,删除 -fforce-mem原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误。
Linux设备驱动之udal341声卡驱动与madplay播放器移植
删除后再执行一次sudo make
[[email protected] libmad-0.15.1b]$sudo make
[[email protected] libmad-0.15.1b]$sudo make install
(四)madplay-0.15.2b
[[email protected] uda1341]$ cd madplay-0.15.2b
[[email protected] madplay-0.15.2b]$sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/weiming/fl2440/3rdparty/uda1341/install  CPPFLAGS=-I/home/weiming/fl2440/3rdparty/uda1341/install/include/ LDFLAGS=-L/home/weiming/fl2440/3rdparty/uda1341/install/lib
[[email protected] madplay-0.15.2b]$ sudo make  
make成功生成madplay可执行程序.因为自己使用的静态编译(--disable-shared),可不用再make install
make以后我们会发现生成了可执行文件madplay,这就是我们要下载到开发板上的文件:
Linux设备驱动之udal341声卡驱动与madplay播放器移植
五.开发板测试
Linux设备驱动之udal341声卡驱动与madplay播放器移植
插上耳机就能听到音乐了,通过按键盘的减号可以减小音量,shift+可以增大音量,shift-瞬间恢复满音量,s键停止。
到此,声卡驱动和播放器移植成功完成了。
Linux设备驱动之udal341声卡驱动与madplay播放器移植



相关文章:

  • 2018-03-16
  • 2021-12-14
  • 2021-12-14
  • 2021-12-24
  • 2021-10-26
  • 2022-02-19
  • 2022-01-11
猜你喜欢
  • 2021-12-15
  • 2022-02-01
  • 2022-01-06
  • 2022-02-05
  • 2022-12-23
  • 2021-07-18
相关资源
相似解决方案