《Linux内核编程》第二章:ALSA驱动

2024-03-15 14:48

本文主要是介绍《Linux内核编程》第二章:ALSA驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文基于mstar801平台Linux2.6.35.11内核。

一、ALSA驱动创建声卡过程

1.创建声卡

  snd_card_create(Linux2.6.30及以后api),snd_card_new(Linux2.6.30以前api)。  

  说明:第一步要创建声卡
2.创建pcm设备,并加入声卡

  int snd_pcm_new(struct snd_card *card,const char *id,int device,int playback_count,int capture_count,struct snd_pcm *rpcm );

  说明:参数device表示目前创建的是该声卡下的第几个pcm,第一个pcm设备从0开始。

        参数playback_count表示该pcm将会有几个playback substream。

        参数capture_count表示该pcm将会有几个capture substream。

3.设置pcm设备的ops

  void snd_pcm_set_ops(struct snd_pcm *pcm,int direction,struct snd_pcm_ops *ops);

  说明:

4.注册声卡,创建设备节点

  snd_card_register()

5.举例

module_init(_mdrv_alsa_init);
static int __init _mdrv_alsa_init(void){................................err = _mdrv_alsa_probe(device_id);  ..............................
}

    内核被加载时,_mdrv_alsa_probe(device_id)函数被调用;完成上述4个步骤。即snd_card_create;snd_pcm_new、snd_pcm_set_ops;snd_card_register。

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

二、基于USB的ALSA驱动

1.、USB声卡的发展

    近年来产品层出不穷,USB类在USB开发者论坛的努力下、成为一种标准的规范;USB声卡也开始在市场上悄然出现。

    因为USB声卡内置了DAC和有源功放,音频数据以数字方式进入USB声卡,完全杜绝了PC的内部干扰;所以,USB声卡有可能成为现有内置声卡的替代品。

    本文介绍一种基于ARM处理器的USB声卡设计。

2、USB声卡原理
    
    如上图:在主机端播放音乐时,应用软件或驱动程序把各类音频信号转换为统一的格式,如PCM等,通过主机的USB接口发送给USB声卡;声卡的USB接口接收到数据后,通过I2S接口把并行音频数据转为串行,再发送给音频编解码芯片进行D/A转换,即可在音频芯片连接的扬声器中发音。   

3.编程

    我们来看看USB音频设备驱动程序,下篇文章会讨论USB主机控制器驱动程序。

module_init(snd_usb_audio_init);
static int __init snd_usb_audio_init(void){if (nrpacks < 1 || nrpacks > MAX_PACKS) {printk(KERN_WARNING "invalid nrpacks value.\n");return -EINVAL;}return usb_register(&usb_audio_driver);    //为了实现USB设备的即插即用,所有USB设备驱动都要在USBD中注册。当驱动程序调用int usb_register(struct usb_driver *new_driver)时,系统将这个新的驱动程序加入驱动链表(usb_driver_list)的尾部完成注册;同时、扫描总线上的所有设备,与驱动程序关联。
}
static struct usb_driver usb_audio_driver = {.name = "snd-usb-audio",.probe =usb_audio_probe,.disconnect = usb_audio_disconnect,.suspend = usb_audio_suspend,.resume = usb_audio_resume,.id_table = usb_audio_ids,//当USB设备挂载时,USB Host驱动会去匹配id_table、若与该id匹配、证明是Audio设备;usb_audio_probe将被触发。
};

    USB音频设备挂载时,usb_audio_probe()函数被调用;完成上述4个步骤。即snd_card_create;snd_pcm_new、snd_pcm_set_ops;snd_card_register。

    下一章将详细分析Linux USB驱动的组成:《Linux内核编程》第三章:USB类设备驱动

这篇关于《Linux内核编程》第二章:ALSA驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/812319

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE