06 2020 档案
摘要:1 概述 网卡的驱动其实很简单,它还是与硬件相关,主要是负责收发网络的数据包,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送, 并将接收到的数据包传递给上层协议。 网卡设备与字符设备和块设备不同, 网络设备并不对应于/dev目录下的文件,不过会存放在/sys/class/net目录下。
阅读全文
摘要:块设备是i/o设备中的一类, 当我们的应用层对该设备读写时,是按扇区大小来读写数据的,若读写的数据小于扇区的大小,就会需要缓存区, 可以随机读写设备的任意位置处的数据,使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。例如 普通文件(*.txt,*.c等),硬
阅读全文
摘要:之前讨论了dapm关于动态电源管理的有关知识,包括widget的创建和初始化,widget之间的连接以及widget的上下电顺序等等。接下来讨论dapm框架中的另一个机制:事件机制。通过dapm事件机制,widget可以对它所关心的dapm事件做出反应,这种机制对于扩充widget的能力非常有用,例
阅读全文
摘要:设计dapm的主要目的之一,就是希望声卡上的各种部件的电源按需分配,需要的就上电,不需要的就下电,使得整个音频系统总是处于最小的耗电状态,最主要的就是,这一切对用户空间的应用程序是透明的,也就是说,用户空间的应用程序无需关心那个部件何时需要电源,它只要按需要设定好音频路径,播放音频数据,暂停或停止,
阅读全文
摘要:1 音频路径的注册 系统中注册的各种widget需要互相连接在一起才能协调工作,连接关系通过snd_soc_dapm_route结构来定义,关于如何用snd_soc_dapm_route结构来定义路径信息,参考linux-alsa详解10之DAPM详解3各种widget定义。通常,所有的路径信息会用
阅读全文
摘要:系统中注册的各种widget需要互相连接在一起才能协调工作,连接关系通过snd_soc_dapm_route结构来定义,关于如何用snd_soc_dapm_route结构来定义路径信息,请参考:ALSA声卡驱动中的DAPM详解之三:如何定义各种widget中的"建立widget和route"一节的内
阅读全文
摘要:前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path。之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开始,我们要从代码入手,分析dapm的详细工作原理,主要以下几个方面: (1)如何注册widget;
阅读全文
摘要:上一节中,介绍了DAPM框架中几个重要的数据结构:snd_soc_dapm_widget,snd_soc_dapm_path,snd_soc_dapm_route。其中snd_soc_dapm_path无需我们自己定义,它会在注册snd_soc_dapm_route时动态地生成,但是对于系统中的wi
阅读全文
摘要:上节中介绍的音频驱动中对基本控制单元的封装:kcontrol。利用kcontrol,我们可以完成对音频系统中的mixer,mux,音量控制,音效控制,以及各种开关量的控制,通过对各种kcontrol的控制,使得音频硬件能够按照我们预想的结果进行工作。同时我们可以看到,kcontrol还是有以下几点不
阅读全文
摘要:DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成。用户
阅读全文
摘要:前面的内容我们提到,ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个
阅读全文
摘要:1. Codec简介 在移动设备中,Codec的作用可以归结为4种,分别是: (1)对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号 (2)对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号 (3)对音频通路进行控制,比如播放音乐,
阅读全文
摘要:1 Platform驱动在ASoC中的作用 前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的
阅读全文
摘要:1 ASoC的由来 ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系.在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性。 Codec驱动与SoC CPU的底层耦合过于
阅读全文
摘要:1 control设备简介 Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等.对于Mixer(混音)来说,Control接口显得尤为重要,从ALSA 0.9.x版本开始,所有的mixer工作都是通过control接口的API来实现
阅读全文
摘要:1 pcm设备介绍 PCM是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制.我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅
阅读全文
摘要:1 alsa的简单介绍 ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构。 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供
阅读全文
摘要:在linux内核中list的使用很频繁,使用管理对象,下面来详细说明其用法。 1链表结构定义 首先看链表的定义,位于:include\linux\types.h 1 struct list_head { 2 struct list_head *next, *prev; 3 }; 一般将该数据结构嵌入
阅读全文
摘要:一 I2C核心层源码分析 1 I2C子系统注册函数:i2c_init 定义位于:drivers\i2c\i2c-core.c 1 static int __init i2c_init(void) 2 { 3 int retval; 4 5 retval = bus_register(&i2c_bus
阅读全文
摘要:1 I2C的总体架构框图如下: 1.1 包括三大部分:I2C核心层、I2C总线驱动和I2C设备驱动。 (1)I2C核心层(i2c-core)提供了I2C总线驱动(适配器)和设备驱动的注册、注销方法,I2C通信方法(”algorithm”)上层的,与具体硬件无关的代码以及探测设备检测设备地址的上层代码
阅读全文
摘要:linux内核给了一个spi驱动的实例。 driver/spi/spidev.c 1 spi_driver.c 1 #include <linux/init.h> 2 #include <linux/module.h> 3 #include <linux/ioctl.h> 4 #include <l
阅读全文
摘要:所有的应用程序使用dev/目录下创建的设备,这些字符设备的操作函数集在文件spidev.c中实现。 1 static const struct file_operations spidev_fops = { 2 .owner = THIS_MODULE, 3 /* REVISIT switch to
阅读全文

浙公网安备 33010602011771号