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

主机操作系统: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 来控制。
ALSA (Advanced Linux Sound Architecture) 是在 Linux 下进行音频编程时一种可供选择的声卡驱动体系结构。它 支持多种声卡设备, 具有更加友好的编程接口,并且完全兼容于 OSS。
OSS(Open Sound System)是Linux平台上一个统一的音频接口, 即只要音频处理应用程序按照OSS的API来编写,那么在移植到另外一个平台时,只需要重新编译即可。值得注意的是OSS只是部分开源。无论是选择ALSA还是OSS都是为了一个目的:将声卡抽象为一个统一的设备供linux程序员使用。我们测试选用的OSS系列。
二.修改配置文件
Linux-3.0 已经完美的支持UDA1341音频芯片的驱动, 我们只要在arch/arm/mach-s3c2440/mach-smdk2440.c 文件中注册UDA1341 平台设备的控制端口就可以了。

(1)添加头文件

(2)添加相关设备结构体
(3)将设备结构体加入主设备结构体
注意:上述添加的各类结构体均要放在添加设备的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                                               | |
  | |                                                                         
重新编译,烧录开发板,启动过程中打印如下信息则表示添加驱动成功
四.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/
[weiming@Huangweiming 3rdparty]$ cd
[weiming@Huangweiming ~]$ cd fl2440/3rdparty/
[weiming@Huangweiming 3rdparty]$ mkdir uda1341
[weiming@Huangweiming 3rdparty]$ cd uda1341/
[weiming@Huangweiming uda1341]$ mkdir install
将上述源码包下载到uda1341文件夹下,用tar -xzf 指令解压(由于是.tar.gz格式)
一般源码包解压缩之后,若已经存在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
[weiming@Huangweiming uda1341]$ cd zlib-1.1.4
[weiming@Huangweiming zlib-1.1.4]$  sudo ./configure --prefix=/home/weiming/fl2440/3rdparty/uda1341/install

(2)修改Makefile:
[weiming@Huangweiming zlib-1.1.4]$vim Makefile

(3)编译make
[weiming@Huangweiming zlib-1.1.4]$sudo make
(4)安装make install 
[weiming@Huangweiming zlib-1.1.4]$sudo make install

(二)libid3tag-0.15.1b
[weiming@Huangweiming uda1341]$ cd libid3tag-0.15.1b
[weiming@Huangweiming 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  

[weiming@Huangweiming libid3tag-0.15.1b]$sudo make
[weiming@Huangweiming libid3tag-0.15.1b]$sudo make install
(三)libmad-0.15.1b:
[weiming@Huangweiming uda1341]$ cd libmad-0.15.1b
[weiming@Huangweiming 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
[weiming@Huangweiming libmad-0.15.1b]$sudo make
如出现以下错误:

解决方法:找到libmad configure之后的Makefile,删除 -fforce-mem原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误。
删除后再执行一次sudo make
[weiming@Huangweiming libmad-0.15.1b]$sudo make
[weiming@Huangweiming libmad-0.15.1b]$sudo make install
(四)madplay-0.15.2b
[weiming@Huangweiming uda1341]$ cd madplay-0.15.2b
[weiming@Huangweiming 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
[weiming@Huangweiming madplay-0.15.2b]$ sudo make  
make成功生成madplay可执行程序.因为自己使用的静态编译(--disable-shared),可不用再make install
make以后我们会发现生成了可执行文件madplay,这就是我们要下载到开发板上的文件:

五.开发板测试
插上耳机就能听到音乐了,通过按键盘的减号可以减小音量,shift+可以增大音量,shift-瞬间恢复满音量,s键停止。
到此,声卡驱动和播放器移植成功完成了。

Linux设备驱动之udal341声卡驱动与madplay播放器移植相关推荐

  1. s3c2440 uda1341声卡驱动与madplay播放器移植

    --------------------------------------- 主机操作系统:Centos 6.7  交叉编译器环境:arm-linux-gcc-4.5.4  开发板平台: FL244 ...

  2. linux开发板madplay播放视频,Madplay播放器移植ARM(超简单)

    一.下载 1.madplay-0.15.2b.tar.gz 2.libmad-0.15.1b.tar.gz 3.libid3tag-0.15.1b.tar.gz 4.zlib-1.1.4.tar.gz ...

  3. 安装window7系统解决不能使用驱动精灵安装声卡驱动问题

    [color=blue]最近公司刚刚给配置了一台gateway的笔记本,只知道是T-Series系列,具体是什么型号就不知道了,刚装了win7也没有自动安装声卡驱动,使用驱动精灵和驱动魔方更新声卡驱动 ...

  4. linux下的网络音乐播放器,Linux_Songbird离开后 Linux下可以替代它的10个音乐播放器推荐,正如我们早先提到的一样, Son - phpStudy...

    Songbird离开后 Linux下可以替代它的10个音乐播放器推荐 正如我们早先提到的一样, Songbird 已经离开了Linux羊群而开源的牧草地将变得更加翠绿.但是,Linux将用什么来取代这 ...

  5. Linux开发板怎么用madplay,Linux中madplay 音乐播放器移植步骤

    madplay 音乐播放器移植步骤 madplay版本: madplay-0.15.2 交叉编译器版本: arm-linux-gcc 3.4.1 操作系统平台: Linux -- Red Hat 9. ...

  6. Linux(RedHat9.0)下Alsa声卡驱动的安装

    自从装来RedHat9.0就没有听到过声音,也不知道安装了多少次声卡驱动,每种都试验过,都没有成功过,今天终于安装成功,需要的朋友可以参考一下. 首先查看一下,系统声音是否打开,有些朋友电脑没有声音, ...

  7. linux系统声卡安装教程,Linux系统下如何安装声卡驱动?

    装了几次Linux OS,当然也装了几次声卡驱动,一般来说都是安装ALSA(Adcance Linux Sound Architecture)驱动,多装几次以后就会发现非常的简单的. 首先,先决条件, ...

  8. linux驱动编写(声卡驱动之asoc移植)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] Linux下面的声卡驱动很复杂,根本不是一篇博客能够说清楚的.所以,本片文章的目的就是让同学门快 ...

  9. Linux 设备树下的 platform 驱动实验基于正点原子IMX6ULL开发板

    1 设备树下的 platform 驱动简介 platform 驱动框架分为总线.设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和 ...

  10. Linux 设备树下的 platform 驱动示例

    1.简介 基于总线.设备和驱动这样的驱动框架,Linux 内核提出来 platform 这个虚拟总线,相应的也有 platform 设备和 platform 驱动. Linux 总线设备和驱动模式 2 ...

最新文章

  1. pythonurllib模块-Python urllib模块 网络资源访问安装下载
  2. Scala基础 - 下划线使用指南
  3. VMP分析之VMP2.13插件化分析(四)
  4. 高德地图api接口文档_在 R 语言里面调用高德地图接口:地理编码与路径规划
  5. mysql是gplv3,Affero-GPL和GPLv3之间的区别
  6. java的debug模式_java第六章:debug模式介绍及大量实例练习
  7. 在html中直接使用%3c php%3e,HTB-靶机-Calamity
  8. Exchange 混合部署—Office 365 注册及预览
  9. 模拟调制与抗噪声性能MATLAB,毕业论文 模拟通信系统抗噪声性能分析
  10. [奶奶看了都会]京东自动签到薅羊毛-完整教程
  11. linux stm32 虚拟串口驱动安装,stm32usb虚拟串口驱动
  12. ModbusTCP通讯协议学习及实践(台达三菱PLC通讯)
  13. 基恩士PLC④--MAIN程序实例笔记
  14. 惠普主板f1怎么关闭_惠普台式机开机按F1怎样去除
  15. 绝了,这款P2P全平台的文件同步工具,开源且不依赖中心服务器
  16. python批量下载网页图片,不用再复制粘贴了(7)
  17. jquery给按钮赋值_jQuery给div,Span, a ,button, radio 赋值与取值
  18. iOS 应用内购(iAP)
  19. Android .9图片制作教程(二)
  20. 基于Lattice XO2-4000HC FPGA核心板及电子森林综合训练底板的ADC数字电压表及OLED显示设计(Verilog)

热门文章

  1. 3种方式教你怎样显示手机wifi密码,不再愁密码忘记了
  2. Windows启动配置数据(BCD)存储文件包含一些无效信息
  3. 解决fullpage滑动,控制台的报错提示
  4. 如何使用VSCode开发Qt项目?
  5. 待办事项桌面插件,办公族的桌面帮手
  6. 分治法查找最大和次大元素
  7. 实测发现,微软 Win11 并不比 Win10 更快
  8. linux配置web页面登录密码,在Linux下通过WEB认证方式上网
  9. android 读取sdcard图片 不显示,Android 读取sdcard上的图片实例(必看)
  10. 2022年最新版Android安卓面试题+答案精选(每日20题,持续更新中)【八】