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. ...
随机推荐
- div常用效果方法-transform
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- 下载github项目
两种方法:通过https或者ssh地址 找一个放置项目的文件夹,右键git bash here 输入 $ git clone https://项目地址 通过https 项目地址可以直接复制网页地址,或 ...
- Linux 学习(四)
搭建jdk 安装jdk操作: 1.光驱挂载:mount /dev/cdrom /mnt 2.拷贝安装包至其他文件夹(如home目录下) 3.执行安装包(bin包:./包名) 4.配置环境变量:打开文件 ...
- list.sort结果是None
错误原因: list.sort()功能是针对列表自己内部进行排序, 不会有返回值, 因此返回为None. 举例说明: In [19]: a=["a","c" ...
- vue中的input使用e.target.value赋值的问题
很久不写博客了... vue中对表单的处理,相对原生js,增加了一个双向绑定的语法糖:v-model.官方文档里有一段: v-model 会忽略所有表单元素的 value.checked.select ...
- RabbitMQ系列(四)--消息如何保证可靠性传输以及幂等性
一.消息如何保证可靠性传输 1.1.可能出现消息丢失的情况 1.Producer在把Message发送Broker的过程中,因为网络问题等发生丢失,或者Message到了Broker,但是出了问题,没 ...
- 社交网络图中结点的“重要性”计算 (30 分) C++解法
社交网络图中结点的"重要性"计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓 ...
- Spring自定义拦截器
HandlerInterceptorAdapter由Spring MVC提供,用来拦截请求. 实现自定义拦截器需要继承HandlerInterceptorAdapter或实现HandlerInterc ...
- springmvc学习及源码地址
http://jinnianshilongnian.iteye.com/blog/1634096
- 深入理解DOM事件类型系列——剪贴板事件
定义 剪贴板操作包括剪切(cut).复制(copy)和粘贴(paste)这三个操作,快捷键分别是ctrl+x.ctrl+c.ctrl+v.当然也可以使用鼠标右键菜单进行操作 对象事件 关于这3个操作共 ...