qemu声卡模拟原理-声卡初始化(pa+ac97)
连载目录
1.qemu声卡模拟
2.qemu声卡模拟原理-声卡初始化(pa+ac97)
3.qemu声卡模拟原理-声音播放(pa+ac97)
qemu的整个声卡虚拟化都是围绕着audio.c这个文件展开的,audio.c统管了整个音频的数据结构和音频框架通用逻辑,下面以pa后端+ac97模拟设备为例剖析一下qemu中声卡的整个初始化过程。
后端初始化
pa后端的源码在:audio/paaudio.c
在vl.c的qemu_create_early_backends开始初始化,初始化主体流程如下:
paaudio.c:register_audio_pa->
audio.c:audio_driver_register
这里先吧声卡后端对象注册到audio里面的audio_drivers
备用,相应的其他后端也是如此
下面看看后端的初始化:
vl.c:qemu_create_early_backends->audio.c:audio_init_audiodevs->audio.c:audio_init->audio.c:audio_driver_lookup->audio.c:audio_driver_init->paaudio.c:qpa_audio_init
在audio_driver_lookup中通过命令行传入的参数pa,找到了上面注册到audio_drivers
的pa_driver
AudioState是一个比较关键的数据结构,它代表了一个整个后端设备。audio_init中先初始化一个AudioState,再初始化pa_driver,然后将pa_driver注册到AudioState,到这里pa就成功注册上了。
最后QTAILQ_INSERT_TAIL(&audio_states, s, list);将AudioState注册到了audio_states链表上备用,这个时候模拟设备还没有被注册进来。
设备初始化
模拟设备的初始化与pci设备的初始化几乎一致,就不细说了
ac97.c:ac97_class_init->ac97.c:ac97_realize->audio.c:AUD_register_card->audio.c:audio_init->
这里又调用到了audio_init这个函数,传入的参数是NULL,这里主要做的事情是拿到一个系统中已经注册好的AudioState。这里上面的audio_states已经注册了一个AudioState,所以这里直接拿到第一个后端返回,也就是我们上面注册的那个AudioState,所以你在命令行中注册了多个后端只会有一个起作用。
拿到AudioState之后注册到了QEMUSoundCard中
前后端绑定
前后端绑定是在虚拟机内的驱动初始化声卡设备的过程中进行的:
ac97.c:nam_writeac97.c:nam_writeac97.c:nam_writewac97.c:open_voiceaudio_template.c:AUD_open_outaudio_template.c:audio_pcm_create_voice_pair_outaudio_template.c:audio_pcm_hw_add_outaudio_template.c:audio_pcm_hw_add_new_outaudio_template.c:audio_pcm_sw_init_out
前面说道注册了pa的AudioState和ac97持有的QEMUSoundCard已经绑定到了一起,但是后端的绑定还没有完成。当虚拟机内启用声卡的时候才是后端真正绑定在一起的时候。虚拟声卡和后端通过SWVoiceOut(虚拟声卡输出)、HWVoiceOut(后端输出)两个对象绑定在一起才真正完成绑定。
在audio_pcm_create_voice_pair_out中创建了SWVoiceOut(虚拟声卡输出)对象。
在audio_pcm_hw_add_new_out中 创建了HWVoiceOut(后端输出)对象,并通过后端的pcm_ops操作函数组与后端绑定在了一起。
最后通过audio_pcm_sw_init_out函数将虚拟声卡和后端绑定在了一起。
最后来一张图概览一下
qemu声卡模拟原理-声卡初始化(pa+ac97)相关推荐
- qemu声卡模拟原理-声音播放(pa+ac97)
连载目录 1.qemu声卡模拟 2.qemu声卡模拟原理-声卡初始化(pa+ac97) 3.qemu声卡模拟原理-声音播放(pa+ac97) PCM数据 PCM数据格式这里抛砖引玉贴一点别人写的: P ...
- qemu声卡模拟原理-基本使用方法
连载目录 1.qemu声卡模拟原理-基本使用方法 2.qemu声卡模拟原理-声卡初始化(pa+ac97) 3.qemu声卡模拟原理-声音播放(pa+ac97) qemu版本:5.2.50 qemu声卡 ...
- linux alsa声卡驱动原理分析- 设备打开过程和数据流程,linux alsa声卡驱动原理分析解析- 设备打开过程跟数据流程资料.ppt...
linux alsa声卡驱动原理分析解析- 设备打开过程跟数据流程资料 Linux ALSA声卡驱动原理分析 -设备打开过程和数据流程;目 录;目 录;一.导 读;目 录;二.ALSA架构简介;二. ...
- QEMU 中音频模拟如何工作
事情有点棘手,但这里有一个粗略的描述: QEMUSoundCard:建模一个给定的模拟的声卡 SWVoiceOut:建模一个来自 QEMUSoundCard 的音频输出 SWVoiceIn:建模一个来 ...
- 声卡---android USB声卡调试(播放和录音)
目录 一.概述 二.实例 三.总结 一.概述 这里注意一下,声卡只是包含adc(模拟音频转数字音频),dac(数字音频转模拟音频)这两个主要部件.里面没有编码和解码器.asoc驱动架构中的codec也 ...
- QEMU中音频模拟工作过程(十)
QEMUSoundCard:建模一个给定的模拟的声卡 SWVoiceOut:建模一个来自 QEMUSoundCard 的音频输出 SWVoiceIn:建模一个来自 QEMUSoundCard 的音频输 ...
- 一步步教你:如何用Qemu来模拟ARM系统
这是道哥的第011篇原创 文章目录 前言 为什么需要ARM模拟系统 应用程序的开发 系统开发(BSP) Qemu是什么? Qemu的两种模式 Qemu 能做什么?或者说适合做什么? 在 Ubuntu1 ...
- 一步步教你如何在Ubuntu虚拟机中安装QEMU并模拟模拟arm 开发环境(一)uImage u-boot
初次接触qemu是因为工作的需要,有时候下了班,可能需要在家研究一些东西,因为博主用到arm环境,这时候博主比较小气,不愿花钱买开发板,当然博主在这里给大家的建议是,如果要真正学懂arm构架的相关知识 ...
- 电音与计算机相关吗,什么是电音声卡 电音声卡功能和区别介绍【图文】
电音声卡属于声卡的一种,主要用于多媒体技术中的声波以及信号之间的转换,凭借这一特性,它也能够实现声音文件等等的录制工作,因此在许多场景中都扮演着尤为重要的角色.除此之外,我们还了解到电音声卡可以通过调 ...
最新文章
- stack UVA 442 Matrix Chain Multiplication
- html 找不到文件,WebView 加载本地HTML 文件 提示找不到该文件
- 什么是公网IP、内网IP和NAT转换?
- mysql数据库制定位置_MySQL数据库在指定位置增加字段
- 降低Java占用_如何减少JAVA应用程序的CPU使用率?
- [Abp 源码分析]后台作业与后台工作者
- 你们考试,我们都有点紧张呢…
- 与Java EE和Spring的集成架构
- 看一次广告听30分钟歌 你愿意为QQ音乐新功能买单吗?
- moment获取几小时前_请问怎么把“多少小时前”精确到“多少小时多少分钟前”...
- Redis笔记(五)Redis的事务
- c语言实训项目,C语言项目实训教程
- 如何将dwg文件转成kml文件
- python两台电脑文件传输_两台电脑怎么互相连接传送文件?
- 【Kindle】Kindle免费推送网
- 【华人学者风采】丛京生 加州大学洛杉矶分校
- 宝德自强PT620Z1
- 医院绩效考核病案首页数据上报的难点及解决方案
- 《统计学习方法》(李航)第1章主要内容介绍(统计学习概述、分类、三要素)
- Latex中的实心原点