u-boot中start.s中的一段代码不能理解。在这里求大神提醒一下!!万分感激!!!
发布网友
发布时间:2022-05-06 01:49
我来回答
共1个回答
热心网友
时间:2023-10-10 14:00
您好,这样的:
/*
备注这几个由.word伪操作符定义变量的作用及其取值 _TEXT_BASE: .word TEXT_BASE
_TEXT_BASE:此处定义一汇编语言标签,更好的理解就是:告诉编译器,为_TEXT_BASE分配存储空间,该空间的名字就叫_TEXT_BASE,该空间中存储的值就是由.word后面确定的TEXT_BASEC(即0x33F80000),相当于C语言中 long _TEXT_BASE=TEXT_BASE; TEXT_BASE定义在board\smdk2410\config.mk文件中。该值的作用是告诉链接器,本程序运行的基地址为TEXT_BASE。U-boot编译后,烧在FLASH的第一个块中,CPU复位上电后,PC寄存器为0x0000。怎么会跑到TEXT_BASE处执行呢?
事实上,CPU上电后,从地址0x0000处执行,而U-BOOT的最起始代码,即本文件中从_start开始的代码是与地址不相关的,这段代码放在任何空间执行的结果都是一样(当然不是绝对,假设u-boot代码段是100K,则放在TEXT_BASE-80K处,搬运时就会把u-boot代码后面20K部分覆盖为最前面的20K)。追问为什么是 _TEXT_BASE 和 _start 比较!! 我感觉应该是 TEXT_BASE(即0x33F80000)和 _start 比较啊!!!