由于笔者基于Docbook来编辑所有的技术文档,为了方便文档管理,至此将所有关于对Linux内核学习总结,或者研究分析,嵌入式相关的学习总结或者研究分析,并不限于这些领域的所有关于开源软件的技术信息的公开分享全部移植到如下地址域名中:
http://lli_njupt.0fees.net(速度更快,二级域名)
http://emblinux.tk/ (一级域名)
http://download.csdn.net/detail/lli_njupt/6010065 (可以从这里下载HTML版本)
多年后访问发现很多下载链接已经失效,特上传附件,方便大家,文件请分别更名为emblinux.zip.001,emblinux.zip.002和emblinux.zip.003 然后解压缩即可:
该文档遵循GNU的GNU Free Documentation License发布协议,文档中参考有互联网资源以及ARM网站的标准开放文档,在此表示感谢,相关的参考目录将在文档中给出。目前该文档中关于平台的版本信息如下:
MainBoard:OK6410
CPU: S3C6410
RAM: 256M
FLASH:1G K9GAG08U0D
RAM: 256M
FLASH:1G K9GAG08U0D
Kernel:Linux2.6.28
BootLoader:Uboot1.1.6
当前对Bootloader的引导,ARM平台的汇编,Linux内核的引导和部分模块:时钟,中断,内存管理系统等进行了学习和总结,并辅助大量的示例图片,该文档是笔者学习和研究的记录,笔者欢迎任何对该文档的批评和建议(可以直接在本文下发表评论),并且任何希望对该文档做出贡献的人,可以向笔者发出文档的更新请求,格式为符合Docbook规范的xml文档,也可以索取当前文档的原始的Docbook开发文档。
关于文档的说明:目前每一章节下都有Sandbox一节,该章节仅仅是Docbook开发中的语法参考章节,无实际意义,所以阅读该文档时请直接忽略该节,另外对于Linux中部分分析中,由于笔者的关心的领域不同,所以某些点分析的很详细(大多数都是不好理解的地方),有些只是贴上了实现代码,所以目前该文档还处于不同的更新之中。另外该文档的章节并没有严格遵循由浅入深的原则,所以部分章节并没有必然的联系,但是一个整体的过程是对Linux内核有基础了解,ARM平台的ATPCS原则,然后是在此基础上的学习和分析。
当前目录:
目录
1. 写在前面 1.1. 它是什么? 1.2. 它不是什么? 1.3. 它的始末? 2. ARM汇编语言 2.1. ARM命名规则 2.2. 程序状态寄存器 2.3. ARM指令格式 2.4. 测试用例 2.5. 原码和补码 2.6. 条件码标志位 2.7. 跳转指令 2.8. 协处理器指令 2.9. ARM汇编伪指令 2.10. Sandbox 3. ARM寻址方式 3.1. 立即数寻址 3.2. 寄存器寻址 3.3. 寄存器间接寻址 3.4. 基址寻址 3.5. 寄存器移位寻址 3.6. 堆栈寻址 3.7. 多寄存器寻址 3.8. 块拷贝寻址 3.9. 相对寻址 4. 批量加载和存储指令实践 4.1. 测试源码 4.2. stmfd和ldmfd 4.3. stmfa和ldmfa 4.4. stmed和ldmed 4.5. stmea和ldmea 4.6. ldmib和stmib 4.7. ldmia和stmia 4.8. ldmdb和stmdb 4.9. ldmda和stmda 5. ATPCS和内嵌汇编 5.1. ARM寄存器 5.2. 寄存器使用规则 5.3. 数据栈的使用 5.4. 返回值与寄存器 5.5. 内嵌汇编 5.6. Sandbox 6. Uboot启动分析 6.1. 硬件引导 6.2. bootm 6.3. do_bootm_linux 6.4. tag处理函数 6.5. Sandbox 7. zImage的生成和加载 7.1. 相关的Makefile 7.2. vmlinux的格式 7.3. 静默编译和V=1 7.4. 生成zImage的命令行 7.5. Makefile.build和vmlinux压缩 7.6. .cmd文件 7.7. V=2 7.8. piggy.gz 7.9. vmlinux的生成命令 7.10. vmlinux-xxx 7.11. vmlinux.lds和vmlinux.lds.S 7.12. head.S 7.13. 重定位内核 8. 内核加载 8.1. head.S 8.2. 检查处理器类型 8.3. 检查机器类型 8.4. 创建内核段页表 8.5. 使能MMU 8.6. 0号进程 9. 内核初始化 9.1. CPU掩码 9.2. 内核版本信息 9.3. 内存屏障 9.4. 内核抢占 9.5. printk 9.6. setup_arch 9.7. 直接地址转换 9.8. 内核页表 9.9. bootmem_init 9.10. devicemaps_init 9.11. 0页 9.12. Sandbox 10. Bootmem机制 10.1. 简介 10.2. bootmem_data 10.3. UMA和NUMA 10.4. Debug机制 10.5. 初始化函数 10.6. __reserve和__free 10.7. alloc_bootmem_core 10.8. Bootmem alloc宏 10.9. 标记函数 10.10. Bootmem机制的应用 10.11. Sandbox 11. 内核初始化2 11.1. resource资源分配 11.2. cpu_init 11.3. early_trap_init 11.4. sched_init 11.5. setup_command_line 11.6. build_all_zonelists 11.7. page_alloc_init 11.8. 第二阶段的参数解析 11.9. rcu_init 11.10. init_IRQ 11.11. pidhash_init 11.12. init_timers 11.13. hrtimers_init 11.14. Sandbox 11.15. Sandbox 12. 页表机制 12.1. 引言 12.2. 一级页表 12.3. ARM 内存访问 12.4. ARM MMU页表 12.5. 页面访问控制 12.6. create_mapping 12.7. alloc_init_section 12.8. alloc_init_pte 12.9. set_pte_ext 12.10. Sandbox 13. 内存管理 13.1. 引言 13.2. page管理项 13.3. bootmem_free_node 13.4. free_area_init_node 13.5. free_area_init_core 13.6. memmap_init_zone 13.7. build_all_zonelists 13.8. __build_all_zonelists 13.9. build_zonelists 13.10. build_zonelists_node 13.11. build_all_zonelists 14. 伙伴系统 14.1. 初始化zone 14.2. 收集空闲内存 14.3. vmalloc 14.4. Sandbox 15. IO设备管理 15.1. 总线 15.2. 资源resource 15.3. 系统实现 15.4. Sandbox 16. 中断处理 16.1. 概述 16.2. CPU处理 16.3. 中断向量 16.4. __irq_svc 16.5. 中断示例 16.6. 中断控制器 16.7. 中断控制寄存器 16.8. Linux内核中断抽象 16.9. Linux内核中断注册 16.10. 软中断 16.11. Tasklet 16.12. Sandbox 17. 内核参数解析 17.1. 前言 17.2. parse_args 17.3. 第二阶段 17.4. Sandbox 18. 时钟管理 18.1. 基本概念 18.2. S3C6410 PLL 18.3. S3C6410 CLK 18.4. 选择时钟源 18.5. 选通时钟源 18.6. PWM 定时器 18.7. 时钟源初始化 18.8. 内核计时体系 18.9. 时钟中断注册 18.10. 时钟中断处理 18.11. RTC时钟 18.12. 内核定时器 19. 内核通知链 19.1. 概述 19.2. 数据结构 19.3. 运作机制 19.4. Sandbox 20. 内核同步 20.1. 内核抢占 20.2. 内存屏障 20.3. 临界区控制 20.4. 同步技术 20.5. Sandbox 21. Linux设备模型 21.1. 设备文件 21.2. 字符设备注册 21.3. 关联文件系统 21.4. 字符设备操作 21.5. 阻塞I/O 21.6. 异步通知 21.7. Sandbox 22. 网络设备驱动 22.1. MAC和PHY 22.2. MDIO和MII 22.3. MII数据接口 22.4. RMII数据接口 22.5. MII管理接口MDIO 22.6. 常用单口以太网控制器 22.7. DM9000A简介 22.8. 注册DM9000A设备 22.9. 注册网卡驱动 23. Linux模式设计 23.1. 数据大小 23.2. 数据比较 23.3. 数据圆整 23.4. 数据对齐 23.5. 位图操作 23.6. 结构体成员互访 23.7. 结构体大小运算 23.8. 编译器检查 23.9. Sandbox 24. 附录 24.1. 参考书目 24.2. 参考网络资源 24.3. Sandbox