当前位置:首页 > 工业技术
Android底层驱动分析和移植
Android底层驱动分析和移植

Android底层驱动分析和移植PDF电子书下载

工业技术

  • 电子书积分:21 积分如何计算积分?
  • 作 者:高金昌,张明星编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302397458
  • 页数:798 页
图书介绍:本书从获取源码和源码结构分析讲起,分基础知识、专有驱动和设备驱动三个部分详细剖析了Android的音频系统、视频系统、震动系统、蓝牙系统、WiFi系统、电源管理系统、物理内存系统、时钟系统、USB系统等底层驱动的知识。在讲解每一个驱动时,从Android系统源码入手,遵循“内核分析—驱动实现—JNI层分析—Java应用层—系统移植和改造”这一主线,彻底剖析了每一个驱动系统的完整实现流程。
《Android底层驱动分析和移植》目录

第1篇 基础知识篇 2

第1章 Android底层开发基础 2

1.1 Android系统介绍 2

1.2 Android系统架构介绍 2

1.2.1 底层操作系统层(OS) 3

1.2.2 各种库(Libraries)和Android运行环境(RunTime) 3

1.2.3 应用程序框架(Application Framework) 4

1.2.4 顶层应用程序(Application) 4

1.3 获取Android源码 5

1.3.1 在Linux系统中获取Android源码 5

1.3.2 在Windows平台上获取Android源码 7

1.4 分析Android源码结构 9

1.4.1 总体结构 10

1.4.2 应用程序部分 11

1.4.3 应用程序框架部分 13

1.4.4 系统服务部分 13

1.4.5 系统程序库部分 15

1.4.6 系统运行库部分 18

1.4.7 硬件抽象层部分 19

1.5 编译源码 20

1.5.1 搭建编译环境 20

1.5.2 在模拟器中运行 22

1.5.3 编译源码生成SDK 23

第2章 Android驱动开发基础 28

2.1 驱动程序基础 28

2.1.1 什么是驱动程序 28

2.1.2 驱动开发需要做的工作 29

2.2 Linux开发基础 30

2.2.1 Linux简介 30

2.2.2 Linux的发展趋势 31

2.2.3 Android基于Linux系统 31

2.2.4 Android和Linux内核的区别 32

2.2.5 Android独有的驱动 34

2.2.6 为Android构建Linux的操作系统 35

2.3 Linux内核结构 35

2.3.1 Linux内核的体系结构 35

2.3.2 和Android驱动开发相关的内核知识 37

2.4 分析Linux内核源码 40

2.4.1 源码目录结构 40

2.4.2 浏览源码的工具 42

2.4.3 GCC特性 43

2.4.4 链表的重要性 46

2.4.5 Kconfig和Makefile 48

2.5 学习Linux内核的方法 50

2.5.1 分析USB子系统的代码 50

2.5.2 分析USB系统的初始化代码 50

2.6 Linux中的3类驱动程序 54

2.6.1 字符设备驱动 54

2.6.2 块设备驱动 61

2.6.3 网络设备驱动 65

2.7 Android系统移植基础 65

2.7.1 移植的任务 65

2.7.2 需要移植的内容 66

2.7.3 驱动开发需要做的工作 67

2.8 内核空间和用户空间之间的接口 67

2.8.1 内核空间和用户空间的相互作用 67

2.8.2 实现系统和硬件之间的交互 67

2.8.3 从内核到用户空间传输数据 69

2.9 编写J NI方法 72

第3章 主流内核系统解析 76

3.1 Goldfish内核和驱动解析 76

3.1.1 Goldfish基础 77

3.1.2 Logger驱动 78

3.1.3 Low Memory Killer组件 79

3.1.4 Timed Output驱动 79

3.1.5 Timed Gpio驱动 80

3.1.6 Ram Console驱动 80

3.1.7 Ashmem驱动 81

3.1.8 Pmem驱动 81

3.1.9 Alarm驱动 81

3.1.10 USB Gadget驱动 82

3.1.11 Paranoid驱动介绍 82

3.1.12 Goldfish的设备驱动 83

3.2 MSM内核和驱动架构 85

3.2.1 高通公司介绍 85

3.2.2 常见的MSM处理器产品 86

3.2.3 MSM内核移植 87

3.2.4 Makefile文件 88

3.2.5 驱动和组件 90

3.2.6 设备驱动 92

3.2.7 高通特有的组件 94

第2篇 Android专有驱动篇 98

第4章 分析硬件抽象层 98

4.1 HAL基础 98

4.1.1 推出HAL的背景 98

4.1.2 HAL的基本结构 99

4.2 分析HAL module架构 101

4.2.1 结构体hw_module_t 101

4.2.2 结构体hw_module_methods_t 102

4.2.3 结构体hw_device_t 103

4.3 分析文件hardware.c 103

4.3.1 寻找动态链接库的地址 103

4.3.2 数组variant_keys 104

4.3.3 载入相应的库 104

4.3.4 获得hw_module_t结构体 105

4.4 分析硬件抽象层的加载过程 106

4.5 分析硬件访问服务 109

4.5.1 定义硬件访问服务接口 109

4.5.2 具体实现 110

4.6 分析Mokoid实例 111

4.6.1 获取实例工程源码 112

4.6.2 直接调用service方法的实现代码 113

4.6.3 通过Manager调用service的实现代码 117

4.7 HAL和系统移植 120

4.7.1 移植各个Android部件的方式 120

4.7.2 设置设备权限 121

4.7.3 init.rc初始化 125

4.7.4 文件系统的属性 125

4.8 开发自己的HAL驱动程序 126

4.8.1 封装HAL接口 126

4.8.2 开始编译 129

第5章 Binder通信驱动详解 130

5.1 分析Binder驱动程序 130

5.1.1 数据结构binder_work 130

5.1.2 结构体binder_node 131

5.1.3 结构体binder_ref 132

5.1.4 通知结构体binder_ref_death 133

5.1.5 结构体binder_buffer 133

5.1.6 结构体binder_proc 134

5.1.7 结构体binder_thread 135

5.1.8 结构体binder_transaction 136

5.1.9 结构体binder_write_read 136

5.1.10 Binder驱动协议 137

5.1.11 枚举BinderDriverReturnProtocol 137

5.1.12 结构体binder_ptr_cookie和binder_transaction_data 138

5.1.13 结构体flat_binder_object 139

5.1.14 设备初始化 139

5.1.15 打开Binder设备文件 141

5.1.16 实现内存映射 142

5.1.17 释放物理页面 147

5.1.18 分配内核缓冲区 148

5.1.19 释放内核缓冲区 150

5.1.20 查询内核缓冲区 152

5.2 Binder封装库驱动 153

5.2.1 Binder的3层结构 153

5.2.2 Binder驱动的同事——类BBinder 154

5.2.3 BpRefBase代理类 157

5.2.4 驱动交互类IPCThreadState 158

5.3 初始化Java层Binder框架 160

5.3.1 搭建交互关系 161

5.3.2 实现Binder类的初始化 161

5.3.3 实现BinderProxy类的初始化 162

5.4 实体对象binder_node的驱动 163

5.4.1 定义实体对象 164

5.4.2 增加引用计数 165

5.4.3 减少引用计数 166

5.5 本地对象BBinder驱动 167

5.5.1 引用运行的本地对象 167

5.5.2 处理接口协议 173

5.6 引用对象binder_ref驱-动 177

5.7 代理对象BpBinder驱动 180

5.7.1 创建Binder代理对象 180

5.7.2 销毁Binder代理对象 181

第6章 Logger驱动架构详解 185

6.1 分析Logger驱动程序 185

6.1.1 分析头文件 185

6.1.2 驱动实现文件 186

6.2 日志库Liblog驱动 201

6.2.1 定义指针的初始化操作 202

6.2.2 记录日志 203

6.2.3 设置写入日志记录的类型 204

6.2.4 向Logger日志驱动程序写入日志记录 205

6.2.5 记录日志数据函数 206

6.3 日志写入接口驱动 206

6.3.1 C/C++层的写入接口 207

6.3.2 Java层的写入接口 208

第7章 Ashmem驱动详解 217

7.1 分析Ashmem驱动程序 217

7.1.1 基础数据结构 217

7.1.2 驱动初始化 218

7.1.3 打开匿名共享内存设备文件 219

7.1.4 内存映射 222

7.1.5 读写操作 223

7.1.6 锁定和解锁 225

7.1.7 回收内存块 230

7.2 C++访问接口层 231

7.2.1 接口MemoryHeapBase的服务器端实现 231

7.2.2 接口MemoryHeapBase的客户端实现 236

7.2.3 接口MemoryBase的服务器端实现 240

7.2.4 接口MemoryBase的客户端实现 242

7.3 实现Java访问的接口层 243

7.4 实战演练——读取内核空间的数据 247

第8章 搭建测试环境 250

8.1 搭建S3C6410开发环境 250

8.1.1 S3C6410介绍 250

8.1.2 OK6410介绍 251

8.1.3 安装minicom 251

8.1.4 烧写Android系统 253

8.2 其他开发环境介绍 257

8.2.1 基于Cortex-A8的DMA-210XP开发板 257

8.2.2 基于Cortex-A8的QT210开发板 258

8.2.3 X210CV3开发板 259

8.3 测试驱动的方法 259

8.3.1 使用Ubuntu Linux测试驱动 262

8.3.2 在Android模拟器中测试驱动 263

第9章 低内存管理驱动 266

9.1 OOM机制 266

9.1.1 OOM机制基础 266

9.1.2 分析OOM机制的具体实现 267

9.2 Android系统的Low Memory Killer 架构机制 273

9.3 Low Memory Killer驱动详解 274

9.3.1 Low Memory Killer驱动基础 274

9.3.2 分析核心功能 275

9.3.3 设置用户接口 278

9.4 实战演练——从内存池获取对象 280

9.5 实战演练——使用用户程序读取内核空间的数据 282

第3篇 典型驱动移植篇 286

第10章 电源管理驱动 286

10.1 Power Management架构基础 286

10.2 分析Framework层 287

10.2.1 文件PowerManager.java 287

10.2.2 提供PowerManager功能 288

10.3 JNI层架构分析 309

10.3.1 定义两层之间的接口函数 309

10.3.2 与Linux Kernel层进行交互 311

10.4 Kernel(内核)层架构分析 311

10.4.1 文件power.c 312

10.4.2 文件earlysuspend.c 314

10.4.3 文件wakelock.c 315

10.4.4 文件resume.c 317

10.4.5 文件suspend.c 317

10.4.6 文件main.c 318

10.4.7 proc文件 319

10.5 wakelock和early_suspend 319

10.5.1 wakelock的原理 319

10.5.2 early_suspend原理 320

10.5.3 Android休眠 321

10.5.4 Android唤醒 323

10.6 Battery电池系统架构和管理 323

10.6.1 实现驱动程序 324

10.6.2 实现JNI本地代码 325

10.6.3 Java层代码 325

10.6.4 实现Uevent部分 327

10.7 JobScheduler节能调度机制 331

10.7.1 JobScheduler机制的推出背景 331

10.7.2 JobScheduler的实现 332

10.7.3 实现操作调度 332

10.7.4 封装调度任务 335

第11章 PMEM内存驱动架构 339

11.1 PMEM初步 339

11.1.1 什么是PMEM 339

11.1.2 Platform设备基础 339

11.2 PMEM 驱动架构 341

11.2.1 设备实现 341

11.2.2 PMEM驱动的具体实现 343

11.2.3 调用PMEM驱动的流程 367

11.3 用户空间接口 367

11.3.1 释放位图内存 368

11.3.2 释放位图内存空间 369

11.3.3 获取位图占用内存 370

11.4 实战演练——将PMEM加入到内核中 370

11.5 实战演练——将PMEM加入到内核中 372

11.6 实战演练——PMEM在Camera中的应用 373

11.7 实战演练——PMEM的移植与测试 375

第12章 调试机制驱动Ram Console 378

12.1 Ram Console介绍 378

12.2 实现Ram Console 378

12.2.1 定义结构体ram_console_platform_data 379

12.2.2 实现具体功能 379

第13章 USB Gadget驱动 389

13.1 分析Linux内核的USB驱动程序 389

13.1.1 USB设备基础 389

13.1.2 USB和sysfs 393

13.1.3 urb通信 396

13.2 USB Gadget 驱动架构详解 401

13.2.1 分析软件结构 401

13.2.2 层次整合 411

13.2.3 USB设备枚举 421

13.3 实战演练——USB驱动例程分析 437

13.3.1 结构体usb_device_id 437

13.3.2 结构体usb_driver 439

13.3.3 注册USB驱动程序 440

13.3.4 加载和卸载USB骨架程序模块 441

13.3.5 探测回调函数 441

13.3.6 清理数据 443

13.3.7 函数skel_write()和skel_write_bulk_callback() 444

13.3.8 获取USB的接口 446

13.3.9 释放不需要的资源 447

13.3.10 字符设备函数 448

13.3.11 读取的数据量 449

13.4 实战演练 450

13.4.1 移植USB Gadget驱动 450

13.4.2 移植USB HOST驱动 452

第14章 Time Device驱动 453

14.1 Timed Output驱动架构 453

14.1.1 设备类 453

14.1.2 分析Timed Output驱动的具体实现 458

14.1.3 实战演练——实现设备的读写操作 460

14.2 Timed Gpio驱动架构 461

14.2.1 分析文件timed_gpio.h 462

14.2.2 分析文件timed_gpio.c 462

第15章 警报器系统驱动Alarm 467

15.1 Alarm系统基础 467

15.1.1 Alarm层次结构介绍 467

15.1.2 需要移植的内容 468

15.2 RTC驱动程序架构 468

15.3 Alarm驱动架构 469

15.3.1 分析文件android_alarm.h 469

15.3.2 分析文件alarm.c 471

15.3.3 分析文件alarm-dev.c 483

15.4 JNI层详解 491

15.5 Java层详解 493

15.5.1 分析AlarmManagerService类 493

15.5.2 分析AlarmManager类 501

15.6 模拟器环境的具体实现 503

15.7 实战演练 504

15.7.1 编写PCF8563芯片的RTC驱动程序 504

15.7.2 在2440移植RTC驱动程序 507

15.7.3 在mini2440开发板上的移植 508

15.7.4 实现一个秒表定时器 509

第16章 振动器驱动架构和移植 512

16.1 振动器系统架构 512

16.2 硬件抽象层架构 513

16.3 JNI层架构 514

16.4 Java层架构 515

16.5 实战演练——移植振动器系统 519

16.5.1 移植振动器驱动程序 519

16.5.2 实现硬件抽象层 520

16.6 实战演练——在MSM平台实现振动器驱动 520

16.7 实战演练——在MTK平台实现振动器驱动 523

16.8 实战演练——移植振动器驱动 526

第17章 输入系统驱动 527

17.1 输入系统架构分析 527

17.2 移植输入系统驱动的方法 528

17.3 Input(输入)系统驱动详解 529

17.3.1 分析头文件 529

17.3.2 分析核心文件input.c 533

17.3.3 event机制详解 548

17.4 硬件抽象层详解 551

17.4.1 处理用户空间 551

17.4.2 定义按键的字符映射关系 555

17.4.3 KL格式的按键布局文件 556

17.4.4 KCM格式的按键字符映射文件 557

17.4.5 分析文件EventHub.cpp 558

17.5 实战演练 561

17.5.1 在内置模拟器中实现输入驱动 562

17.5.2 在MSM高通处理器中实现输入驱动 562

17.5.3 在Zoom平台中实现输入驱动 571

第18章 LCD显示驱动 573

18.1 LCD系统介绍 573

18.2 FrameBuffer内核层详解 573

18.2.1 分析接口文件fb.h 574

18.2.2 内核实现文件 577

18.3 硬件抽象层详解 600

18.3.1 Gralloc模块的头文件 601

18.3.2 硬件帧缓冲区 603

18.3.3 显示缓冲区的分配 604

18.3.4 显示缓冲映射 605

18.3.5 分析管理库文件LayerBuffer.cpp 606

18.4 Goldfish中的FrameBuffer驱动程序详解 607

18.5 使用Gralloc模块的驱动程序 610

18.5.1 文件gralloc.cpp 611

18.5.2 文件mapper.cpp 614

18.5.3 文件framebuffer.cpp 615

18.6 MSM高通处理器中的显示驱动 620

18.6.1 msm fb设备的文件操作函数接口 621

18.6.2 高通msm fb的driver接口 621

18.6.3 特殊的iocttl 621

18.7 MSM中的Gralloc驱动程序详解 623

18.7.1 文件gralloc.cpp 623

18.7.2 文件framebuffer.cpp 624

18.7.3 文件gralloc.cpp 627

18.8 OMAP处理器中的显示驱动实现 630

18.8.1 文件omapfb-main.c 631

18.8.2 文件omapfb.h 633

18.9 实战演练 633

18.9.1 S3C2440上的LCD驱动 633

18.9.2 编写访问FrameBuffer设备文件的驱动 658

18.9.3 在S3C6410下移植FrameBuffer驱动 659

第19章 音频系统驱动 664

19.1 音频系统架构基础 664

19.1.1 层次说明 665

19.1.2 Media库中的Audio框架 665

19.2 音频系统层次详解 668

19.2.1 本地代码详解 668

19.2.2 JNI代码详解 670

19.2.3 Java层代码详解 671

19.3 移植Audio系统 672

19.3.1 移植需要做的工作 672

19.3.2 硬件抽象层移植分析 672

19.3.3 AudioFlinger中的Audio硬件抽象层 674

19.3.4 真正实现Audio硬件抽象层 679

19.4 实战演练——在MSM平台实现Audio驱动 680

19.4.1 实现Audio驱动程序 680

19.4.2 实现硬件抽象层 681

19.5 实战演练——在OSS平台实现Audio驱动 684

19.5.1 OSS驱动基础 685

19.5.2 函数mixer() 685

19.6 实战演练——在ALSA平台实现Audio系统 692

19.6.1 注册音频设备和音频驱动 692

19.6.2 在Android中使用ALSA声卡 693

19.6.3 在OMAP平台移植Android的ALSA声卡驱动 701

19.6.4 基于ARM的AC97音频驱动 704

第20章 Overlay系统驱动详解 710

20.1 视频输出系统结构 710

20.2 移植Overlay系统 711

20.3 硬件抽象层详解 711

20.3.1 Overlay系统硬件抽象层的接口 711

20.3.2 实现Overlay系统的硬件抽象层 714

20.3.3 实现Overlay接口 714

20.4 实现Overlay硬件抽象层 715

20.5 实战演练——在OMAP平台实现Overlay系统 717

20.5.1 实现输出视频驱动程序 717

20.5.2 实现Overlay硬件抽象层 719

20.6 实战演练——在系统层调用Overlay HAL 724

20.6.1 测试文件 724

20.6.2 在Android系统中创建Overlay 725

20.6.3 管理Overlay HAL模块 726

20.6.4 S3C6410 Android Overlay的测试代码 727

第21章 照相机驱动 729

21.1 Camera系统的结构 729

21.1.1 Java程序部分 731

21.1.2 Camera的Java本地调用部分 731

21.1.3 Camera的本地库libui.so 732

21.1.4 Camera服务libcameraservice.so 733

21.2 移植Camera系统 737

21.2.1 实现V4L2驱动 737

21.2.2 实现硬件抽象层 744

21.3 实战演练——在MSM平台实现Camera驱动 747

21.4 实战演练——在OMAP平台实现Camera驱动 750

21.5 Android实现S5PV210 FIMC驱动 751

第22章 蓝牙系统驱动 764

22.1 Android系统中的蓝牙模块 764

22.2 分析蓝牙模块的源码 766

22.2.1 初始化蓝牙芯片 766

22.2.2 蓝牙服务 766

22.2.3 管理蓝牙电源 767

22.3 低功耗蓝牙协议栈详解 767

22.3.1 低功耗蓝牙协议栈基础 767

22.3.2 低功耗蓝牙API详解 768

22.4 Android中的BlueDroid 769

22.4.1 Android系统中BlueDroid的架构 770

22.4.2 Application Framework层分析 770

22.4.3 分析Bluetooth System Service层 778

22.4.4 JNI层详解 778

22.4.5 HAL硬件抽象层详解 783

22.5 Android蓝牙模块的运作流程 783

22.5.1 打开蓝牙设备 783

22.5.2 搜索蓝牙 788

22.5.3 传输OPP文件 793

相关图书
作者其它书籍
返回顶部