稀酷客

 找回密码
 加入稀酷客

只需一步,快速开始

关注微信
免费下载

[电子图书] 《android底层驱动分析和移植》.(高金昌、张明星).[PDF]@ckook

[推广链接]
立即下载
by : 121441909 | QQ | 发表于 2016-12-3 12:11:42 | 查看: 796|回复: 1
《android底层驱动分析和移植》.(高金昌、张明星).[PDF]@ckook Android Android系统从诞生到现在,在短短的几年时间里,便凭借其操作易用性和开发的简洁性,赢得了广大用户和开发者的支持。本书内容分为3篇,共22章,循序渐进地讲解了Android底层系统中的典型驱动方面的知识。本书从获取源码和源码结构分析讲起,依次讲解了基础知识篇、Android专有驱动篇和典型驱动移植篇3部分的基本知识。在讲解每一个驱动时,从Android系统的架构开始讲起,从内核分析到具体的驱动实现,再从JNI层架构分析到Java应用层的接口运用,最后到典型驱动系统移植和开发,彻底剖析了每一个典型驱动系统的完整实现流程。本书几乎涵盖了所有Android底层驱动的内容,讲解方法通俗易懂,内容翔实,不但适合应用高手的学习,也特别有利于初学者学习和消化。
本书适合作为Android驱动开发者、Linux开发人员、Android底层学习人员、Android爱好者、Android源码分析人员、Android应用开发人员的学习用书,也可以作为相关培训学校和大专院校相关专业的教学用书。
目录
    录
第1篇 基础知识篇
第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  编写JNI方法        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专有驱动篇
第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篇 典型驱动移植篇
第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
X
XI

游客,本付费内容需要支付 20酷币 才能浏览  购买


打赏列表

~~~还没有人打赏~~~
回复

使用道具 举报

by : 福顺吖 | QQ | 发表于 2016-12-4 20:07:13
收藏收藏,看到好书就忍不住要收藏起来,虽然都没看。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入稀酷客  

本版积分规则

点击这里给我发消息 |Archiver|手机版|小黑屋|ckook ( 冀ICP备14004526号-1 )

GMT+8, 2017-7-26 14:28 , Processed in 1.265625 second(s), 44 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表