ALSA声卡笔记4-----体验声卡

发布者:TranquilSoul最新更新时间:2024-07-16 来源: elecfans 手机看文章 扫描二维码
随时随地手机看文章


1 、配置内核支持UDA1341

(1)内核

 解压内核并打上补丁


配置内核


platform

需要设置哪些配置项,先看一下platform,需要把S3c24xx-i2s.c文件配置上去,dma.c也要配置上去。这些文件对应哪一个配置项,可以通过打开内核目录中以上两个文件所在目录下的Makefile。


  • 配置编译项CONFIG_SND_S3C24XX_I2S  // s3c24xx-i2s.c

搜索S3c24xx-i2s可知最终会编译进文件snd-soc-s3c24cc-i2s-objs这个文件里。



而文件snd-soc-s3c24cc-i2s-objs对应的配置项是CONFIG_SND_S3C24XX_I2S

因而需要配置编译项CONFIG_SND_S3C24XX_I2S  // s3c24xx-i2s.c


  • 配置编译项CONFIG_SND_SOC_SAMSUNG  // dma.c



因而需要配置编译项CONFIG_SND_SOC_SAMSUNG  // dma.c

codec


  • 配置编译项CONFIG_SND_SOC_UDA134X  // uda134x.c


看一下codec,需要把uda134x.c 文件配置上去。这文件对应哪一个配置项,可以通过打开内核目录中文件所在目录下的Makefile。



因而需要配置编译项CONFIG_SND_SOC_UDA134X  // uda134x.c

machine


  • 配置编译项CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X  // s3c24xx_uda134x.c


看一下machine,需要把s3c24xx_uda134x.c 文件配置上去。这文件对应哪一个配置项,可以通过打开内核目录中文件所在目录下的Makefile。



因而需要配置编译项CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X  // s3c24xx_uda134x.c

搜索那四个配置项,配置内核以把上面四项全部配置上去
-> Device Drivers
  -> Sound card support
    -> Advanced Linux Sound Architecture
      -> ALSA for SoC audio support
      <*>   ASoC support for Samsung     // CONFIG_SND_SOC_SAMSUNG
      <*>   SoC I2S Audio support UDA134X wired to a S3C24XX    // CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X  // s3c24xx_uda134x.c          


-> System Type

[*] S3C2410 DMA support




2、 修改代码

machine


  • 修改mach-smdk2440.c 添加's3c24xx_uda134x'平台设备


我们把S3c24xx-i2s.c文件配置进内核了,S3c24xx-i2s.c只有platform_driver,但是platform_device在mach_mini2440.c(3.4.2内核用mach-smdk2440.c),需要修改这个文件把同名的platform_device放进去。先构建一个smdk2440_audio的平台设备结构体,然后把这个结构体放进平台设备数组里。这个数组最后会把里面的结构体注册进内核。



platform


  • 修改s3c24xx-i2s.c 添加's3c24xx-iis'平台设备

我们把s3c24xx-i2s.c文件配置进内核了,S3c24xx-i2s.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到数组里面)在devs.c,需要修改这个文件把同名的platform_device放进去。先构建一个s3c_device_iis的平台设备结构体,然后把这个结构体放进平台设备数组里。这个数组最后会把里面的结构体注册进内核。

注:平台设备数组在mach-smdk2440.c





codec

  • 修改mach-smdk2440.c 添加'samsung-audio'平台设备

我们把dma.c文件配置进内核了,dma.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到数组里面)在devs.c,需要修改这个文件把同名的platform_device放进去。先构建一个samsung_asoc_dma的平台设备结构体,然后把这个结构体放进平台设备数组里。这个数组最后会把里面的结构体注册进内核。

注:平台设备数组在mach-smdk2440.c



codec


  • 修改mach-smdk2440.c 添加'uda134x-codec'平台设备


我们把uda134x.c文件配置进内核了,dma.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到数组里面)在mach-smdk2440.c,需要修改这个文件把同名的platform_device放进去。先构建一个uda1340_codec的平台设备结构体,然后把这个结构体放进平台设备数组里。这个数组最后会把里面的结构体注册进内核。



3、编译内核出现问题

修改bug: soundsocsamsungdma.c

pos += prtd->dma_period;
改为
pos += prtd->dma_period*limit;
4、实验

     编译内核并把编译出来的内核拷贝到网络根文件系统里,设置启动参数并启动u-boot,u-boot引导内核启动。开是否识别出声卡





5、移植应用程序测试声卡

 alsa-util是使用alsa-lib的一些应用程序,我们使用alsa-util可以用来播放声音,录音或者调整音量等等。

(1) 编译alsa-lib, alsa-util以使用声卡:


  •  alsa-lib  : 


解压并切换到目录下



在配置时不使用--prefix,因为这样做会破坏文件系统的结构,使用默认路径(把库编译安装到/usr目录下,但/usr目录是PC机用的,为了跟PC机不冲突,因而在配置前把/usr改名为/usr_bak)

编译:将源代码变为机器可执行的代码文件。
安装:将可执行文件安装到操作系统里,才可以使用。

mv /usr/bin/g* /tmp就是移动 usr/bin/目录下,以g开头的文件到/tmp目录里


sudo mv /usr /usr_bak

用echo $PATH查看环境变量


修改环境变量,吧所有的usr改为usr_bak

这是临时修改变量,最终修改参考http://blog.csdn.net/qingkongyeyue/article/details/52243210

export PATH=/usr_bak/local/sbin:/usr_bak/local/bin:/usr_bak/sbin:/usr_bak/bin:/sbin:/bin:/usr_bak/games:/usr_bak/local/arm/4.3.2/bin

配置

./configure --host=arm-linux

编译

make

因为make install是安装到usr目录下面去

创建usr目录

sudo mkdir /usr

改变usr目录的所有者和所在组

sudo chown book:book /usr

安装

make install

把/usr目录拷贝到/work/projects/alsa/目录下

sudo cp -rf  /usr  /work/projects/alsa/

把自己创建的/usr目录删掉

sudo rm -rf /usr

然后复制回来

sudo mv /usr_bak /usr


把环境变量改回来

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin

在我们的 /work/projects/alsa/下有编译出来的/usr

把头文件和库复制进交叉工具链里
cd /work/projects/alsa/usr/include
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include


cd /work/projects/alsa/usr/lib
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib


把usr目录复制到网络根文件系统目录下
cd /work/projects/alsa
sudo -rfd usr /work/nfs_root/fs_mini_mdev_new


  •  alsa-util

 先编译依赖:ncurses-5.9.tar.gz



把头文件和库复制进交叉工具链里

cd /work/projects/alsa/ncurses-5.9/tmp/include/ncurses
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cd /work/projects/alsa/ncurses-5.9/tmp/include/
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cd /work/projects/alsa/ncurses-5.9/tmp/lib
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
把库复制到根文件系统的lib目录下
cd /work/projects/alsa/ncurses-5.9/tmp/lib
sudo cp *so* -rfd /work/nfs_root/fs_mini_mdev_new/lib
由于在拷贝过程中lib目录下没有发现动态库.so,在配置时没有制定生成动态库,因而需要重新配置加入--with-shard


安装错误无需理会,只要在tmp临时文件生成头文件和库文件就可以了

解压并切换到其目录下

配置

ncurses是库ncurses-5.9的名字


./configure --host=arm-linux --prefix=$PWD/tmp --with-curses=ncurses --disable-xmlto --disable-nls

–disable-FEATURE 
当你想禁用某个FEATURE的时候可以使用它

with选项来指定具体的软件包地址,通过without选项来指定不使用指定的软件包

编译和安装

make
sudo make install

把安装在tmp目录下的文件拷贝到网络跟文件系统



6、测试

用aplay -h看是否能用

拷贝音频文件到网络文件系统


进行播放


出现无法找到声卡

aplay或者alsa-lib使用的声卡节点默认是在/dev/snd/目录下

因而需要新建/dev/snd目录

mkdir /dev/snd

cd /dev/snd/

ln -s  源文件 目标文件  做软链接
和快捷方式只能共享执行文件不同,linux通过链接文件能共享几乎所以类型的文件

在当前目录创建指向源文件的链接


ln -s /dev/controlC0 
ln -s /dev/pcmC0D0p 
ln -s /dev/pcmC0D0c


播放:

aplay Windows.wav

调音量用amixer来调,用amixer -h查看用法

查看控制项

amixer controls

查看当前音量,numid=1表示第一个control,为什么是numid=1,是因为用amixer controls命令显示出第一个控制项是Master Playback Volume就是他的音量


amixer cget numid=1

设置音量,numid=1表示第一个control,30是设置的音量值

amixer cset numid=1 30

7、把内核的修改制作成补丁文件

(1)把.config文件拷贝为config_ok文件,保存我们修改的配置。然后make distclean


(2)把修改后的内核改个名字,然后解压原版内核


(3)制作补丁文件

(4)打上补丁后,吧config_ok复制为.config就可以了


引用地址:ALSA声卡笔记4-----体验声卡

上一篇:ALSA声卡07_分析调用过程_学习笔记
下一篇:ALSA声卡笔记2---ASoC驱动框架

推荐阅读最新更新时间:2024-11-12 18:22

s3c2440启动过程分析
2440启动过程算是一个难点,不太容易理解,而对于2440启动过程的理解,影响了后面裸机代码执行流程的分析,从而看出2440启动过程的重要性。 2440启动方式和启动方式选择 在S3C2440的datasheet《S3C2440A_UserManual_Rev13.pdf》中搜索map,可以在第5章中搜索到下图。 从此图中,可以得知 OM = 01,10,Not using NAND flash for boot ROM OM = 00, Using NAND flash for boot ROM 而OM 又是什么呢? 从S3C2440的datasheet《S3C2440A_UserManual_Rev13.pdf》中搜
[单片机]
GUI 在 MINI2440 QEMU 的eCos 上的移植
经历了redboot, kernel测试,网卡驱动,web server的测试,很自然的我们想到了UI。 这不仅仅是移植一个GUI, 更重要的让MINI2440 QEMU的ecos仿真平台更加完整话。 对emwin的移植,需要两个部分,老生常谈了网上到处都是。 (本移植也只是针对学习和测试,并非商业用途) 1. LCD的驱动 这个请网上搜索,MINI2440 LCD Driver就可以。 2. GUI的OS接口 探究emwin的OS接口部分,我们需要利用ecos的两个同步资源 cyg_semaphore cyg_flag 还有一些thread的操作函数 cyg_thread_delay cyg_thread_ge
[单片机]
GUI 在 MINI<font color='red'>2440</font> QEMU 的eCos 上的移植
在mini2440上面搞定CC2500物理层驱动
写在前面 最近基本搞定了CC2500在linux下面的驱动,在这个过程中遇到了好多问题,特此总结出来和大家分享。但是需要注意的事情是: 第一,本文不负责程序的具体讲解,诸如每一行程序都讲什么:这个在程序的里面有注释。本篇文章更侧重于从整体结构上让大家对于linux下的CC2500DE驱动有一个整体的了解,如果到时候需要深入研究的时候,再来看具体的代码; 第二,很多师弟师妹没有习惯在linux下编程,或曰,在操作系统下面写程序;并且,对于本专业的东西理解并不扎实。但是,文章中不可能就每一个涉及到的概念都大加讲解。因此,这篇文章还是需要有一些基础才能来阅读的,如果遇到什么不明白的地方,请及时来问我,或者跟帖,或者自己查资料。
[单片机]
ARM9(S3C2440) UART
数据通信的方式 数据通信的方式基本分为: (1)、并行通信:多条数据线将数据的各位同属传送。 特点:传输速度快,适用于短距离通信。 (2)、串行通信:一条数据线将数据一位一位的顺序传送。 特点:线路简单,低成本,适用于远距离通信。 一: 异步通信: 以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而同一个字符中的两个相邻位之间的时间间隔是固定的。 二: 通信协议 指双方约定的一些规则。在异步通讯时,对数据格式有如下的约定:有空闲位,起始位,资料位,奇偶校验位,停止位。 (1)、起始位:先发送一个逻辑信号“0”信号,表示传输字符的开始。 (2)、数据位:紧接在起始位之后。数
[单片机]
mini2440 linuxi2c驱动
#include linux/kernel.h #include linux/init.h #include linux/module.h #include linux/slab.h #include linux/delay.h #include linux/mutex.h #include linux/sysfs.h #include linux/mod_devicetable.h #include linux/log2.h #include linux/bitops.h #include linux/jiffies.h #include linux/i2c.h #include linux/i2c/at24.h #includ
[单片机]
mini2440 uboot烧写uImage
mkimage工具: uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。 mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么 制作uImage镜像: 先准备zImage镜像,再制作uImage镜像。 mkimage -n 'mini2440' -A arm -O linux -T kernel -C none -a 0x3000800
[单片机]
JLINK+ADS+mini2440配置///配置J-Link为mini2440烧写bootloader
使用ADS1.2的时候进入AXD调试环境回出现“ the session file could not be loaded” 解决方案: 1:将工程文件放在不包含中文路径的目录下。 2:设置AXD- confing Interface 中general中的save and load default session前面的选项去掉。 一:在AXD- options - configure interface 中的session file 中载入初始化文件,具体内如如下: Setmem 0x53000000 0x00000000 32 Setmem 0x4A000008 0xFFFFFFFF 32 Setmem
[单片机]
2440裸机】Nand Flash 简单操作
head.s文件 @****************************************************************************** @ File:head.s @ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行 @****************************************************************************** .text .global _start _start: @函数disable_watch_dog, memsetup, init_n
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved