现在的位置: 首页 > 综合 > 正文

U-boot-1.1.6-2008R1到vdsp5(bf561)的移植记录(6):使用u-boot的crt代码

2013年09月09日 ⁄ 综合 ⁄ 共 1880字 ⁄ 字号 评论关闭
 

  
1             向导生成的crt代码
在使用vdsp5的向导创建一个新的工程时,它会默认生成一个*_basiccrt.s的文件,其中的*号为工程的名称。这就是在AB两个核中使用的crt文件了,然后通过ldf文件中的相应设置将crt代码放在两个核各自的起始位置上(A核为0xffa0 0000,B核为0xff60 0000)。下面就是ldf文件中的相应内容:
// 添加doj文件到A核工程中
$OBJECTS_CORE_A =
   "./Debug/u-boot_basiccrt.doj"
   , RT_LIB_NAME(profile561)
   , $COMMAND_LINE_OBJECTS {!DualCoreMem("CoreB")}
   , "cplbtab561a.doj"
   , RT_OBJ_NAME(crtn561)
 
 
PROCESSOR p0
{
// 指定将basiccrt.doj的第一行程序写入到0xFFA00000,其中start*_basiccrt.s中第一行语句的标号
   RESOLVE(start, 0xFFA00000)
   KEEP(start,_main)
   SECTIONS
   {
      L1_code
      {
         …
         // basiccrt.s中的代码放到L1_cache
         INPUT_SECTIONS($OBJECTS_CORE_A(program) $LIBRARIES_CORE_A(program))
         …
        
      } > MEM_A_L1_CODE
} // SECTIONS
}
B核的代码与此相似,不做分析。
2             在A核中使用u-boot提供的CRT
u-boot使用的crt文件为u-boot-1.1.6-2008R1/cpu/blackfin/start.s,我们希望用此文件来替换vdsp向导生成的u-boot_basiccrt.s。
1.         将start.s添加到corea.dlb工程中,由于编译器的不同,此处需要做一些适当的修改,参见前几篇文章的说明。
2.         在ldf文件中删除A核对u-boot_basiccrt.s的引用:
$OBJECTS_CORE_A =
 
/*$VDSG<insert-user-objects-for-coreA-beginning>                */
/* Text inserted between these $VDSG comments will be preserved */
/*$VDSG<insert-user-objects-for-coreA-beginning>                */
 
   //"./Debug/u-boot_basiccrt.doj"       // 注释掉这行,还要删除下一行的逗号
   , RT_LIB_NAME(profile561)
   , $COMMAND_LINE_OBJECTS {!DualCoreMem("CoreB")}
   , "cplbtab561a.doj"
   , RT_OBJ_NAME(crtn561)
3.         因为u-boot_basiccrt.s中入口为start,而start.s中的入口为_start,所以还必须修改如下两行:
   RESOLVE(start, 0xFFA00000)
   KEEP(start,_main)
将之修改为
   RESOLVE(_start, 0xFFA00000)
   KEEP(_start,_main)
经过上述修改,u-boot会提示链接错误,如下所示:
[Error li1021] The following symbols referenced in processor 'p0' could not be resolved:
        '_bss_end [__bss_end]' referenced from 'corea.dlb[start.doj]'
        '_bss_start [__bss_start]' referenced from 'corea.dlb[start.doj]'
        'cpu_init_f [_cpu_init_f]' referenced from 'corea.dlb[start.doj]'
        'initcode [_initcode]' referenced from 'corea.dlb[start.doj]'
但是这已经标志着我们开始迈出第一步了,不是吗?

 

抱歉!评论已关闭.