Linux声卡驱动移植和測试
一、分析驱动程序,依据开发板改动代码
代码太长,就不贴了,几个注意点:
1、 查看开发板原理图和S3C2410的datasheet,UDA1341的L3MODE、L3DATA、L3CLOCK分别与S3C2410的GPB2、GPB3、GPB4相连。IISLRCK=GPE0, IISSCLK=GPE1, CDCLK=GPE2,IISSDI=GPE3, IISSDO=GPE4,部分代码例如以下:
2、 两个重要结构体:audio_buf_t和audio_stream_t,当中audio_stream_t 为音频流数据组成了一个环形缓冲区;
3、 file_operations结构体。open()、write()、read()、ioctl()、release()等函数的底层实现。
4、 DMA的原理;
5、 驱动载入和卸载等;
二、向内核中加入声卡驱动
1、 配置内核中的声卡选项;
注意:UDA1341的驱动程序s3c2410-oss.c在linux/sound/oss/文件夹下(内核版本号:Linux-2.6.8.1)。
在内核树文件夹下输入make menuconfig,会跳出内核配置界面:
然后按键盘的向下导航键,下拉至Sound选项:
按回车,进入Sound选项界面:
选中“Open Sound System”选项,回车进入OSS选项界面:
分别选中“Open Sound System(DEPRECATED)”和“S3C2410 audio support”两项,按空格。直到选项前面<>内变成*,然后按Tab键退出,保存配置信息:
ps:*表示将驱动程序编译进内核,空表示不编译驱动程序。M表示将驱动程序编译成模块。
2、 编译内核,生成内核镜像zImage;
在内核树文件夹下,输入命令make zImage,编译成功后会在linux/arch/arm/boot/文件夹下生成zImage文件。
3、 打开Sambaserver,将内核镜像zImage共享到windows平台下,再通过DNW软件将zImage下载到开发板上;
经过以上步骤,就成功地将声卡驱动程序加入进内核。
三、測试声卡
1、启动开发板,查看声卡设备;
从显示结果能够看出。驱动程序已经成功地在内核中注冊了两个字符设备:dsp和mixer,dsp的主设备号是14。次设备号是3;mixer的主设备号也是14。次设备号是0。
2、查看声卡是否能正常录音和播放;
创建暂时目录audio。使用命令实现录音,生成音频文件audio.wav。使用命令实现放音,通过測试,发现声卡工作正常。
遇到的问题:
測试声卡时,出现错误“cat :Read error:Illegal seek”。
解决的方法:
改动声卡驱动程序,将驱动程序里的smdk2410_audio_read函数中的部分代码凝视了,例如以下图红色圈出部分。
注意:改动驱动程序后,须要又一次编译内核。生成zImage文件并下载到开发板上。
2014年6月13日星期五16:23
Linux声卡驱动移植和測试的更多相关文章
- AM335x(TQ335x)学习笔记——WM8960声卡驱动移植
经过一段时间的调试,终于调好了TQ335x的声卡驱动.TQ335x采用的Codec是WM8960,本文来总结下WM8960驱动在AM335x平台上的移植方法.Linux声卡驱动架构有OSS和ALSA两 ...
- linux网卡驱动移植
这里重要的是物理层PHY receiver,MAC(media access control)层,这里与软件中的协议栈不同,在硬件上MAC是PHY的下一层.DM9000A将MAC和PHY做到一起,也可 ...
- 31.Linux-wm9876声卡驱动(移植+测试)
本节学习目的 1)分析Linux中的OSS声卡系统 2)移植wm9876声卡 3)使用madplay应用程序播放mp3 1.声音三要素 采样频率 音频采样率是指录音设备在一秒钟内对声音信号的采样次数, ...
- 十七、S3C2440 音频解码芯片WM8976声卡驱动移植、madplay测试
学习目标:1. WM9876接口和工作原理:2. WM9876驱动移植:3. WM9876应用测试:4. 问题总结 1. WM9876接口和工作原理 本节使用了JZ2440开发板移植WM9876驱动 ...
- Linux网卡驱动移植--Dm9000网卡驱动分析
1. Linux网络体系结构由以下5部分组成 ① 系统调用接口: 位于Linux网络子系统的顶部,为应用程序提供访问内核网络子系统的方法,主要指socket系统调用. ② 协议无关接口: 实现一组基于 ...
- Linux声卡驱动框图
1.声卡驱动注册完成后的框图 2.open & hw_params 完.
- Linux VGA驱动移植实验【转】
本文转载自:http://m.blog.csdn.net/bzw73/article/details/46564275 有了前面的LCD驱动的框架,再移植VGA驱动就相当的容易了.默认在光盘中已经支持 ...
- Linux Spi驱动移植小结
2012-01-07 22:21:29 效果图: 理论学习后,主要是linux中spi子系统设备框架的了解后,主控制器与设备分离的思想,那么我要开始动手了. 1, make menuconfig添加 ...
- mini2440驱动奇谭——ADC驱动与測试(动态挂载驱动)
博客:http://blog.csdn.net/muyang_ren 实现功能:开发板动态载入adc驱动模块并能通过測试程序 系统:Ubuntu 14.04 驱动交叉编译内核:linux-2. ...
随机推荐
- Listview多种布局的使用
ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...
- 滚动时sticky nav
参考w3c <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...
- es6数值扩展
1. 二进制和八进制表示法 从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6 进一步明确,要使用前缀0o表示. ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0 ...
- LR接口测试---webservices
//================================================================================== /* //事务开始 lr_st ...
- Android PopupWindow使用时注意
项目中使用PopupWindown出现的坑 1.部分设备,PopWindow在Android4.0后版本,出现NullPointerException调用以下方法可解决, fixPopupWindow ...
- Sql server 本地临时表、全局临时表的区别
创建了本地临时表#Tmp.全局临时表##Tmp: 本地临时表: 取名以#开头.如:#Tmp(会自动加上一串后缀) 只有当前的连接可以访问 连接关闭后,本地临时表自动释放 全局临时表: 取名以##开头. ...
- Java学习1_一些基础1——16.5.4
每个java程序中都必须有一个main方法,格式为: public class ClassName { public static void main(String[] args) { program ...
- linux 挂载数据盘
完整的阿里云挂载数据盘方法如下: 1.入手阿里云后查看有几块硬盘:(只显示概况,不显示分区情况) fdisk -l|grep Disk 2.查看硬盘分区 fdisk -l 如果有提示:disk /de ...
- Deepin系统关于每次启动终端都要输入source /etc/profile的问题
关于每次启动终端都要输入source /etc/profile的问题 当我在Deepin系统中下载了node以及npm之后,我为了将node导入到系统文件,使用了以下命令sudo gedit ``/e ...
- A3. JVM 类加载器
[概述] 虚拟机设计团队把类加载阶段中的 “通过一个类的全限定名来获取描述此类的二进制字节流” 这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码 ...