作品简介

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 本章小结
展开全部