收藏 分享(赏)

手机开发培训 07_Android的Audio系统.pdf

上传人:魏子好的一塌糊涂的文献 文档编号:3043151 上传时间:2020-11-06 格式:PDF 页数:27 大小:200.70KB
下载 相关 举报
手机开发培训 07_Android的Audio系统.pdf_第1页
第1页 / 共27页
手机开发培训 07_Android的Audio系统.pdf_第2页
第2页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、 Android 的 Linux 内核与驱动程序 Android 的 Linux 内核与驱动程序 第一部分 Linux 核心与驱动 第二部分 Android 专用驱动 第三部分 Android 使用的设备驱动 第一部分 Linux 核心与驱动 Android 使用标准的 Linux2.6 内核, 作为其操作系统。 Android 1.0 (release-1.0 ) 使用 Linux2.6.25 Android 1.5 (sdk-1.5_r1) 使用 Linux2.6.27 Android 1.6 (sdk-1.6_r1) _ 使用 Linux2.6.29 第一部分 Linux 核心与驱动 获

2、取通用内核的代码:获取通用内核的代码: $ git clone git:/android.git.kernel.org/kernel/common.git kernel/common.git 为通用 Kernel 的工程名称。 Android1.5 之前的版本具有 kernel 目录,其中也是参考 的 kernel 。 第一部分 Linux 核心与驱动 Android Linux 内核的配置和编译:内核的配置和编译: $ make ARCH=arm goldfish_defconfig .config $ make ARCH=arm CROSS_COMPILE=path/arm-none-li

3、nux-gnueabi- Android 通用的 Kernel 使用的处理器为 goldfish ,这是 一种 ARM 处理器。这个 Linux 编译生成的结果在 Android 的模拟器中使用。 第一部分 Linux 核心与驱动 Goldfish 处理器的编译结果: vmlinux 为内核的 ELF 文件, zImage 为内核的压缩映 像文件。 LD vmlinux SYSMAP System.map SYSMAP .tmp_System.map OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready AS arch

4、/arm/boot/compressed/head.o GZIP arch/arm/boot/compressed/piggy.gz AS arch/arm/boot/compressed/piggy.o CC arch/arm/boot/compressed/misc.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready vmlinux 和 zImage 分别对应 Android 代码 prebuilt 中的预编译的 arm 内核。 第一

5、部分 Linux 核心与驱动 Android 模拟器使用的处理器的 goldfish 的配置文件为: arch/arm/mach-goldfish # # System Type # CONFIG_ARCH_GOLDFISH=y # # Android # CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_LOGGER=y # CONFIG_ANDROID_RAM_CONSOLE is not set CONFIG_ANDROID_TIMED_OUTPUT=y CONFIG_ANDROID_LOW_MEMORY_KILLER

6、=y # # Networking options # CONFIG_ANDROID_PARANOID_NETWORK=y # # UBI - Unsorted block images # CONFIG_ANDROID_PMEM=y 第一部分 Linux 核心与驱动 goldfish 是一种 ARM 处理器,其 核心内容的路径为: arch/arm/mach-goldfish Android 还需要在标准的 Linux 内核中需要增加必要的驱动,用于对系 统用户程序的支持。在 android 中的 驱动主要分成两种类型: Android 专用驱动 Android 使用的设备驱动 第二部分 A

7、ndroid 专用驱动 2.1 Ashmem 2.2 binder 2.3 logger 第二部分 Android 专用驱动 Ashmem : 匿名共享内存驱动 Logger : 轻量级的 log 驱动 Binder 驱动( 驱动( Binder Driver ):): 基于 OpenBinder 驱动,为 Android 平台提供 IPC 的支持 能源管理(能源管理( Android Power Management ):): 轻量级的能源管理,基于 Linux 的能源管理,为嵌入 式系统做了优化 Android Power Management ( PM ):): 定时器驱动,用于唤醒设备

8、 Low Memory Killer : 在缺少内存的情况下,杀死进程 Android PMEM : 物理内存驱动 Android 的 Ashmem 的含义为: Anonymous Shared Memory 匿名共享内 存,通过内核的机制,为用户空间程序提供分 配内存的机制。 Ashmem 设备节点名称: /dev/ashmem 主设备号为 10 ( Misc Driver ) 次设备号动态生成 2.1 Ashmem 2.1 Ashmem Ashmem 的代码路径: kernel/include/linux/ashmem.h kernel/mm/ashmem.c 在用户空间 C libuti

9、l 库对 Asheme 封装 并提供接口: system/core/include/cutils/ashmem.h system/core/libcutils/ashmem-dev.c system/core/libcutils/ashmem-host.c 2.1 Binder Android 的 Binder 驱动程序为用户 层程序提供了 IPC (进程间通信)的支 持, Android 整个系统的运行依赖 Binder 驱动 Binder 设备节点名称: /dev/binder 主设备号为 10 ( Misc Driver ) 次设备号动态生成 2.1 Ashmem binder 的代码路

10、径: kernel/include/linux/binder.h kernel/drivers/misc/binder.c 在用户空间 libutil 工具库和 Service Manager 守护进程调用 Binder 接口提供对整个 系统的支持: frameworks/base/cmds/servicemanager/ frameworks/base/include/utils/ frameworks/base/libs/utils/ 2.1 Logger Android 的 Logger 驱动程序为用 户层程序提供 Log 的支持,这个驱动作为 一个工具来使用。 Logger 有三个设备

11、节点: /dev/log/main /dev/log/event /dev/log/radio 主设备号为 10 ( Misc Driver ) 次设备号动态生成 2.1 Ashmem Logger 驱动的代码路径: kernel/include/linux/logger.h kernel/drivers/misc/logger.c 在用户空间 logcat 程序调用 Logger 驱 动: system/core/logcat/ 第三部分 Android 使用的设备驱动 3.1 framebuffer 驱动 3.2 Event 输入设备驱动 3.3 v4l2 摄像头视频驱动 3.4 OSS

12、音频驱动 3.5 ALSA 音频驱动 3.6 MTD 驱动 3.7 蓝牙驱动 3.8 Wlan 驱动 3.1 framebuffe 显示驱动 显示驱动使用 framebuffer 驱动。 framebuffer 驱动的设备节点: /dev/fb0 /dev/graphics/fb0 主设备号为 29 ,次设备号递增生成。 代码路径: include/linux/fb.h drivers/video/fbmem.c 3.1 framebuffe 显示驱动 显示硬件(LCD硬件) 字符设备驱动程序核心 具体Framebuffer驱动 (实现struct fb_info) 注册调用 注册调用 硬件

13、操作 /dev/fbX 设备号(29,X) 文件接口调用(ioctl/mmap/write) 用户空间 硬件层 内核空间 register_framebuffer Framebuffer驱动核心 (fbmem.c) 3.2 Event 输入设备驱动 输入设备的驱动通常使用 Input 设备中的 Event 设备。 Event 的字符设备的设备节点: /dev/input/eventX 主设备号为 13 ,设备节点为 64-95 Input 驱动程序的头文件: include/linux/ input.h 代码路径: drivers/input/input.c :核心代码 drivers/inp

14、ut/evdev.c : Event 部分的 实现。 3.2 Event 输入设备驱动 鼠标、键盘、触摸屏等硬件 字符设备驱动程序核心 具体Event驱动 (实现struct input_dev) 注册调用 注册调用 硬件 操作 /dev/input/eventX Event设备号 (13,64+) 文件接口调用(ioctl/poll/read) 用户空间 硬件层 内核空间 input_register_device Event (edev.c) 鼠标 (mousedev.c) 游戏杆 (joydev.c) Input驱动核心 (input.c) 3.3 v4l2 摄像头视频驱动 摄像头( C

15、amera )视频驱动驱动通常使用 Video For Linux 。 v4l2 驱动的设备节点: /dev/video/videoX 主设备号为 81 ,次设备号 0-63 。 v4l2 驱动主要头文件路径: include/linux/videodev.h : v4l 第一版的头文件 include/linux/videodev2.h :定义主要的数据接口和常量 include/media/v4l2-dev.h :设备头文件,具体设备使用其中的接口注册 v4l2 驱动核心实现路径: driver/media/video/v4l2-dev.c 3.3 v4l2 摄像头视频驱动 摄像头 字符设

16、备驱动程序核心 具体V4L2驱动 (实现struct video_device) 注册调用 注册调用 硬件 操作 /dev/video V4L2设备号 (81,X) 文件接口调用(ioctl/mmap) 用户空间 硬件层 内核空间 video_register_device V4L2驱动核心 (v4l2-dev.c) 视频输出设备 3.4 OSS 音频驱动 OSS ( Open Sound System )开放声音 系统。 OSS 驱动的设备节点: /dev/mixer /dev/sndstat /dev/dsp OSS 主设备号为 14 ,次设备号为各个设 备。 OSS 驱动程序的主要头文件

17、: include/linux/soundcard.h : OSS 驱动的主要头文件 include/linux/sound.h :定义 OSS 驱动的次设备号和注册函数 OSS 驱动程序的核心: sound/sound_core.c 3.4 OSS 音频驱动 音频设备 字符设备驱动程序核心 具体OSS驱动 (实现各个设备的struct file_operations) 注册调用 注册调用 硬件 操作 OSS设备号(14,X) 文件接口调用(ioctl/read/write) 用户空间 硬件层 内核空间 register_sound_mixer register_sound_dsp regis

18、ter_sound_midi OSS驱动核心 (sound_core.c) /dev/mixer/dev/XXX/dev/dsp 3.5 ALSA 音频驱动 ALSA ( Advanced Linux Sound Architecture )高级 Linux 声音体系。 ALSA 驱动的设备节点: /dev/snd/controlCX /dev/snd/pcmXXXc /dev/snd/pcmXXXp /dev/snd/seq /dev/snd/timer 主设备号为 116 ,次设备号为各个设备。 ALSA 驱动程序的头文件: include/sound/asound.h : ALSA 驱动

19、的主要头文件 include/sound/core.h : ALSA 驱动核心数据结构和具体驱动的注册 函数 ALSA 驱动程序的核心实现: sound/core/sound.c 3.5 ALSA 音频驱动 音频设备 字符设备驱动程序 具体ALSA驱动 (实现数据设备和控制设备的结构) 注册调用 注册调用 硬件 操作 ALSA设备号(116,X) 文件接口调用 (ioctl/read/write) 用户空间 硬件层 内核空间 ALSA驱动核心(core.c) /dev/snd/controlCX /dev/snd/pcmXXXc /dev/snd/pcmXXXp ALSA 库 ALSA 工具

20、ALSA用户空间接口 控制设备 (control.c) 数据设备 (pcm.c) snd_pcm_new和 snd_ctl_add等接口 3.5 MTD 驱动 Flash 驱动通常使用 MTD ( memory technology device ),内存技术设备。 MTD 的字符设备: /dev/mtdX 主设备号为 90 。 MTD 的块设备: /dev/block/mtdblockX 主设备号为 13 。 MTD 驱动程序头文件路径: include/linux/mtd/mtd.h MTD 源代码路径: drivers/mtd/mtdcore.c : MTD 核心,定义 MTD 原始设备

21、 drivers/mtd/mtdchar.c : MTD 字符设备 drivers/mtd/mtdblock.c : MTD 块设备 3.5 MTD 驱动 Nor Flash 或者 Nand Flash MTD原始设备 (mtdcore.c) MTD字符设备号 (90,X) 硬件层 MTD字符设备 (mtdchar.c) MTD块设备 (mtdblock.c) Flash驱动程序 (实现struct mtd_info) 注册 调用 MTD块设备号 (31,X) /dev/mtdX/dev/block/mtdblockX 文件 系统 add_mtd_device 3.6 蓝牙驱动 在 Linux

22、 中,蓝牙设备驱动是网络设备,使用 网络接口。 蓝牙设备的网络协议: 协议族: AF_BLUETOOTH ( 31 ) 蓝牙协议部分头文件: include/net/bluetooth/hci_core.h include/net/bluetooth/bluetooth.h 蓝牙协议源代码文件: net/bluetooth/* 蓝牙驱动程序部分的文件: drivers/bluetooth/* 3.6 蓝牙驱动 蓝牙的驱动程序一般都通过标准的 HCI 控制实 现。但根据硬件接口和初始化流程的不同,又存在一 些差别。这类初始化动作一般是一些晶振频率,波特 率等基础设置。比如 CSR 的芯片一般通过

23、 BCSP 协议 完成最初的初始化配置,再激活标准 HCI 控制流程。 对 Linux 来说,一旦 bluez 可以使用 HCI 与芯片建立 起通信 ( 一般是 hciattach + hciconfig) ,便可以 利用其上的标准协议 (SCO, L2CAP 等 ) ,与蓝牙通信 ,使其正常工作了。 3.7 Wlan 驱动 在 Linux 中, Wlan 设备驱动是网络设备,使用 网络接口。 Wlan 在用户空间使用标准的 socket 接 口进行控制。 WIFI 协议部分头文件: include/net/wireless.h WIFI 协议部分源文件: net/wireless/* WIF

24、I 驱动程序部分: drivers/net/wireless/* 谢谢! 寵鼅夀邍蜀邍腎偧T開偧沖汓琀瑓瀀搀昀蜀誻欁Y上传资源获取1文币您在2020-11-06 23:57:11上传资源【乌鲁木齐高铁枢纽综合开发建设投资有限公司公司债券2020年半年度财务报告及附注.pdf】审核通过获取1文币0寵夀邍蜀邍腎偧镎偧沖汓琀瑓瀀搀昀蜀耀諆欁瀀Y上传资源获取1文币您在2020-11-06 23:57:20上传资源【乌鲁木齐城市建设投资(集团)有限公司2017年财务报表及附注.pdf】审核通过获取1文币0寵夀邍蜀邍腎偧開偧沖琀桢瀀搀昀蜀耀諆欁瀀Y上传资源获取1文币您在2020-11-06 23:57:20上传资源【乌鲁木齐城市建设投资(集团)有限公司2017年财务报表及附注.pdf】审核通过获取1文币0

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 技术总结

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报