精通Linux内核:智能设备开发核心技术作者: 姜亚华出版时间: 2020年版内容简介 精通Linux内核:智能设备开发核心技术共五篇,以从易到难的顺序详细剖析了Linux内核开发的核心技术。“知识储备篇”介绍了Linux的数据结构、中断处理、内核同步和时间计算等内容,这些是理解后续章节的前提。之后通过“内存管理篇”“文件系统篇”“进程管理篇”详细介绍了Linux的三大核心模块。*后的“升华篇”则融合了前面诸多模块展示了Linux内核开发在操作系统、智能设备、驱动、通信、芯片以及人工智能等热点领域的应用。书中的重点、难点均配以图表、代码和实战案例进行展示,有助于提高读者的动手操作能力。精通Linux内核:智能设备开发核心技术的读者需要熟悉C语言,对Linux内核有一定了解。推荐初学者按照本书的编排顺序阅读,而熟悉Linux内核的读者可以跳过第壹篇,直接从三大核心模块篇进行阅读。本书可作为Linux初中级读者系统学习Linux内核开发的指导手册,也可作为从事嵌入式、操作系统、Linux编程、驱动/内核开发,以及智能设备开发等工作工程师的案头指南和进阶工具书。目录序一序二前言知识储备篇第1章 基于Linux内核的操作系统1.1 处理器、平台和操作系统1.2 以安卓为例剖析操作系统1.2.1 安卓的整体架构1.2.2 Linux内核的核心作用1.3 内核整体架构1.3.1 内核代码的目录结构1.3.2 内核的核心模块及关联1.4 实例分析1.4.1 系统响应“点击智能手机触摸屏”的过程1.4.2 智能手机的传感器游戏第2章 数据结构的使用2.1 关系型数据结构2.1.1 一对一关系2.1.2 一对多关系2.1.3 多对多关系2.2 位操作数据结构2.3 模块和内核参数传递2.3.1 内嵌通用数据结构2.3.2 通用结构的私有变量2.4 实例分析2.4.1 模块的封装2.4.2 火眼金睛:看破数据结构第3章 时间的衡量和计算3.1 数据结构3.2 时钟芯片3.3 从内核的角度看时间3.4 周期性和单触发的时钟中断3.5 时间相关的系统调用3.5.1 获取时间3.5.2 给程序定个闹钟3.6 实例分析3.6.1 实现智能手机的长按操作3.6.2 系统的时间并不如你所想第4章 中断和中断处理4.1 处理器识别中断4.2 处理中断4.2.1 中断处理程序4.2.2 中断服务例程4.2.3 中断处理4.3 中断返回4.4 系统调用4.5 软中断4.5.1 原理4.5.2 小任务tasklet4.5.3 定时器4.6 实例分析4.6.1 使用中断向无人驾驶系统报告紧急事件4.6.2 使用watchdog预防无人机坠落第5章 内核同步5.1 临界区的竞争5.2 同步原语5.2.1 每CPU变量5.2.2 volatile关键字5.2.3 屏障5.2.4 atomic变量5.2.5 禁中断5.2.6 禁抢占5.2.7 自旋锁5.2.8 读写锁5.2.9 顺序锁5.2.10 信号量5.2.11 互斥锁5.2.12 读-拷贝-更新5.3 实例分析5.3.1 无人驾驶模式与人工驾驶模式的切换5.3.2 智能手机触摸屏的report和suspend第6章 事件的同步与异步6.1 事件的异步6.2 事件的同步6.2.1 等待一段时间6.2.2 等待事件完成6.3 实例分析6.3.1 使用工作队列轮询无人车环境感知数据6.3.2 使用等待队列等待芯片“回复”内存管理篇第7章 内存寻址7.1 处理器眼中的内存7.2 内存分页7.2.1 寻址:处理器的寻宝游戏7.2.2 内存映射7.3 实例分析7.3.1 访问GPU的帧缓冲7.3.2 MMIO的映射第8章 物理内存的管理8.1 物理内存的组织形式8.2 启动程序8.3 memblock分配器8.4 伙伴系统8.4.1 数据结构8.4.2 页的申请和释放8.5 实例分析8.5.1 构造一个内存管理系统8.5.2 安卓的ION第9章 内存线性空间布局9.1 线性空间划分9.2 内核线性空间布局9.2.1 直接映射区9.2.2 动态映射区9.2.3 永久映射区9.2.4 固定映射区9.3 mmap机制9.3.1 函数原型9.3.2 数据结构9.3.3 mmap的实现9.3.4 内存映射的总结9.4 内存申请9.4.1 得到物理内存9.4.2 得到虚拟内存9.5 实例分析9.5.1 通过dev映射内存9.5.2 几种不同的mmap映射方式第10章 内存管理进阶10.1 处理器的缓存10.1.1 TLB缓存10.1.2 内存缓存10.2 缺页异常10.2.1 处理缺页异常10.2.2 COW的精髓10.3 实例分析10.3.1 利用Cache的特性优化深度学习开发10.3.2 内核为molloc做了什么文件系统篇第11章 文件系统11.1 概念和数据结构11.2 文件系统的挂载11.3 查找文件11.4 文件操作11.4.1 创建和删除目录11.4.2 打开和关闭文件11.4.3 文件的链接11.4.4 创建节点11.4.5 删除文件11.5 文件的IO11.5.1 fcntl函数11.5.2 文件的读写11.5.3 ioctl函数11.6 实例分析11.6.1 包罗万象的proc文件系统11.6.2 陌生又熟悉的devtmpfs文件系统第12章 sysfs文件系统12.1 基本框架12.2 数据结构12.3 创建文件12.4 文件的IO12.5 实例分析12.5.1 利用sysfs协助驱动调试12.5.2 智能家居:自动调整灯光的亮度和色温第13章 ext4文件系统13.1 概述13.2 数据结构13.2.1 ext4_super_block结构体13.2.2 ext4_group_desc结构体13.2.3 ext4_inode结构体13.2.4 ext4_sb_info结构体13.2.5 ext4_inode_info结构体13.3 ext4的挂载13.4 目录的结构13.4.1 线性目录13.4.2 哈希树目录13.4.3 硬链接13.5 文件的IO13.5.1 映射13.5.2 区段树13.6 实例分析13.6.1 恢复删除的文件并不神秘13.6.2 文件系统的修复进程管理篇第14章 进程14.1 概述14.1.1 数据结构14.1.2 扩展讨论14.2 进程的创建14.2.1 dup_task_struct函数14.2.2 复制creds14.2.3 设置时间14.2.4 sched_fork函数14.2.5 复制资源14.2.6 申请pid14.2.7 重要的杂项14.3 创建进程14.3.1 fork/vfork系统调用14.3.2 创建线程14.3.3 创建内核线程14.4 进程“三巨头”14.5 进程退出14.5.1 退出方式14.5.2 退出过程14.5.3 使用wait等待子进程14.6 实例分析14.6.1 上一篇: 白话深度学习与TensorFlow 高扬 2017年版 下一篇: 超级搜索术:帮你找到99%问题的答案 朱丹 2020年版