"可执行文件组成及内存映射-atmega128中文手册"
这篇文档主要讲解了可执行文件的组成和内存映射,特别关注于微控制器如ATmega128的应用。在嵌入式系统中,理解这些概念对于有效地移植和运行Linux系统至关重要。
在嵌入式系统中,可执行文件主要有两种形式:.axf文件(包含调试信息,用于AXD调试工具)和.bin文件(二进制可执行代码)。我们主要讨论.bin文件的结构。
**2.1 可执行文件的组成**
1. **存放态**
- 存放态的可执行文件在存储介质(如Flash或磁盘)上,通常包括两个部分:代码段和数据段。
- 代码段分为可执行代码段(.text)和只读数据段(.rodata)。
- 数据段又分为初始化数据段(.data)和未初始化数据段(.bss)。
- 存放态的布局如下:
```
+-------------+-----------+
| .bss | |
+-------------+ 数据段 |
| .data | |
+-------------+-----------+
| .rodata | 代码段 |
|_____________| |
| .text | |
+-------------+-----------+
```
2. **运行态**
- 当可执行文件被加载到RAM中运行时,它变为运行态。在ADS环境下,各个段有特定的名称,如.bss段称为ZI段。
在Linux系统移植过程中,涉及的步骤包括硬件环境的设定、软件环境的搭建、工具的使用等。这通常包括主机和目标板的硬件配置,如主机的Windows或Linux操作系统,以及目标板的最终运行环境。软件环境中,需要配置交叉编译工具链,建立u-boot、内核、应用程序的移植工作目录,并设置必要的系统服务,如TFTP服务器,以支持远程文件传输。
在启动过程中,bootloader起着关键作用。ADSbootloader部分介绍如何编写启动加载程序,包括了解ARM汇编语言、使用ADS工具链(armasm、armcc、armlink)以及AXD仿真器的使用。基本原理部分详细阐述了可执行文件的内存映射和装载过程,以及启动过程中汇编和C语言代码的作用。
最后,介绍了GNU交叉工具链的构建,包括设置环境变量、获取和编译binutils、gcc、glibc以及Linux内核源码,应用补丁,并准备内核头文件,以便为特定平台生成交叉编译工具链。
这篇文档覆盖了嵌入式系统中的核心概念,从可执行文件的结构到系统启动流程,再到交叉编译工具链的构建,是进行嵌入式Linux系统开发的重要参考资料。