应用层对输入设备的基本使用主要是集中在读取相应的事件方面,具体事件传给哪个应用则是属于应用框架的范畴,与具体的UI控制紧密关联。对于Android框架来说,输入设备的相关操作是在EventHub中实现的,首先需要检查所有的输入文件,其是通过inotify来实现的。......
2023-11-22
应用程序主要分为控制和pcm流的操作两部分。下面以两个例子进行介绍。
首先介绍控制部分的操作,对音频的控制,主要是各个不同通道mixer的控制,下面先看看打开的流程:
从代码中可见,主要的操作就是通过相应的ioctl命令获得所有控制元素的信息。对应的还需要读取和写入控制元素指定数据的接口,细节如下:
从分析中可见,控制元素中的内容读写也是通过ioctl来进行的,不过内容是一个整体,在修改的时候需要先读取,修改指定内容后再写回。
了解控制流程后,还需了解pcm数据流的操作过程。具体应用层的例子如下:
这里的例子代码重点在表述操作流程,移除了相关的错误处理部分,其主要流程还是通过ALSA应用层的接口进行操作,主要是打开、设置,然后进行数据操作。
对Android框架音频设备的适配,Android将其作为HAL层的模块,相应的模块编译成动态库,运行时由上层框架进行加载。下面以DM3730 Android的适配代码为例进行说明。(www.chuimin.cn)
首先是HAL模块说明。
模块说明中ID表示是音频设备的适配模块,操作接口是methods,其内容如下:
从中可见主要是open操作接口。具体的内容如下:
相关的操作就是填充系统需要的接口,这些接口包括控制接口和数据接口。在数据流方面Android将音频流中的playback和capture作为output stream和input stream,这里对应stream的open和close操作。当需要打开时,相应的stream会调用open接口。以input stream操作为例,看一下其详细内容:
其中仍是接口的设置,但可见其中的设置基本与pcm相关的参数一致,实际的适配就是完成以上的接口函数。
以上具体的接口无论是控制接口还是数据接口都会通过Android提供Tiny ALSA来实现相应的功能,Tiny ALSA实际是ALSA应用层库的简化。适配本身就是按照设备具体的情况进行控制流和数据流接口的实现。
有关深入剖析Linux内核与设备驱动的文章
应用层对输入设备的基本使用主要是集中在读取相应的事件方面,具体事件传给哪个应用则是属于应用框架的范畴,与具体的UI控制紧密关联。对于Android框架来说,输入设备的相关操作是在EventHub中实现的,首先需要检查所有的输入文件,其是通过inotify来实现的。......
2023-11-22
对视频应用来说,主要就是获取视频流的操作。设备的适配同样需要实现HAL层,相应的HAL层实体初始化的操作如下:Android框架加载了相应的HAL模块后,就会通过相应的camera_ops来操作,而这些操作都是适配操作,实际上是调用V4L2CameraHardware中的实际为CameraHardware的函数。Android的适配在使用流程上与应用的实例是相同的,只是在操作上封装成不同的接口,而且将参数与数据流控制分离,这样方便了管理,也易于与其他模块交互。......
2023-11-22
目前Linux内核的音频框架采用ALSA架构,该架构的设计充分考虑了以上各种需求。1整体设备管理这里主要对于ALSA架构的驱动部分进行解析。下面来看看相关代码:图6-13ALSA整体框架从代码中可以了解不同的设备类型以及设备特点。这种数量的关系一定要明确。对众多的音频设备来说,CONTROL、PCM_PLAYBACK和PCM_CAPTURE是一定要存在的,其他的设备根据具体情况可有可无。......
2023-11-22
实际音频驱动的分析会以DM 3730的相关驱动为例进行说明。图6-17引自《DM 3730芯片手册》中第3096页框图。下面来看看dai相关的实现细节。4codec模块对codec模块部分,之前在codec的注册函数snd_soc_register_codec定义可见其会将co-dec driver和codec侧的dai同时注册,因为这两者都是与codec相关的。这里以DM3 730板上的twl4030为例,介绍相关的框架。对于codec主要是由codec driver来提供控制接口,而由codec dai来提供数据传输能力。......
2023-11-22
对于音频驱动的电源管理部分,ALSASoC框架层提供了基本的电源管理框架,之前在其与底层platform关联的platform driver中可见有电源管理的操作接口soc_pm_ops。DAPM是dynamic audio power management的缩写。DAPM的目的是降低音频设备的功耗。在实现过程中通过将与音频路径相关的kcontrol控制元素包含进DAPM管理实体,就可以监控系统设置以及应用设置导致的状态变化,从而进行正确的操作。这样就完整实现了整个音频的电源管理功能。......
2023-11-22
SPI总线框架对这两类设备进行管理,具体的框架如图7-6所示。通常的SPI驱动都是在内核实现并在内核态执行的,所以就不对spidev进行详细的分析。SPI总线框架整体的功能就是这样,接下来看看具体各部分的实现。在SPI总线框架中相应的实体是spi_board_info,内容如下:其中的主要信息是与总线信号相关的属性。......
2023-11-22
VFS的实现是以“一切皆是文件”为需求出发点的。要理解VFS的框架首先看一下VFS和系统的静态关系框图,如图5-1所示。从图5-1可见,VFS是用户层的直接接口,是面向用户的服务。图5-1VFS和系统静态关系图在图5-2中每个节点被使用时都会在VFS层中创建dentry,这样可以快速通过文件名进行查找和定位,Linux内核中对dentry的管理组织形式如图5-3所示。以上是系统运行时VFS对文件名的组织管理,这是VFS管理的一个方面。......
2023-11-22
也正是因为Linux内核的唯一性,各个不同发布版本拥有相同的框架。Linux内核是在整个Linux系统的最底层,它负责管理硬件,运行用户程序,并保持系统整体的安全性和完整性。可以说是Linux系统的根和灵魂。图3-1中看到Linux内核还有另一层面的含义。这对于Linux内核同样适用。所以对Linux内核的剖析、学习和研究也不能独立于系统进行,而是要综合考虑应用、内核和硬件等各方面的信息和内容。这样才能更全面、深刻地理解Linux内核。......
2023-11-22
相关推荐