内容简介
《ARM Linux内核源码剖析》是多位作者在3年Liunx内核分析经验和庞大资料基础上写成的,收录了其他同类书未曾讲解的内容并进行逐行分析,一扫当前市场中其他理论书带给读者的郁闷。书中详细的代码分析与大量插图能够使读者对Linux内核及ARM获得正确认识,自然而然习得如何有效分析定期发布的Linux内核。
《ARM Linux内核源码剖析》适合想从Linux内核启动开始透彻分析全部启动过程的读者,因Linux代码量庞大而束手无策的人、想要了解Linux实际运行过程的人、渴求OS实操理论的人,本书必将成为他们不可或缺的参考书。
目录
目 录
第一部分 ARM Linux内核——分析内核前需要做的准备
第1章 内核介绍及2.6版和3.2版之间的差异 2
1.1 内核的诞生、作用以及内部结构 2
1.1.1 Linus创造的Linux 2
1.1.2 由多种子系统集成运行的单内核 3
1.1.3 全世界名的通用操作系统 5
1.2 内核2.6版和3.2版之间的差异 5
第2章 内核构建系统 8
2.1 内核初始化 8
2.2 内核配置 9
2.3 内核构建 11
2.4 内核安装 17
第3章 了解ARM处理器 19
3.1 处理器概要和特征 19
3.2 处理器架构与核心 19
3.3 处理器命名规则 21
3.4 处理器内部结构 21
3.5 处理器模式和寄存器 23
3.6 处理器异常 25
3.7 硬件扩展功能 26
3.7.1 缓存 26
3.7.2 内存管理装置 26
3.7.3 协处理器 26
第4章 构建分析环境 28
4.1 下载并安装Linux源内核 28
4.1.1 下载源内核 28
4.1.2 安装源内核 30
4.2 安装ctags+cscope 31
4.2.1 用ctags制作源代码标签 31
4.2.2 制作cscope标签数据库 33
4.3 vim插件下载及环境设置 34
4.3.1 下载vim插件 34
4.3.2 vim+plugin的环境结构 37
4.3.3 vim环境设置 38
4.4 查看源码分析环境工具 40
第二部分 内核的启动——start_kernel调用方法
第5章 准备解压内核 48
5.1 进入启动加载后结束个启动——start标签 49
5.2 BSS系统域初始化——not_relocated标签 50
5.3 激活缓存——cache_on标签 53
5.4 页目录项初始化——__setup_mmu标签 56
5.5 指令缓存激活及缓存策略适用——__common_mmu_cache_on标签 58
第6章 从压缩的内核zImage还原内核映像 60
6.1 解压内核并避免覆写——wont_overwrite、decompress_kernel标签 61
6.2 调用已解压内核——call_kernel标签 62
6.3 缓存清理及清除——cache_clean_flush标签 62
6.4 缓存禁用——cache_off标签 64
第7章 调用start_kernel() 65
7.1 初始化指向——stext标签 65
7.2 处理器信息搜寻——__look_processor_type 69
7.2.1 __lookup_processor_type标签 69
7.2.2 __proc_info_begin和__proc_info_end中保存的信息 71
7.2.3 在MMU禁用状态下将虚拟地址转换为物理地址 73
7.2.4 查找proc_info_list结构体并比较处理器信息 74
7.3 搜寻我的机型——__lookup_machine_type 75
7.3.1 __lookup_machine_type标签 75
7.3.2 保存在__arch_info_begin和__arch_info_end中的machine_desc信息及访问路径 76
7.3.3 查找machine_desc结构体并比较机器信息 77
7.4 源自启动加载项的atags——__vet_atags标签 78
7.5 对虚拟内存进行基础创建——__create_page_tables标签 81
7.6 设置核心(core)——v6_setup标签 85
7.7 打开MMU并使用虚拟地址——__enable_mmu/__turn_mmu_on标签 86
7.8 跳转至start_kernel——__mmap_switched 标签 90
第三部分 内核的执行——内核的起始与结束位置
第8章 start_setup_processor_id()~lock_kernel() 94
8.1 smp_setup_processor_id()、lockdep_init()、debug_objects_early_init() 95
8.1.1 smp_setup_processor_id() 95
8.1.2 lockdep_init() 95
8.1.3 debug_objects_early_init() 96
8.2 栈溢出感应——__boot_init_stack_canary 98
8.3 初始化提供进程集成方法的cgroup——__cgroup_init_early() 98
8.3.1 cgroupfs_root和cgroup的关联初始化——init_cgro