书籍 精通LINUX内核  智能设备开发核心技术的封面

精通LINUX内核 智能设备开发核心技术PDF电子书下载

姜亚华编著

购买点数

20

出版社

出版时间

2020

ISBN

标注页数

0 页

PDF页数

479 页

图书目录

知识储备篇 2

第1章 基于Linux内核的操作系统 2

1.1 处理器、平台和操作系统 2

1.2 以安卓为例剖析操作系统 3

1.2.1 安卓的整体架构 3

1.2.2 Linux内核的核心作用 5

1.3 内核整体架构 6

1.3.1 内核代码的目录结构 6

1.3.2 内核的核心模块及关联 7

1.4 实例分析 8

1.4.1 系统响应“点击智能手机触摸屏”的过程 8

1.4.2 智能手机的传感器游戏 9

第2章 数据结构的使用 10

2.1 关系型数据结构 10

2.1.1 一对一关系 10

2.1.2 一对多关系 11

2.1.3 多对多关系 14

2.2 位操作数据结构 17

2.3 模块和内核参数传递 18

2.3.1 内嵌通用数据结构 18

2.3.2 通用结构的私有变量 18

2.4 实例分析 19

2.4.1 模块的封装 19

2.4.2 火眼金睛:看破数据结构 19

第3章 时间的衡量和计算 21

3.1 数据结构 21

3.2 时钟芯片 24

3.3 从内核的角度看时间 25

3.4 周期性和单触发的时钟中断 27

3.5 时间相关的系统调用 28

3.5.1 获取时间 28

3.5.2 给程序定个闹钟 29

3.6 实例分析 30

3.6.1 实现智能手机的长按操作 30

3.6.2 系统的时间并不如你所想 31

第4章 中断和中断处理 32

4.1 处理器识别中断 32

4.2 处理中断 33

4.2.1 中断处理程序 33

4.2.2 中断服务例程 33

4.2.3 中断处理 36

4.3 中断返回 40

4.4 系统调用 41

4.5 软中断 42

4.5.1 原理 42

4.5.2 小任务tasklet 43

4.5.3 定时器 46

4.6 实例分析 49

4.6.1 使用中断向无人驾驶系统报告紧急事件 49

4.6.2 使用watchdog预防无人机坠落 50

第5章 内核同步 51

5.1 临界区的竞争 51

5.2 同步原语 52

5.2.1 每CPU变量 52

5.2.2 volatile关键字 53

5.2.3 屏障 54

5.2.4 atomic变量 55

5.2.5 禁中断 57

5.2.6 禁抢占 57

5.2.7 自旋锁 59

5.2.8 读写锁 60

5.2.9 顺序锁 62

5.2.1 0信号量 63

5.2.1 1互斥锁 65

5.2.1 2读-拷贝-更新 66

5.3 实例分析 69

5.3.1 无人驾驶模式与人工驾驶模式的切换 69

5.3.2 智能手机触摸屏的report和suspend 69

第6章 事件的同步与异步 71

6.1 事件的异步 71

6.2 事件的同步 77

6.2.1 等待一段时间 77

6.2.2 等待事件完成 78

6.3 实例分析 81

6.3.1 使用工作队列轮询无人车环境感知数据 81

6.3.2 使用等待队列等待芯片“回复” 82

内存管理篇 85

第7章 内存寻址 85

7.1 处理器眼中的内存 85

7.2 内存分页 86

7.2.1 寻址:处理器的寻宝游戏 87

7.2.2 内存映射 90

7.3 实例分析 93

7.3.1 访问GPU的帧缓冲 93

7.3.2 MMIO的映射 93

第8章 物理内存的管理 95

8.1 物理内存的组织形式 95

8.2 启动程序 98

8.3 memblock分配器 98

8.4 伙伴系统 99

8.4.1 数据结构 100

8.4.2 页的申请和释放 101

8.5 实例分析 105

8.5.1 构造一个内存管理系统 105

8.5.2 安卓的ION 106

第9章 内存线性空间布局 107

9.1 线性空间划分 107

9.2 内核线性空间布局 107

9.2.1 直接映射区 109

9.2.2 动态映射区 110

9.2.3 永久映射区 111

9.2.4 固定映射区 111

9.3 mmap机制 112

9.3.1 函数原型 112

9.3.2 数据结构 113

9.3.3 mmap的实现 114

9.3.4 内存映射的总结 120

9.4 内存申请 120

9.4.1 得到物理内存 121

9.4.2 得到虚拟内存 121

9.5 实例分析 122

9.5.1 通过dev映射内存 122

9.5.2 几种不同的mmap映射方式 123

第10章 内存管理进阶 124

10.1 处理器的缓存 124

10.1.1 TLB缓存 124

10.1.2 内存缓存 125

10.2 缺页异常 127

10.2.1 处理缺页异常 128

10.2.2 COW的精髓 134

10.3 实例分析 135

10.3.1 利用Cache的特性优化深度学习开发 135

10.3.2 内核为molloc做了什么 136

文件系统篇 138

第11章 文件系统 138

11.1 概念和数据结构 138

11.2 文件系统的挂载 143

11.3 查找文件 148

11.4 文件操作 154

11.4.1 创建和删除目录 155

11.4.2 打开和关闭文件 156

11.4.3 文件的链接 161

11.4.4 创建节点 165

11.4.5 删除文件 166

11.5 文件的IO 167

11.5.1 fcntl函数 167

11.5.2 文件的读写 169

11.5.3 ioctl函数 170

11.6 实例分析 172

11.6.1 包罗万象的proc文件系统 172

11.6.2 陌生又熟悉的devtmpfs文件系统 175

第12章 sysfs文件系统 178

12.1 基本框架 178

12.2 数据结构 180

12.3 创建文件 182

12.4 文件的IO 183

12.5 实例分析 185

12.5.1 利用sysfs协助驱动调试 185

12.5.2 智能家居:自动调整灯光的亮度和色温 186

第13章 ext4文件系统 187

13.1 概述 187

13.2 数据结构 192

13.2.1 ext4_super_block 结构体 192

13.2.2 ext4_group_desc结构体 194

13.2.3 ext4_inode结构体 196

13.2.4 ext4_sb_info结构体 198

13.2.5 ext4_inode_info结构体 199

13.3 ext4的挂载 200

13.4 目录的结构 204

13.4.1 线性目录 204

13.4.2 哈希树目录 206

13.4.3 硬链接 209

13.5 文件的IO 210

13.5.1 映射 210

13.5.2 区段树 211

13.6 实例分析 215

13.6.1 恢复删除的文件并不神秘 215

13.6.2 文件系统的修复 215

进程管理篇 217

第14章 进程 217

14.1 概述 217

14.1.1 数据结构 217

14.1.2 扩展讨论 220

14.2 进程的创建 225

14.2.1 dup_task_struct函数 227

14.2.2 复制creds 228

14.2.3 设置时间 229

14.2.4 sched_fork函数 230

14.2.5 复制资源 231

14.2.6 申请pid 249

14.2.7 重要的杂项 251

14.3 创建进程 253

14.3.1 fork/vfork系统调用 253

14.3.2 创建线程 255

14.3.3 创建内核线程 258

14.4 进程“三巨头” 260

14.5 进程退出 262

14.5.1 退出方式 262

14.5.2 退出过程 263

14.5.3 使用wait等待子进程 266

14.6 实例分析 267

14.6.1 创建service接收无人机手柄控制信号 268

14.6.2 安卓的thread 268

第15章 进程调度 270

15.1 数据结构 270

15.2 进程调度的过程 272

15.2.1 进程被创建 273

15.2.2 唤醒进程 273

15.2.3 时钟中断 276

15.2.4 进程切换 285

15.3 stop调度类 293

15.4 实时调度类 293

15.4.1 优先级和抢占 294

15.4.2 task_tick_rt函数 295

15.4.3 选择下一个进程 297

15.5 完全公平调度类 297

15.5.1 task_fork_fair函数 299

15.5.2 enqueue_task和check_preempt 302

15.5.3 task_tick_fair函数 303

15.5.4 进程切换 304

15.6 最后期限调度类 306

15.7 idle调度类 306

15.8 进程优先级 307

15.9 实例分析 309

15.9.1 创建实时进程服务于AI的感知系统 309

15.9.2 似睡非睡的idle 310

第16章 信号处理 311

16.1 数据结构 311

16.2 捕捉信号 312

16.3 发送信号 313

16.4 处理信号 318

16.4.1 何时、如何 318

16.4.2 调用handler 320

16.4.3 处理信号后如何返回 321

16.5 实例分析 322

16.5.1 使用kill命令发送信号 322

16.5.2 使用信号监控IO事件 322

第17章 进程通信 324

17.1 经典的管道 324

17.1.1 创建pipe 324

17.1.2 pipe的操作 327

17.1.3 命名管道 331

17.2 POSIX通信 332

17.2.1 POSIX信号量 332

17.2.2 POSIX共享内存 334

17.2.3 POSIX消息队列 334

17.3 XSI通信 337

17.3.1 IPC对象的key和id 337

17.3.2 XSI信号量 339

17.3.3 XSI消息队列 342

17.3.4 XSI共享内存 344

17.4 实例分析 346

17.4.1 多线程设计加速深度学习 346

17.4.2 构建无人机的Service与Client架构 347

第18章 程序的执行 348

18.1 elf文件 348

18.1.1 概述 348

18.1.2 文件格式 349

18.2 exec函数族 356

18.2.1 数据结构 357

18.2.2 系统调用 357

18.3 实例分析 364

18.3.1 使程序高效且对系统友好 364

18.3.2 main函数的秘密 365

升华篇 367

第19章 梳理操作系统:I/O多路复用 367

19.1 select机制 367

19.2 poll机制 370

19.3 升级版:epoll 370

19.3.1 数据结构 370

19.3.2 epoll的使用 371

19.4 实例分析 373

19.4.1 事件驱动型程序架构 374

19.4.2 改良管道通信 374

第20章 智能设备的传感器开发 375

20.1 传感器在智能手机和人工智能中的应用 375

20.2 input子系统 376

20.2.1 数据结构 376

20.2.2 device和handler的注册 378

20.2.3 事件的报告 379

20.2.4 万能的evdev 380

20.3 实例分析 381

20.3.1 智能手机硬件抽象层的实现 382

20.3.2 无人驾驶的传感器 382

第21章 智能设备的Camera开发 383

21.1 Camera在人工智能中的应用 383

21.2 V4L2架构 384

21.2.1 数据结构 384

21.2.2 ioctl操作 389

21.3 Camera的核心ioctl操作 391

21.4 实例分析 394

21.4.1 安卓的Camera架构 394

21.4.2 Camera的3A控制 395

第22章 设备驱动开发:设备驱动模型 396

22.1 驱动、设备和总线 396

22.2 probe是如何被调用的 398

22.3 再论总线 399

22.4 实例分析 400

22.4.1 设计一个层次分明的驱动 400

22.4.2 提炼同质设备的驱动 401

第23章 安卓系统的核心:Binder通信 402

23.1 Binder通信的原理和结构 402

23.2 Binder的流程 404

23.2.1 ServiceManager进程管理服务 404

23.2.2 注册和获取服务 405

23.2.3 服务的过程 406

23.3 Binder的驱动 407

23.4 实例分析 410

23.4.1 使用Binder让设计变清晰 410

23.4.2 通过Binder获得传感器列表 411

第24章 从内核的角度看芯片和驱动 412

24.1 芯片的基本功能模块 412

24.1.1 复位 412

24.1.2 中断 413

24.1.3 接口 414

24.2 一个完整的芯片驱动 415

24.2.1 初始化 415

24.2.2 芯片的正常工作状态 417

24.2.3 suspend和resume 418

24.3 实例分析 420

24.3.1 加速度传感器芯片 420

24.3.2 智能手机的触摸屏芯片 421

第25章 Linux与人工智能 422

25.1 人工智能的现状 422

25.1.1 深度学习 422

25.1.2 神经网络 423

25.2 深度学习的软硬件生态 424

25.2.1 整体架构 424

25.2.2 硬件纷争 425

25.3 实例分析 425

25.3.1 无人驾驶汽车的模块分解 425

25.3.2 机器人操作系统ROS 426

附录 427

附录A 内嵌汇编语言 427

附录B 链接脚本 430

附录C 函数和宏所属文件表 433

查看更多关于的内容

出版社其它书籍
本类热门
在线购买PDF电子书
下载此书RAR压缩包