兰州网站设计公司有哪些,网站怎么做备案号超链接,企业vi设计的基本要素,我国的课程一般通过1、简单了解一下ASOC 在嵌入式系统里面的声卡驱动为ASOC#xff08;ALSA System on Chip#xff09; #xff0c;它是在ALSA 驱动程序上封装的一层 分为3大部分#xff0c;Machine#xff0c;Platform和Codec ,三部分的关系如下图所示#xff1a;其中Machine是指我们的… 1、简单了解一下ASOC 在嵌入式系统里面的声卡驱动为ASOCALSA System on Chip 它是在ALSA 驱动程序上封装的一层 分为3大部分MachinePlatform和Codec ,三部分的关系如下图所示其中Machine是指我们的开发板Platform是指Soc,而Codec是指编解码器如uda1341 1machine:单板相关内容开发板所用的主芯片Platform是指Soc、编解码芯片(codec)是哪一个。主芯片里的IIS接口DAI(全称Digital Audio Interface)接口接到哪里去.CPU DAI是哪一个codec DAI是哪一个DMA是哪个 2platform:平台相关内容。IISDAI设置接口和DMA传输数据 3codec:DAI和控制接口控制音量 内核带有uda1341的驱动程序但是没有wm8976的驱动程序 2、以uda1341驱动分析 1machine :对应内核中的S3c24xx_uda134x.c程序 构造snd_soc_card结构体 主要关心snd_soc_card结构体里面的snd_soc_dai_link结构体这个结构体指明了用哪一款platform,用哪一款codec,用里面的哪一个DAI、DMA等。 Machine相关 3、S3c24xx_uda134x.c分析 1定义了一个platform_driver结构体 当内核里有同名的平台驱动platform_driver结构体和平台设备platform_device结构体probe函数就会被调用 2入口函数 通过宏module_plateform_driver定义 在Platform_device.h定义 module_driver的宏定义关键字_init表示入口函数关键字_exit表示出口函数 3归纳注册platform_driver,也就是平台驱动部分 module_platform_driver(xxx) 最终展开后就是如下形式 static int __init xxx_init(void) { return platform_driver_register(xxx); } module_init(xxx_init); static void __exit xxx_init(void) { return platform_driver_unregister(xxx); } module_exit(xxx_exit); 由上述定义可知module_platform_driver()宏的作用就是定义指定名称的平台设备驱动注册函数和平台设备驱动注销函数并且在函数体内分别通过platform_driver_register()函数和platform_driver_unregister()函数注册和注销该平台设备驱动 有平台驱动platform_driver结构体在内核里会有同名的平台设备platform_device结构体 4probe函数分析 初始化了一些引脚 分配一个名为soc-audio的平台设备有平台设备必定有平台驱动以soc-audio搜索在Soc-core.c函数里面有对应的平台驱动 设置平台设备的私有数据私有数据设置为snd_soc_card结构体 添加平台设备 5snd_soc_card结构体 4、Mach-mini440.c分析同名的platform_device结构体在内核搜索名字 1同名的platform_device结构体 5、Soc-core.c分析 1platform_driver结构体名字对应probe函数的platform_driver结构体。当存在同名的平台设备和平台驱动时又一probe函数被调用 2入口函数 注册平台驱动结构体soc_driver 3probe函数 从平台设备里面得到一个snd_soc_card结构体 然后注册snd_soc_card结构体 6、snd_soc_card结构体 1snd_soc_card结构体 2dai_link(根据名字找到对应的驱动程序) 根据codec_name知道用哪一个编解码芯片 codec_dai_name表示codec芯片里的哪一个接口有些编解码芯片有多个接口 cpu_dai_name表示2440那一侧的dai接口IIs接口 platform_name表示DMA 3operation结构体 platform 相关 I2S相关 7、plarform 划分 (1)分为和CPU DAI两部分 根据cpu_dai_name找到对应的驱动程序S3c24xx-i2s.c核心是and_soc_dai_driver结构体设置CPU这一侧的I2S控制器 根据platform_name用于指定用哪一个DMA搜索platform_namesamsang-audio,找到对应的驱动程序Dma.c核心是snd_soc_platform_driver结构体 8、S3c24xx-i2s.c分析 1定义平台驱动结构体有平台驱动结构体必有平台设备结构体根据同名搜索在Devs.c里有有同名时probe函数被调用 2probe函数 注册cpu_dai(Digital Audio Interface) 里面的s3c24xx_i2s_dai结构体 下面的playback用于播放capture用于录音最大/最少所支持的通道channels_max和channels_min采样频率rates,支持的格式formats 还有operation结构体里面有相关函数 hw_params是设置硬件参数函数 set_fmt是设置格式函数 set_clkdiv是设置分频系数 9、Devs.c分析 1平台设备结构体 要使平台设备结构体起作用要有相应的平台驱动 DMA相关 10、Dma.c分析 1平台驱动结构体 probe函数只有在有同名的probe_device才会被调用 2probe函数 注册一个snd_soc_platform_driver结构体 snd_soc_platform_driver结构体用于数据传输 snd_pcm_ops结构体包含相关的操作函数 11、Devs.c分析 1平台设备结构体 codec相关 12、codec 根据code_name找到编解码芯片在udall34x.c 控制接口构造snd_soc_codec_driver结构体 DAIsnd_soc_dai_driver结构体 13、udal34x.c分析 1平台驱动结构体 里面的probe函数只有在内核有同名的平台设备的时候才被调用 2probe函数 注册 根据下面可知上面参数的类型 snd_soc_codec_driver结构体 对应L3接口读写里面的寄存器 snd_soc_dai_driver结构体 这个名字对应的是snd_soc_card结构体里面的dai_link里的名字成员具有录音和播放功能还有一个operation结构体 codec芯片I2S 接口操作函数 digital_mute是静音函数set_sysclk是设置时钟函数 14、Mach-mini2440.c分析 1platform_device结构体 转自http://blog.csdn.net/qingkongyeyue/article/details/52349120 转载于:https://www.cnblogs.com/alan666/p/8311872.html