S3C2440上电后,硬件自动从NAND FLASH中(NAND 启动)读取前4K字节内容到内部SRAM,并从地址0开始取指令执行,不管这4K的链接地址(运行时代码应该位于的地址)在什么地方,哪怕在0X3000000,CPU也是从SRAM中的0地址开始执行,但是不能读写全局变量或者静态变量,也不能使用位置相关指令跳转。访问全局变量或者静态变量都是链接地址,而位置相关跳转指令如LDR PC这一类的,同样采用链接地址。如果使用B BL这样的便宜地址指令跳转就不会去访问链接地址。,因为链接地址是绝对地址,偏移地址是相对地址。相对地址只和当前执行的地址有关,和链接地址无关。
如果链接起始地址不是0 ,那么程序一开始从0 执行,遇到访问全局变量的时候就会去链接地址访问,遇到跳转绝对地址代码就会跳到链接地址去,在此之前如果没有重定位就会出错,重定位就是把代码搬到链接地址去执行。