当前位置:主页 > 计算机电子书 > 操作系统 > Linux下载
ARM Linux内核源码剖析

ARM Linux内核源码剖析 PDF 高清版

  • 更新:2020-09-23
  • 大小:101 MB
  • 类别:Linux
  • 作者:尹锡训、著;崔范松
  • 出版:人民邮电出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

《ARM Linux内核源码剖析》是多位作者在3年Liunx内核分析经验和庞大资料基础上写成的,收录了其他同类书未曾讲解的内容并进行逐行分析,一扫当前市场中其他理论书带给读者的郁闷。书中详细的代码分析与大量插图能够使读者对Linux内核及ARM获得正确认识,自然而然习得如何有效分析定期发布的Linux内核。

《ARM Linux内核源码剖析》适合想从Linux内核启动开始透彻分析全部启动过程的读者,因Linux代码量庞大而束手无策的人、想要了解Linux实际运行过程的人、渴求OS实操理论的人,本书必将成为他们不可或缺的参考书。

目录

  • 第一部分 ARMLinux内核——分析内核前需要做的准备
  • 第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_cgroup_root() 102
  • 8.3.2 初始化子系统——cgroup_init_subsys() 103
  • 8.4 禁用IRQ 104
  • 8.5 early_boot_irqs_off()、early_init_irq_lock_class() 104
  • 8.6 大内核锁——lock_kernel() 106
  • 第9章 注册针对时钟事件的处理器 111
  • 9.1 函数的声明和定义——tick_init() 111
  • 9.2 注册处理事件的处理器——_clockevents_register_notifier() 113
  • 9.2.1 为clockevents_lock添加自旋锁 114
  • 9.2.2 clockevents_chain生成原理 115
  • 9.2.3 在clockevents_chain中注册tick_notifier的方法 116
  • 9.2.4 对clockevents_lock解除自旋锁的原理 117
  • 第10章 在CPU位图中注册当前运行CPU/初始化HIGHMEM管理 119
  • 10.1 在包含热插拔信息的位图上添加执行init_task的CPU——boot_cpu_init() 119
  • 10.2 管理高端内存——page_address_init() 121
  • 第11章 整体指向——setup_arch 123
  • 第12章 unwind_init()~~early_trap_init() 126
  • 12.1 栈回溯——unwind_init() 126
  • 12.2 求出包含机器信息的machine_desc结构体——setup_machine() 126
  • 12.3 处理ATAG信息——setup_arch() 127
  • 12.4 处理启动参数——parse_cmdline() 129
  • 12.5 构建源代码树——request_standard_resources() 131
  • 12.6 初始化cpupossible位图——smp_init_cpus() 136
  • 12.7 用栈指定各ARM异常模式——cpu_init() 137
  • 12.8 初始化以处理异常——early_trap_init() 138
  • 12.9 查看中断处理器函数 143
  • 12.9.1 调用IRQ处理器——asm_do_IRQ() 147
  • 12.9.2 返回中断之前——ret_to_user标签 147
  • 第13章 设置处理器——setup_processor() 150
  • 13.1 查看setup_processor()结构 150
  • 13.2 查找CPUID——read_cpuid_id() 151
  • 13.3 查找处理器信息——lookup_processor_type() 153
  • 13.4 查找处理器结构信息——cpu_architecture() 153
  • 13.5 查找处理器缓存类型_cacheid_init() 156
  • 13.6 调用处理器初始化函数——cpu_proc_init() 160
  • 第14章 准备内存分页——paging_init() 163
  • 14.1 查看paging_init()的整体结构 163
  • 14.2 设置内存类型表——build_mem_type_table() 165
  • 14.3 检验内存信息——sanity_check_meminfo() 166
  • 14.4 准备页表——prepare_page_table() 168
  • 14.4.1 prepare_page_table() 168
  • 14.4.2 Linux的分页结构 170
  • 14.4.3 求出页目录项 170
  • 14.4.4 pmd_clear() 172
  • 14.5 设备区域映射准备——devicemaps_init() 174
  • 14.6 准备使用高端内存——kmap_init() 177
  • 14.7 初始化零页 178
  • 14.7.1 分配内存——__alloc_bootmem_nopanic() 179
  • 14.7.2 在指定节点使用fallback分配内存——alloc_bootmem_core 180
  • 14.7.3 将虚拟地址变换为page结构体——virt_to_page 182
  • 14.8 保持数据缓存一致性——flush_dcache_page() 182
  • 第15章 在启动时初始化内存分配器 184
  • 15.1 bootmem函数流和数据结构 185
  • 15.2 查看bootmem_init()结构 188
  • 15.3 查找虚拟内存盘位置——check_initrd() 189
  • 15.4 将节点的BANK信息反映到页目录——bootmem_init_node() 191
  • 15.4.1 map_memory_bank() 192
  • 15.4.2 bootmem_bootmap_pages() 195
  • 15.4.3 find_bootmap_pfn() 196
  • 15.4.4 node_set_online() 197
  • 15.4.5 NODE_DATA宏 198
  • 15.4.6 init_bootmem_node() 200
  • 15.4.7 free_bootmem_node() 202
  • 15.4.8 reserve_bootmem_node() 202
  • 15.5 排除0号节点——reserve_node_zero() 203
  • 15.6 排除虚拟内存盘节点——bootmem_reserve_initrd() 204
  • 15.7 设置为无可用页——bootmem_free_node() 205
  • 15.8 初始化free_area区域 207
  • 15.8.1 free_area结构体 207
  • 15.8.2 free_area_init_node() 208
  • 15.8.3 free_area_init_core() 209
  • 15.8.4 init_currently_empty_zone() 211
  • 15.8.5 memmap_init() 212
  • 第16章 mm_init_owner()~~preempt_disable() 217
  • 第17章 构建借用内存的后台 233
  • 第18章 page_alloc_init()~~pidhash_init() 253
  • 第19章 init_timers()~~page_cgroup_init() 273
  • 第20章 终止bootmem分配器并替换为伙伴系统 297
  • 第21章 初始化以支持CPU热插拔 315
  • 第22章 激活slab内存分配器——kmem_cache_init() 318
  • 第23章 kmem_trace_init()~~security_init() 344
  • 第24章 初始化VFS中使用的多种缓存——vfs_cache_init() 367
  • 第25章 radix_tree_init()~~ftrace_init() 382
  • 第26章 同步内存与后备存储——pagewriteback 394
  • 第27章 查看启动内核的最终函数结构——rest_init() 405
  • 第28章 生成执行函数的内核线程——kernel_thread() 407
  • 第29章 唤醒新生成的任务 419
  • 第30章 准备使用内核 426
  • 第31章 内核线程守护进程 453
  • 第32章 find_task_by_pid_ns()~~cpu_idle() 469
  • 附录
  • 附录A 汇编语言、gas关键词总结 480
  • 附录B 内核分析常见API 485
  • 附录C 浅谈ext2文件系统 487
  • 附录D Linux线程模型 497
  • 附录E 链接器脚本文件结构 500
  • 后记 510
  • 索引 513

资源下载

资源下载地址1:https://pan.baidu.com/s/1eRS3kgC8LKVl9mfpD8aKaw

网友留言