类似推荐
编辑推荐
本书以当前流行的ARM和Linux为蓝本,详细介绍了如何一步步实现可用的BootLoader。
内容简介
不同的CPU体系结构有不同的BootLoader。有些BootLoader支持多种体系结构的CPU,比如U-Boot就同时支持ARM体系结构和MIPS体系结构。除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的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章 Linux开发环境
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和Makefile
2.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——字或无符号字节的load/store指令
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——杂类load/store指令的寻址方式
5.3.1 编码格式
5.3.2 杂类load/store——立即数偏移
5.3.3 杂类load/store——寄存器偏移
5.3.4 杂类load/store——立即数的前变址寻址
5.3.5 杂类load/store——寄存器的前变址寻址
5.3.6 杂类load/store——立即数的后变址寻址
5.3.7 杂类load/store——寄存器的后变址寻址
5.4 寻址模式4——批量load/store
5.4.1 编码格式
5.4.2 批量load/store——执行后增加
5.4.3 批量load/store——执行前增加
5.4.4 批量load/store——执行后减少
5.4.5 批量load/store——执行前减少
5.4.6 用于栈操作的批量load/store
5.5 寻址模式5——协处理器的load/store
5.5.1 编码格式
5.5.2 协处理器的load/store——立即数偏移
5.5.3 协处理器的load/store——立即数的前变址寻址
5.5.4 协处理器的load/store——立即数的后变址寻址
5.5.5 协处理器的load/store——无索引
5.6 本章小结
第6章 编译和链接
6.1 ELF文件结构描述
6.2 段表
6.3 符号表结构
6.4 存储空间分配
6.4.1 简单的存储布局
6.4.2 实际采用的空间布局
6.5 重定位信息
6.5.1 重定位表项
6.5.2 重定位类型
6.6 静态链接和重定位
6.6.1 符号和符号表
6.6.2 符号解析
6.6.3 重定位
6.7 本章小结
第7章 链接脚本
7.1 链接脚本的基本概念
7.2 链接脚本格式
7.3 简单的链接脚本示例
7.4 简单的链接脚本命令
7.4.1 入口点
7.4.2 文件命令
7.4.3 格式命令
7.4.4 区域别名
7.4.5 杂类命令
7.5 为符号分配值
7.5.1 简单的分配
7.5.2 HIDDEN
7.5.3 PROVIDE
7.5.4 PROVIDE_HIDDEN
7.5.5 源代码引用
7.6 段命令
7.6.1 输出段描述
7.6.2 输出段名称
7.6.3 输出段地址
7.6.4 输入段描述
7.6.5 输出段数据
7.6.6 输出段关键字
7.6.7 输出段丢弃
7.6.8 输出段属性
7.6.9 覆盖描述
7.7 内存命令
7.8 链接脚本的表达式
7.8.1 常量
7.8.2 符号常量
7.8.3 符号名称
7.8.4 孤立的段
7.8.5 位置计数器
7.8.6 运算符
7.8.7 赋值
7.8.8 内建函数
7.9 本章小结
第8章 Linux下开发流水灯
8.1 GNU ARM汇编简介
8.2 流水灯的硬件描述
8.3 流水灯的汇编实现
8.4 流水灯的编译和链接
8.5 本章小结
第9章 U-Boot代码的分析
9.1 U-Boot简介
9.2 U-Boot目录结构
9.3 U-Boot配置和编译
9.4 U-Boot代码分析
9.4.1 SPL代码追踪
9.4.2 U-Boot代码追踪
9.5 本章小结
第10章 实现简单的BootLoader
10.1 STM32下的BootLoader设计
10.2 硬件平台pcDuino简介
10.2.1 pcDuino nano配置
10.2.2 pcDuino nano的接口和外设
10.2.3 平台和主芯片介绍
10.3 三种方式实现代码复制和跳转
10.3.1 方式一
10.3.2 方式二
10.3.3 方式三
10.4 实现BootLoader
10.4.1 广义上的BootLoader
10.4.2 如何引导Linux
10.4.3 引导代码实现
10.4.4 BootLoader引导Linux总结
10.5 本章小结
深入理解BootLoader是2016年由机械工业出版社华章分社出版,作者胡尔佳。
得书感谢您对《深入理解BootLoader》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。