Hda驱动
文章平均质量分 77
_kerneler
这个作者很懒,什么都没留下…
展开
-
hda-verb参数详表
hda-verb参数详表hda-verb的由来hda-verb是linux下面的alsa-project的一条命令,它的作用是发送HD-audio命令。命令格式:linux:% hda-verb /dev/snd/hwC0D0 0x12 0x701 2Mac:$ hda-verb 0x12 0x701 2输入命令:hda-verb输出信息:hda-verb for CodecCommander (based on alsa-tools hda-verb) usage: hda-原创 2021-01-18 15:46:49 · 897 阅读 · 0 评论 -
hda驱动移植过程
1:确定hda控制器基地址:4006900002:移植代码3:dts配置:中断号4:hda控制器初始化失败,codec握手失败(1):猜想pmon下的hda频率设置有误(2):软件问题,初始化代码不对(ejtag追)(3):复用问题最后发现是复用问题到这里:可以出声了(2周半)5:录音问题:(1)怀疑软件移植有问题(2)怀疑dma问题(3)怀疑数据格式问题(4)通路问题(5)增益问题感觉都没啥问题了最后发现是mic接口不标准。。。。...原创 2021-01-05 16:29:52 · 399 阅读 · 0 评论 -
Intel HD-Audio driver 解析
PCI driver的基本流程定义一个PCI ID table,这在/kernel/sound/pci/hda/hda_intel.c 中有定义:前两个是vendor ID & device ID,后面是一些masksstatic const struct pci_device_id azx_ids[] = { /* CPT */ { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL转载 2021-01-04 09:18:54 · 1378 阅读 · 0 评论 -
Management of cards and components
一、card 实例对于任何一个声卡,一个card是必须首先被allocated的,,他管理这声卡是所有的devices(components),如PCM,mixer.MIDI等。当然也包括ID,name strings,power-management states 以及 hotplug等。然后调用 snd_card_new()来创建实例struct snd_card *card;int err;err = snd_card_new(&pci->dev, index, id, mod转载 2021-01-04 09:18:32 · 124 阅读 · 0 评论 -
PCM Interface
PCM的创建和初始设置部分一个声卡设备可以有4个pcm instances, 一个pcm实例和一个pcm设备相关联,一个pcm instance 包含 pcm playback & capture streams,且每一个stream包含一个或多个 substreams,主要函数如下:在hda_controller.c中有关于hardware的定义static struct snd_pcm_hardware azx_pcm_hw = { .info = (SNDRV_PCM_INFO_M转载 2021-01-04 09:18:14 · 263 阅读 · 0 评论 -
azx_probe、azx_probe_continue函数分析
azx_probe中的azx_create()函数分析static int azx_create(struct snd_card *card, struct pci_dev *pci, int dev, unsigned int driver_caps, const struct hda_controller_ops *hda_ops, struct azx **rchip)在被azx_probe()调用的时候,传参如下: err = azx_cr转载 2021-01-04 09:17:53 · 475 阅读 · 0 评论 -
hda driver 之 azx_interrupt 以及 framebytes DMAposition简单分析
在数据从缓冲区复制到音频控制器的过程中,通常会使用DMA, DMA对声卡而言非常重要。例如在放音时,驱动设置完DMA控制器的源数据地址(内存中DMA缓冲区)、目标地址(音频控制器FIFO)和DMA的数据长度,DMA控制器会自动发送缓冲区的数据填充FIFO,直到发送完相应的数据长度后才中断一次。中断在声卡中,表现为一个period的数据传输完毕会触发中断,然后更新 position在azx_first_init()中会有interrupt的初始化工作if (azx_acquire_irq(chip, 0转载 2021-01-04 09:17:22 · 510 阅读 · 0 评论 -
HDAC driver 两种搬运数据方式---MMIO、IO R&W
在linux 上使用工具播放音频文件时,有两种音频数据拷贝的方式:一、Memory mapped I/O就是把磁盘上的file映射到内存上,当我们从内存上fetch byte时,对应的file就被读取。同样的,当我们在内存上存储字节的时候,对应的file就被写入。这就让我们不需通过read和write系统调用而去操作I/O。mmap内存映射建立一段可以被多个进程读写的内存段。共享内存。mmap函数作用是告诉内核把给定的文件file映射到内存的一块空间,mmap函数原型如下:#include <转载 2021-01-04 09:17:10 · 302 阅读 · 1 评论 -
PCI设备的地址空间
先给上面这个图,每一个PCI设备都有一个256 byte的配置寄存器空间,它分为64 byte的头标区(如上图所示,固定不变)和192 byte 的设备关联区(设备自己独有)。上图右边的呢,是表示4个 byte的递增。1、前几个寄存器,是一些ID,操作系统根据其信息加载相应的驱动程序。2、然后接着就有6个BAR,每一个BAR对应该设备里的一片存储器或IO空间,在上电的时候,BAR中的内容表达了该寄存器申请了多少存储器空间或IO空间,通过读这些BAR在系统的存储器和IO地址空间为其分配一片独立的存储器或.转载 2021-01-04 09:16:59 · 574 阅读 · 0 评论 -
PCI设备简介和PCI驱动使用函数
一,PCI设备简介 PCI总线的特点:(1)速度上快,时钟频率提高到33M,而且还为进一步把时钟频率提高到66MHZ、总线带宽提高到64位留下了余地。(2)对于地址的分配和设置,系统软件课自动设置,每块外设通过某种途径告诉系统该外设有几个存储区间和I/O地址区间,每个区间的大小以及本地地址。系统软件知道了总共有多少外设以及各种的存储空间后就会统一为外设分配物理地址。(3)对于总线的竞争,PCI总线上配备了一个仲裁器,遇到冲突,仲裁器会选择其中之一暂时成为当前的主设备,而其他只能等待。同时考虑到转载 2021-01-04 09:16:39 · 4279 阅读 · 0 评论 -
PCI resource management
PCI resource management这部分主要完成azx chip 特定的construtor/destructor,以及PCI entries.首先这里涉及到几个重要的函数:struct azx{}static int azx_free(struct azx *chip)statci int azx_create(…) //azx芯片特定的constructorazx_create(struct snd_card *card, struct pci_dev *pci转载 2021-01-05 16:18:33 · 302 阅读 · 0 评论 -
PCM ALSA的一些基础知识
PCM1、设备命名API 库使用逻辑设备名而不是设备文件。设备名字可以是真实的硬件名字也可以是插件名字。硬件名字使用 hw:i,j 这样的格式。其中i是卡号,j是这块声卡上的设备号。第一个声音设备是hw:0,0.这 别名默认引用第一块声音设备并且在本文示例中一直会被用到。插件使用另外的唯一名字。比如plughw:, 表示一个插件,这个插件不提供对硬件设备的访问,而是提供像采样率转换这样的软件特性,硬件本身并不支持这样的特性。2、声音缓存和数据传输每个声卡都有一个硬件缓存区来保存记录下来的样本。当缓转载 2021-01-04 09:17:40 · 1648 阅读 · 0 评论 -
GDB常用命令大全 GDB 命令详细解释
GDB常用命令大全 GDB 命令详细解释一、查看GDB命令帮助 两次按下tab键 然后console 控制台输入 help二、GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。GDB主要帮忙你完成下面转载 2020-12-30 18:47:14 · 3166 阅读 · 1 评论 -
aplay amixer arecord说明
arecord声音录制arecord -l列出声卡和数字音频设备-D参数用于指定音频设备PCM以hwx,x开头根据上面l列出的设备,如果选择tvp5158来录制声音的话那么pcm设备就位hw0,0,如果是tlv320aic3x则pcm设备为hw0,1,sii9135则pcm设备为hw0,2。声卡号,设备号-r指定采样频率:5512/8000/11025/16000/22050/32000/44100/48000/64000/88200/96000/176400/192000-f指定采样格式转载 2020-12-30 18:45:20 · 2140 阅读 · 0 评论 -
Linux命令学习总结:hexdump
命令简介:hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。指令所在路径:/usr/bin/hexdump命令语法:hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file …]命令参数:此命令参数是Red Hat Enterprise Linux Server release 5.7下hexdump命令参数,不同版本Linux的hex转载 2020-12-30 18:38:37 · 496 阅读 · 0 评论 -
共享中断 IRQF_SHARED 使用方法
在board-8064.c中寻找sis_i2c_info如下:static struct i2c_board_info sis_i2c_info[] __initdata = {{I2C_BOARD_INFO(SIS_I2C_NAME, SIS_SLAVE_ADDR),.platform_data = &sis_pdata,.irq = MSM_GPIO_TO_INT(7),},};在这里 7 代 触发中断得偏移量 (通过MSM_GPIO_TO_INT计算偏移 ,不许要管)sta转载 2020-12-30 18:05:12 · 3814 阅读 · 0 评论 -
HDA Driver分析
Linux ALSA音频框架分析五:HDA Driver分析一 概述HDA(High Definition Audio)是intel设计的用来取代AC97的音频标准,硬件架构上由hda dodec和hda controller组成见图1:二 Stream 的概念HAD 引入了 Streams 的概念来组织数据,并通过 HDA Link 总线进行数据传输。Stream 是一个在系统内存缓冲区和 codec 之间创建的逻辑的或虚拟的连接用以来呈现数据,该连接由单个 DMA 通道通过 Link总线驱动。一转载 2020-12-30 18:03:38 · 1575 阅读 · 0 评论 -
intel声卡驱动probe分析--hda_intel.c alsa
1. 关键代码及注释:1. intel声卡初始化流程:/sound/pci/hda/hda_intel.c azx_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) { snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 0, &card); {//创建snd_card的一个实例 card->dev = parent;转载 2020-12-30 18:00:47 · 981 阅读 · 0 评论 -
ALSA-hda开发笔记
初次接触ALSA感觉其深不可测,涉及到内核驱动代码的分析,架构的理解、应用层的alsa-lib库的使用以及系统运行环境的相关配置管理机制。一开始因为缺乏总体上的认识, 所以只能以项目中的遇到的实际问题为起点,一点一点深入其中。经过差不多两年的积累,现在无论时总体上的理解还是细节上的把握得有了一些收获。网上关于这块的文章,大部分会先从概念开始介绍alsa,本文通过定位解决实际问题来深入剖析alsa实现细节。ALSA驱动想要有效率的定位解决内核模块的问题,一定要较全面地掌握内核通过的调试技术支持以及相应模转载 2020-12-30 17:57:50 · 2300 阅读 · 0 评论 -
irq : nobody cared (try booting with the “irqpoll“ option) 问题说明
当调试一块网卡的时候,内核报错,打印信息如下:irq 29: nobody cared (try booting with the “irqpoll” option)[] (dump_stack+0x0/0x14) from [] (__report_bad_irq+0x7c/0xac)[] (__report_bad_irq+0x0/0xac) from [] (note_interrupt+0x244/0x28c)r4:00000000[] (note_interrupt+0x0/0x28c)转载 2020-12-30 17:31:11 · 4205 阅读 · 0 评论 -
Linux内核tracepoints
具体的可以参考kernel的文章,路径如下:Documentation/trace里面的tracepoints.txt和tracepoint-analysis.txt。这里简要说明一下,举一个小例子,怎么样使用!内核中的每个tracepoint提供一个钩子来调用probe函数。一个tracepoint可以打开或关闭。打开时,probe函数关联到tracepoint;关闭时,probe函数不关联到tracepoint。tracepoint关闭时对kernel产生的影响很小,只是增加了极少的时间开销(转载 2020-12-30 17:30:05 · 275 阅读 · 0 评论 -
ALSA 音频数据传输 underrun 和 overrun
在 ALSA 数据传输中,最容易出现的错误是 underrun 和 overrun。pcm 播放的时候,接口 snd_pcm_writei 返回 -EPIPE,为 underrun(不足)录制音频的时候, 接口 snd_pcm_readi 返回 -EPIPE, 为 overrun(超载)使用 ALSA 架构的驱动程,在实际开发使用过程中,比较常见的错误有 -EPIPE,为什么会出现呢?肯定是系统内部不和谐了!在 Playback 时出现 EPIPE 错误是因为 ALSA 驱动 buffer 没有数据转载 2020-12-30 17:27:48 · 3580 阅读 · 0 评论