新書推薦:
《
英雄之旅:把人生活成一个好故事
》
售價:NT$
398.0
《
分析性一体的涌现:进入精神分析的核心
》
售價:NT$
556.0
《
火枪与账簿:早期经济全球化时代的中国与东亚世界
》
售價:NT$
352.0
《
《全面与进步跨太平洋伙伴关系协定》国有企业条款研究
》
售價:NT$
449.0
《
银行业架构网络BIAN(全球数字化时代金融服务业框架)(数字化转型与创新管理丛书)
》
售價:NT$
449.0
《
金托邦:江湖中的沉重正义
》
售價:NT$
275.0
《
易经今解:释疑·解惑·见微
》
售價:NT$
403.0
《
东欧史(全二册)-“中间地带”的困境
》
售價:NT$
1010.0
|
內容簡介: |
本书主要介绍BootLoader的开发理论、流程与实例,以当前流行的ARM和Linux为蓝本,详细介绍了如何一步步实现可用的BootLoader。该书既对Linux下的开发环境、编译器使用、处理器架构以及编译和链接、链接脚本的细节做了较全面的理论介绍,又结合具体的环境向读者说明了BootLoader的原理和开发流程,使读者真正懂得BootLoader是如何工作的,即便今后遇到其他处理器或者引导其他操作系统,也能熟知开发或者移植BootLoader的思路。本书是初涉BootLoader移植开发领域读者的一本不可多得的参考书。书中介绍的理论不仅仅对理解BootLoader有帮助,而且对理解计算机系统嵌入式系统也有启发意义,适合广大嵌入式系统爱好者和开发人员参考使用。
|
目錄:
|
前言第1章 BootLoader的概念 1.1 BootLoader的角色 1.2 BootLoader的来历 1.3 BootLoader的概念 1.3.1 MCU下的BootLoader 1.3.2嵌入式ARM和Linux下的BootLoader 1.3.3 PC下的引导流程 1.4本章小结 第2章L.nux开发环境 2.1编辑器Vim 2.1.1 Vim介绍 2.1.2 Vim的两个基本模式 2.1.3 Vim的两个常用模式 2.1.4 Vim的启动与退出 2.1.5 Vim下光标的移动 2.1.6 Vim下的复制、粘贴和删除 2.1.7 Vim下的撤销和重复 2.1.8 Vim下的查找和替换 2.1.9 Vim下的文件恢复 2.1.10 Vim下的插件 2.2编译器GCC和交叉编译器2.2.1 GCC的编译流程 2.2.2 GCC的常用编译选项2.2.3交叉编译器 2.3常用shell命令和脚本 2.3.1 find命令 2.3.2 grep命令 2.3.3管道与重定向 2.4 工程管理Make和Makefile2.4.1 Make和Makefile 2.4.2 Makefile中的变量 2.4.3 自动推导规则 2.4.4嵌套的Makefile 2.4.5 Make伪目标 2.4.6自动化变量 2.4.7 Make的内嵌函数 2.5本章小结 第3章 ARM体系结构3.1处理器模式 3.2异常 3.3 ARM寄存器 3.4通用寄存器 3.4.1未分组的寄存器:R0~R7 3.4.2分组的寄存器:R8~R14 3.4.3寄存器R15:程序计数器 3.5程序状态寄存器 3.5.1 PSR位的类型 3.5.2条件标志位 3.5.3中断禁止位 3.5.4模式位 3.6本章小结 第4章ARM指令集 4.1数据处理指令 4.2分支指令 4.3软中断指令 4.4程序状态寄存器指令 4.5协处理器指令 4.6加载常量的伪指令 4.7本章小结 第5章ARM寻址模式 5.1寻址模式1-数据处理指令的寻址模式 5.1.1编码格式 5.1.2移位器操作数 5.1.3数据处理操作——立即数 5.1.4数据处理操作——寄存器 5.1.5数据处理操作——立即数的逻辑左移 5.1.6数据处理操作——寄存器的逻辑左移 5.1.7数据处理操作——立即数的逻辑右移 5.1.8数据处理操作——寄存器的逻辑右移 5.1.9数据处理操作——立即数的算术右移 5.1.10数据处理操作——寄存器的算术右移 一5 .1.11数据处理操作——立即数的循环右移 一5.1.12数据处理操作——寄存器的循环右移 一5.1.13数据处理操作——扩展的循环右移 5.2寻址模式2-字或无符号字节的loadstore指令 5.2.1编码格式 5.2.2立即数偏移 5.2.3寄存器偏移 5.2.4比例寄存器偏移 5.2.5立即数的前变址寻址 5.2.6寄存器的前变址寻址 5.2.7 比例寄存器的前变址寻址 5.2.8立即数的后变址寻址 5.2.9寄存器的后变址寻址 5.2.10比例寄存器的后变址寻址 5.3 寻址模式3-杂类loadstore指令的寻址方式 5.3.1编码格式 5.3.2杂类loadstore-立即数偏移 第6章编译和链接第7章链接脚本第8章Linux下开发流水灯第9章U-Boot代码的分析第10章实现简单的BootLoader
|
內容試閱:
|
BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射,从而将系统的软硬件环境设置成一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常没有像PC中的BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。BootLoader是CPU上电后运行的第一段程序,它的作用就是对嵌入式系统中的硬件进行初始化,创建内核需要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,真正起到引导和加载内核的作用。实际上,一个功能比较强大的BootLoader已经相当于一个微型的操作系统了。不同的CPU体系结构有不同的BootLoader。有些BootLoader支持多种体系结构的CPU,比如U-Boot就同时支持ARM体系结构和MIPS体系结构。除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,通常需要修改BootLoader的源程序。因此每款嵌入式产品的BootLoader都是独一无二的,但我们可以总结出开发或者维护特定BootLoader需要哪些背景知识,掌握了这些背景知识,我们就可以做到以不变应万变。为了引导操作系统,BootLoader与CPU体系结构和操作系统有着非常紧密的联系。在本书中,我们以ARM体系结构和嵌入式Linux操作系统为原型讲述BootLoader的原理。通过理论联系实践的方法论,让读者理解BootLoader的概念,掌握开发BootLoader的方法。本书适合从单片机向ARM过渡并希望了解嵌入式开发的在校学生以及想要从事BootLoader开发移植工作的工程师参考使用。下面来梳理一下需要哪些背景知识:1因为我们引导的操作系统是Linux,所以需要熟悉Linux开发环境。BootLoader也是一串代码,我们必须了解Linux下编辑器和编译器的用法;作为Linux下的开发者,对shell脚本和Make工程管理工具也要有必要的了解。第1章对BootLoader做了基本介绍,第2章则详细介绍了Linux开发环境。2因为我们仅仅以ARM体系结构作为原型,所以会在第3~5章讲述ARM体系结构、ARM指令集和ARM独特的寻址模式。3很多嵌入式开发人员都是通信、电子和自动化等专业的,对于计算机的编译和链接掌握得不够深入,因此第6章介绍编译和链接。控制链接行为的链接脚本是特有的脚本语言,第7章比较详细地介绍了该脚本的细节。4第8章采用流水灯的实验融会贯通前面各章节的理论,接着第9章对U-Boot代码展开分析,最后在第10章一步一步地实现了BootLoader。在此过程中,我们更注重ARM体系结构、编译链接等知识的融会贯通,不会花太多篇幅讲解DRAM、MMC等模块的驱动。本书能够成书,要感谢LinkSprite团队的资源支持和左宝柱在pcDuino v3平台上的帮助。最后感谢家人和朋友对我的支持,鼓励我完成这项值得用心去做的工作。因作者水平有限且时间仓促,书中难免存在疏漏,还望广大读者不吝赐教。胡尔佳2014年11月
|
|