开发人员如何指定一个二进制镜像文件的内部布局呢?可以传递给链接器一个链接描述文件,也成为链接器命令脚本。可以将这个特殊的文件看做一份构造二进制可执行镜像的“配方”。下面代码中显示了U-Boot引导加载程序使用的链接器描述文件的部分内容。
该脚本从这里开始定义了二进制ELF镜像的输出段。它指示链接器将名为.resetvec的代码段放置在数据镜像的固定地址处,即地址0xFFFFFFFC。此外,它还指定这个段的剩余部分全部填充为1(0xffff)。这是因为一个闪存的存储阵列在被擦除后内容全部是1。这个技术不仅降低了闪存的耗损,同时也显著提高了将数据写入闪存相应扇区的速度。
下图显示定义.resetvec代码段的汇编文件内容,它来自最新B-Boot发行版,位于….archpowerpccpuppc4xx esetvec.S的汇编文件中。注意,在一个只有32位地址的机器中,这段代码的长度不能超过4 B。这是因为,不论配置选项(文件中的宏)取值如何,这段代码都只定义了1条指令。
这个文件会生成一条无条件跳转指令(branch,在Power架构的编译器语法中表示为b),这条简单的跳转指令会被放置到输出镜像的闪存绝对地址0xFFFFFFFC处。如405GP处理器会从这个固定的地址处获取其第一条指令。