ALSA声卡笔记4-----体验声卡
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: sound\soc\samsung\dma.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声卡笔记3--ASoC驱动重要结构体关系图
1.ASoC中重要的数据结构之间的关联方式 (1)Kernel-2.6.35-ASoC中各个结构的静态关系 ASoC把声卡实现为一个Platform Device,然后利用Platform_devic ...
- ALSA声卡笔记2---ASoC驱动框架
1.简单了解一下ASOC 在嵌入式系统里面的声卡驱动为ASOC(ALSA System on Chip) ,它是在ALSA 驱动程序上封装的一层 分为3大部分,Machine,Platform和C ...
- ALSA声卡笔记1---ALSA驱动框架
1.声卡驱动程序sound.c (1)入口函数里通过register_chrdev()函数注册file_operations 结构体 (2)file_operations 结构体,里面只有open函数 ...
- [RK3288][Android6.0] 调试笔记 --- 如何确认声卡是否注册成功【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/78399875 Platform: RK3288 OS: Android 6.0 Kernel ...
- Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用
前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...
- Ubuntu下声卡驱动解决方法alsa
一.首先介绍一下什么是ALSA : Advanced Linux Sound Architecture 的简称为 ALSA ,译成中文的意思是先进的Linux声音架构(这是google翻译的):一谈到 ...
- alsa声卡切换
环境 ubuntu12.04 因为桌面版的默认装了,而且调声音也很方便,这里说一下server版下的配置,毕竟做开发经常还是用server版的 1.安装 apt-get install alsa-ba ...
- Linux ALSA声卡驱动之六:ASoC架构中的Machine
前面一节的内容我们提到,ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上 ...
- 1-1. OSS/ALSA 声卡的驱动与配置和 Madplay 嵌入式播放器的移植
报警子系统 一. OSS/ALSA 声卡的驱动与配置 声卡驱动中传统的OSS构架在02年被收购后即不开源,并且OSS的混音效果不好->因此ALSA构架孕育而生. ALSA(高级音频构架,目前应用 ...
随机推荐
- TCP 初步认识
TCP连接的建立---三次握手 第一次握手:客户端TCP首先给服务器端TCP发送一个特殊的TCP数据段. 该数据段不包含应用层数据,并将头部中的SYN位设置为1,所以该数据段被称为SYN数据段. 另外 ...
- 构造字典:DictionaryBase类和SortedList类
DictionaryBase 类 msdn对DictionaryBase的文档解释 泛型KeyValuePair类 msdnd对泛型KeyValuePair类的文档解释 SortedList类 RUN ...
- iOS的坑:ERRORITMS-90096: "Your binary is not optimized for iPhone 5 - New iPhone appsand app updatesXcode7提交到App Store二进制文件时报错错误:“你itms-90096二进制不是iPhone 5的新iPhone应用程序和应用程序的更新必须提交支持iPhone 5英寸的显示器........
在工程里的Images.xcassets添加并设置LaunchImage对解决ERROR ITMS-90096根本不会起到任何作用,需要单独添加针对iPhone 5的载入图片.关键点有三项: 1.图片 ...
- learn go anonymous function
package main // 参考文档: // https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/06.8.md im ...
- 【剑指offer】字符串转换为数字,C++实现
# 题目 把字符串转换成整数 # 思路 1.功能测试 正数/复数/0 2.边界值测试 最大的正整数/最小的负整数(数据上下溢出) 3.特殊输入测试 空字符串""的处理,返回0,设置 ...
- SQL查询执行步骤
1.总结 执行顺序 3.select ...聚合函数 from 表名 1.where ... 2.group by ... 4.having ... 5.order by ... 6.limit .. ...
- DevExpress相关控件中非字符数值居左显示
用了这么长时间的DevExpress控件,今天遇到俩问题. 一个是从头到尾看了一遍编译成功的例子,只能感慨,功能太丰富了,自己所用的不过是冰山一角.有些自己一直想实现的效果,原来早就有现成的可用,汗颜 ...
- Android学习笔记之Android Studio下创建menu布局文件
1.创建menu文件夹 Android Studio项目中如果没有menu文件夹,在res文件夹右键,new-Android resource directory: 则会弹出下图对话框,在Resour ...
- [转]blocks编程
原文地址:http://geeklu.com/2012/01/block/ 介绍 声明创建和调用 Block和变量 Block实际应用 1.介绍 Block是一个C Level的语法以及运行时的一个特 ...
- BZOJ4974:[Lydsy1708月赛]字符串大师(逆模拟KMP)
题目描述 一个串T是S的循环节,当且仅当存在正整数k,使得S是T k Tk (即T重复k次)的前缀,比如abcd是abcdabcdab的循环节.给定一个长度为n的仅由小写字符构成的字符串S,请对于每 ...