嵌入式系统Linux内核开发实战指南(ARM平台)(含光盘1
分类: 图书,计算机/网络,操作系统/系统开发,LINUX ,
作者: 王洪辉 编著
出 版 社: 电子工业出版社
出版时间: 2009-3-1字数:版次: 1页数: 1124印刷时间:开本: 16开印次:纸张:I S B N : 9787121079191包装: 平装编辑推荐
技术总监辞职一年精心写作
作者希望认识技术水平超越本书内容的顶尖专家(hxz@phei.com.cn)
对于经验非常丰富的高手,可以参照详细目录直接阅读代码透析Linuxl为核实现原理的相关章节
对于入行多年的工程师,本书包合作者10多年的实战经验与技能,让你遇到难题不求人
对于刚起步的初学者,本书详细介绍了嵌入式Linux开发流程和方法,让你快速入门,不走弯路
内容简介
《嵌入式系统Linux开发实战指南(ARM平台)》凝聚了作者12年的工作经验和学习心得与体会,内容覆盖了嵌入式系统Linux内核开发的各个方面。
作者根据自己11年的一线工作经验,介绍了嵌入式系统的概念、组织架构、工作原理、软硬件设计流程、开发调试方法以及嵌入式Linux的开发方法与技能,其中列举了许多作者工作中的实际案例;
另外,作者根据自己反复阅读Linux2.6内核源代码和Linux内核参考书的笔记与心得,用很大篇幅深入剖析了Linux内核的组成结构以及各组件的实现原理,在阐述理论的同时对内核源代码进行详细注释,这样既加深了对Linux内核原理的理解,又可引导读者自行阅读、分析内核源代码;
该书共32章,分为四部分,每一部分的内容既相互独立,又彼此关联,读者可以根据自己的实际情况有选择地阅读,不必严格依照书中的章节顺序。
作者简介
王洪辉,江西丰城人,1996年毕业于华北航天工业学院,被分配到中航北京青云航空仪表公司工作,2000年从青云离职后先后在6家公司工作过;作者一直从事嵌入式系统Linux内核开发工作,在当今各种流行的嵌入式处理器平台和操作系统上都做过开发,编写、移植或者调试过各种设备、接口的驱动程序;作者在职期间即使担任硬件部主管或技术总监职务,只要有时间仍坚持亲自参与一线技术开发工作,积累经验,精益求精,是嵌入式系统Linux内核开发领域名副其实的技术专家;现在作者主要从事嵌入式系统Linux内核研究与教学工作,并计划将来组织开发自己的操作系统。
目录
第1部分 嵌入式系统硬件开发
第1章 嵌入式系统概述
1.1 嵌入式系统概念
1.2 嵌入式处理器
1.3 嵌入式系统应用
1.4 嵌入式系统发展
1.5 一些嵌入式处理器的硬件特性比较
第2章 ARM处理器概述
2.1 ARM发展历程
2.2 ARM处理器特点
2.3 ARM处理器应用
2.4 ARM体系架构
2.5 ARM处理器
第3章 ARM指令及其寻址方式
3.1 ARM处理器的程序状态寄存器(PSR)
3.2 ARM指令的条件码
3.3 ARM指令介绍
3.4 ARM指令寻址方式
3.5 ARM汇编伪操作(Directive)
3.6 ARM汇编伪指令
3.7 Thumb指令介绍
第4章 ARM处理器内存管理单元(MMU)
4.1 ARM处理器中CP15协处理器的寄存器
4.2 MMU简介
4.3 系统访问存储空间的过程
4.4 ARM处理器地址变换过程
4.5 ARM存储空间访问权限控制
4.6 TLB操作
4.7 存储访问失效
第5章 ARM处理器的Cache和Write Buffer
5.1 Cache和Write Buffer一般性介绍
5.2 ARM处理器中的Cache和Write Buffer
5.3 ARM处理器的快速上下文切换技术
第6章 ARM处理器存储访问一致性问题
6.1 存储访问一致性问题介绍
6.2 Linux中解决存储访问一致性问题的方法
第7章 ARM处理器工作模式与异常中断处理
7.1 ARM处理器工作模式
7.2 ARM处理器异常中断向量表和优先级
7.3 ARM处理器异常中断处理
7.4 ARM处理器的中断(IRQ或FIQ)
第8章 ARM处理器启动过程
8.1 ARM处理器上电/复位操作
8.2 ARM处理器系统初始化过程
8.3 ARM处理器系统初始化编程注意事项
第9章 嵌入式系统设计与调试
9.1 嵌入式系统设计流程
9.2 嵌入式系统硬件原理设计与审核
9.3 硬件设计工具软件
9.4 嵌入式系统调试仿真工具
9.5 嵌入式系统调试诊断方法
第10章 自制简易JTAG下载烧写工具
10.1 JTAG简介
10.2 简易JTAG线缆原理
10.3 简易JTAG烧写代码分析
第2部分 Linux内核开发初步
第11章 Bootloader
11.1 Bootloader的任务和作用
11.2 各种各样的Bootloader
11.3 Bootloader编译环境
11.4 Bootloader的移植与裁减
11.5 编译Bootloader
11.6 烧写Bootloader
11.7 Bootloader使用举例
11.8 Bootloader修改举例
第12章 创建嵌入式Linux开发环境
12.1 安装Linux host
12.2 在虚拟机中安装Linux host
12.3 安装Linux交叉编译环境
12.4 在主机上设置TFTP Server
12.5 在主机上设置DHCP Server
12.6 在主机上设置Telnet server
12.7 在开发过程中使用NFS
12.8 设置超级终端
第13章 编译Linux内核
13.1 获取Linux内核源代码
13.2 Linux内核目录结构
13.3 配置Linux内核
13.4 编译Linux内核
第14章 创建Linux根文件系统
14.1 根文件系统概述
14.2 根文件系统目录结构
14.3 获取根文件系统组件源代码
14.4 编译根文件系统源代码
14.5 创建一个32MB的RAMDISK根文件系统
14.6 在根文件系统中添加驱动模块或者应用程序
第15章 固化Linux内核和根文件系统
第16章 关于?Clinux
16.1?Clinux简介
16.2?Clinux源代码目录结构
16.3?Clinux与标准Linux的区别
16.4 编译Clinux
第3部分 Linux 2.6内核原理
第17章 Linux 2.6.10@ARM启动过程
17.1 Linux 2.6.10中与ARM处理器平台硬件相关的结构和全局变量
17.2 Linux汇编代码入口
17.3 Linux汇编入口处CPU的状态
17.4 start_kernel()函数之前的汇编代码执行过程
17.5 start_kernel()函数中调用的函数介绍
17.6 init()进程执行过程
第18章 Linux内存管理
18.1 Linux内存管理概述
18.2 为虚拟(线性地址)存储空间建立页表
18.3 设置存储空间的访问控制属性
18.4 Linux中的内存分配和释放
第19章 Linux进程管理
19.1 进程管理概述
19.2 进程管理相关初始化
19.3 进程创建与删除
19.4 进程调度
19.5 进程切换
19.6 用户态进程间通信
第20章 Linux文件管理
20.1 文件系统概述
20.2 文件管理相关初始化
20.3 文件系统类型注册
20.4 挂接文件系统
20.5 文件系统类型超级块读取
20.6 路径名查找
20.7 访问文件操作
20.8 异步I/O系统调用
20.9 Linux特殊文件系统
20.10 磁盘文件系统
20.11 关于initramfs
20.12 关于initrd
20.13 关于gzip压缩文件
第21章 Linux模块设计
21.1 Linux模块设计概述
21.2 Linux的内核空间和用户空间
21.3 内核模块与应用程序的区别
21.4 编译模块
21.5 装载和卸载模块
21.6 模块层叠
21.7 模块版本依赖
21.8 模块编程示例
第22章 Linux系统异常中断管理
22.1 Linux异常中断处理
22.2 指令预取和数据访问中止异常中断处理
22.3 Linux中断处理
22.4 从中断返回
22.5 Linux中断管理
22.6 Linux系统调用
第23章 Linux软中断和工作队列
23.1 概述
23.2 Linux软中断
23.3 Linux工作队列
第24章 Linux并发与竞态
24.1 并发与竞态概述
24.2 消除竞态的“锁定”技术
24.3 消除竞态的非“锁定”方法
第25章 Linux设备驱动程序
25.1 设备驱动程序概述
25.2 字符设备驱动程序
25.3 块设备驱动程序
25.4 网络设备驱动程序
25.5 PCI设备驱动程序
第4部分 Linux内核开发高级指南
第26章 Linux系统参数设置
26.1 旗语系统参数(tag)
26.2 前期命令行设置的系统参数
26.3 老式命令行系统参数
26.4 命令行系统参数
第27章 Linux内核调试
27.1 打开Linux内核及其各模块自带的调试开关
27.2 内核剖析(Profiling)
27.3 通过打印调试(printk)
27.4 使用proc文件系统调试
27.5 oops消息1098
27.6 通过跟踪命令strace调试
27.7 使用gdb、kdb、kgdb调试
第28章 Linux内核移植
第29章 Linux内核优化
29.1 编译优化
29.2 根据CPU特性进行优化
29.3 对内核进行裁减
29.4 优化系统内存配置
29.5 优化系统启动过程以缩减系统启动时间
29.6 内存映射优化
29.7 工具软件辅助优化
第30章 Linux定时器
30.1 定时器相关数据结构
30.2 定时器相关宏定义
30.3 定时器相关全局变量
30.4 定时器和时钟初始化
30.5 获取系统时间
30.6 延迟函数
30.7 与定时器相关系统调用
30.8 使用定时器方法
第31章 杂项
31.1 per_cpu变量
31.2 Linux中的数据类型定义
第32章 编译链接文件说明
参考文献
书摘插图
第1章 嵌入式系统概述
1.1 嵌入式系统概念
到目前为止,对嵌入式系统概念并没有一个统一的定义,这里引用几个别人的定义:
《嵌入式Linux应用开发详解》中说:嵌入式系统就是以应用为中心,以计算机技术为基础,软硬件可裁减,适合应用系统对功能、可靠性、成本、体积和功耗要求的专用的计算机系统。
《Linux与嵌入式系统》中引用IEE(电气工程师协会)的定义说:嵌入式系统是用来控制或监视机器、装置或工厂等大规模系统的设备。
而翻译过来的《嵌入式Linux》与《构建嵌入式Linux系统》中却都没有对“嵌入式系统”下一个明确的定义。
一般来讲,可以把由微处理器加上必要的外围电路,再根据需求对微处理器进行编程,这样组成的一个能够实现一定功能的完整系统叫做嵌入式系统。嵌入式系统是硬件与软件的统一,嵌入式系统中使用的微处理器叫做嵌入式处理器,嵌入式处理器是针对x86架构处理器而言的,广义上讲,可以把所有x86架构之外的其他处理器都叫做嵌入式处理器。但随着处理器设计技术的发展和各种新应用的产生,一些x86架构处理器也开始应用到嵌入式系统中,而嵌入式处理器也可以设计成诸如PC、笔记本电脑、服务器等产品,所以要给嵌入式系统和嵌入式处理器下严格的定义也就变得越来越困难。基于这些原因,我们主要讲讲嵌入式系统与嵌入式处理器的特点,了解了这些特点,至于叫什么名字就不必太在意了,名字只是一个代号而已,当然对于理论工作者来说,这或许是个值得花些时间去思考归纳的问题。
……
