精通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 小任务tasklet
4.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 文件的IO
11.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 文件的IO
12.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 文件的IO
13.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 复制creds
14.2.3 设置时间
14.2.4 sched_fork函数
14.2.5 复制资源
14.2.6 申请pid
14.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