第10章 音频设备驱动程序移植 Linux系统移植(第2版) 教学课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

return 0; }
10.2.4 OSS释放函数oss_cleanup()
static void __exit oss_cleanup(void)
10.2 Linux音频设备驱动—— OSS驱动框架
10.2.1 OSS驱动架构硬件 10.2.2 OSS驱动架构代码 10.2.3 OSS初始化函数oss_init() 10.2.4 OSS释放函数oss_cleanup() 10.2.5 打开设备文件函数sound_open() 10.2.6 录音函数sound_read() 10.2.7 播放函数sound_write() 10.2.8 控制函数sound_ioctl()
IIS接口在20世纪80年代首先被飞利浦用于消 费音频,并在一个称为LRCLK(Left/Right CLOCK)的信号机制中经过多路转换,将 两路音频信号合成单一的数据队列。当 LRCLK信号为高时,左声道数据被传输; LRCLK信号为低时,右声道数据被传输。
IIS接口的特点:与PCM相比,IIS接口更适 用于立体声系统。对于多通道系统,在同样 的BCLK和LRCLK条件下,也可以并行执行 几个数据队Βιβλιοθήκη Baidu。
第10章 音频设备驱动程序移植
10.1 音频设备接口 10.2 Linux音频设备驱动——OSS驱动框
架 10.3 Linux音频设备驱动——ALSA驱动
框架 10.4 音频设备应用程序编写 10.5 音频设备驱动移植 10.6 音频播放程序madplay的移植
10.1.2 IIS(Inter-IC Sound)接 口
}
/*Protecting the innocent*/ sound_dmap_flag = (dmabuf > 0 ? 1 : 0); /*创建设备列表中的设备,并且注册它到系统文件中。*/
10.2.3 OSS初始化函数oss_init()
for (i = 0; i < ARRAY_SIZE(dev_list); i++) {
sequencer和sequencer2。*/ err = create_special_devices(); if (err) { printk(KERN_ERR "sound: driver already loaded/included in kernel
\n"); return err;
device_create(sound_class, NULL,
MKDEV(SOUND_MAJOR, dev_list[i].minor), NULL,
"%s", dev_list[i].name);
if (!dev_list[i].num)
continue; /*如果设备列表的某项数目多于1个则创建剩下的设备,并且注册它们到系统文件中*/ for (j = 1; j < *dev_list[i].num; j++) device_create(sound_class, NULL,
10.2.3 OSS初始化函数oss_init()
static int __init oss_init(void)
{
int
err;
int i, j;
#ifdef CONFIG_PCI if(dmabug) isa_dma_bridge_buggy = dmabug; #endif /*函数criecaet(e)_注sp册ec声ial音_d结ev点ice,s(根)最据终第调二用个函参数数re来gis指te定r_s声ou音nd结_s点pe的cia类l_型de。v- 这里指定注册了两个设备
MKDEV(SOUND_MAJOR,
dev_list[i].minor + (j*0x10)),
NULL, "%s%d", dev_list[i].name, j);
}
if (sound_nblocks >= 1024)
printk(KERN_ERR "Sound warning: Deallocation table was too small. \n");

10.2.2 OSS驱动架构代码
当vwsnd驱动模块被加载时函数init_vwsnd()被调用, 音频驱动被初始化,驱动初始化过程会查找硬件配置 和匹配相应的驱动程序。函数init_vwsnd()的主要内容 如下:
static int __init init_vwsnd(void) { //驱动的探针函数 if (!probe_vwsnd(&the_hw_config)) return -ENODEV; //驱动附着函数 err = attach_vwsnd(&the_hw_config); }
10.2.1 OSS驱动架构硬件
数字音频接口用来实现录音和播放声音的功 能。它的主要参数有:采样频率(电话为8K, DVD为96K)、channel数目(单声道,立体 声)、采样分辨率(8-bit,16-bit),对应的 设备文件为/dev/dsp。OSS驱动支持的硬件接 口有以下几种。
✓ mixer(混频器)接口 ✓ synthesizer(合成器)接口 ✓ MIDI(Musical Intrument Data Interface)接
10.1.3 AC97(Audio Codec 1997) 接口
AC97(Audio Codec 1997)是以Intel为首 的5个PC厂商共同提出的规格标准。 AC97除了是一种数据格式还具有控制功 能,用于音频编码的内部架构规范。 AC97特点:与控制接口分离的IIS方案相 比,AC97明显减少了整体管脚数。它是 一种数据格式还具有控制功能。
10.1.4 Linux音频设备驱动框架
针对音频设备,Linux内核附有两类音频设备驱 动框架:OSS(Open Sound System)和ALSA (Advanced Linux Sound Architecture)。在内核 配置时,选择Device Drivers |Sound card support 命令进入Sound card support配置窗口。
相关文档
最新文档