我们制作映像文件的目的什么?把自己的程序烧写到启动设备,让boot ROM程序启动它。
所以制作映像文件的起点是:我们编写的程序。制作过程中各填值的计算方法如下图所示。
上图中各步骤细说如下:
① 确定入口地址entry:
我们的程序运行时要放在内存中哪一个位置,这是我们决定的。它被称为入口地址、链接地址。
② 确定映像文件在内存中的地址start:
boot ROM程序启动时,会把“initial load region”读出来,“initial load region”里含有IVT、Boot data、DCD。boot ROM根据DCD初始化设备后,再把整个映像文件读到内存。
在启动设备上,“initial load region”之后紧跟着我们的程序,反过来说就是我们程序的前面,放着“initial load region”。假设“initial load region”的大小为load_size,那么在内存中“initial load region”的位置start = entry – load_size。
注意:“initial load region”位于启动设备0位置,它的头部并不是IVT,而是一些无用的数据(或是分区信息)。
③ 确定IVT在内存中的地址self:
我们知道IVT在启动设备上某个固定的位置:ivt_offset。那么在内存中它的位置可以如下计算:
self = start + ivt_offset = entry – load_size + ivt_offset
④ 确定Boot data在内存中的地址boot_data:
IVT的大小是32字节,IVT之后就是Boot data,而IVT中的boot_data值表示Boot data在内存中的位置,计算如下:
boot_data = self + 32 = e


发布评论