### u-boot-1.1.6-2008R1到VDSP5 (bf561) 的移植记录 #### 1.1 #if 在进行u-boot移植的过程中,遇到的第一个问题是关于`#if`预处理器指令的问题。具体来说,在`u-boot-1.1.6-2008R1\include\configs\bf561-ezkit.h`文件中有如下代码段: ```c #if(CONFIG_COMMANDS & CFG_CMD_KGDB) #define CFG_CBSIZE 1024 /* Console I/O Buffer Size */ #else #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif ``` 这段代码在C编译器中可以正常工作,但在汇编器中会报错,错误信息为“Bad number format”。这是因为VDSP5的汇编器不支持8字节整数运算或定义,如: ```c #define CFG_CMD_EXT2 0x1000000000000000ULL /* EXT2 Support */ ``` **解决方法:** 由于`CFG_CBSIZE`在`.s`文件中并未被引用,可以直接修改`bf561-ezkit.h`文件,使其仅在非汇编环境中执行`#if`判断: ```c #ifndef __ASSEMBLY__ #if (CONFIG_COMMANDS & CFG_CMD_KGDB) #define CFG_CBSIZE 1024 /* Console I/O Buffer Size */ #else #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #endif ``` 类似地,还需要检查其他地方是否存在类似问题,例如`#if(CONFIG_COMMANDS & CFG_CMD_NET)`等。 #### 1.2 .macro GCC 4.1的汇编器支持`.macro`语法,这是汇编语言中的宏定义。然而,VDSP5的汇编器可能不支持这种语法。如果遇到使用`.macro`的地方,需要考虑是否能直接替换为汇编器支持的其他形式,或者是否能在C代码中实现同样的功能。 #### 1.3 汇编空语句 在移植过程中可能会遇到需要在汇编代码中插入空语句的情况。通常情况下,空语句不会引起任何问题,但如果汇编器版本较低,可能需要确认是否支持空语句。 #### 1.4 提示信息 在移植过程中,为了便于调试和追踪,可能需要在某些关键位置添加提示信息。这可以通过在代码中添加`printf`语句或使用特定的宏来实现。需要注意的是,这些提示信息应当只在调试模式下启用,以避免在正式版本中占用不必要的空间。 #### 1.5 ENDPROC 在汇编代码中,`ENDPROC`通常用于标记过程的结束。确保使用的汇编器支持这一语法,并且在所有过程的末尾正确使用它,以便汇编器能够正确解析过程的范围。 #### 1.6 使用自定义的CRT代码 对于ADSP Blackfin系列的DSP而言,通常需要自定义CRT(C运行时)代码以适应特定的硬件环境。这部分包括但不限于栈的初始化、异常处理等。 ##### 1.6.1 向导生成的CRT代码 在使用VisualDSP+工具时,通常会有一个向导生成的CRT代码模板,这个模板可能需要根据实际需求进行调整。 ##### 1.6.2 在A核中使用u-boot提供的CRT 考虑到u-boot本身已经包含了相当完善的CRT支持,可以考虑直接使用u-boot提供的CRT代码来简化移植工作。 #### 1.7 改造u-boot.lds.s 在移植过程中,`u-boot.lds.s`文件是一个重要的配置文件,它定义了链接器如何布局程序的各个部分。下面是一些具体的步骤: ##### 1.7.1 包含配置文件 确保链接器脚本包含了所有必要的配置文件。 ##### 1.7.2 定义内存区 明确指定各段代码、数据和堆栈的位置及其大小。 ##### 1.7.3 添加对u-boot库的定义 确保链接器脚本中包含了对u-boot库的支持。 ##### 1.7.4 对原有SDRAM中内容的处理 如果需要保留原有的SDRAM内容,应在此处添加相应的处理代码。 ##### 1.7.5 对.text的转换 对于`.text`段的处理,确保所有必需的函数都被正确链接和调用。 #### 1.8 链接错误 _bss_start 在链接过程中可能出现的`_bss_start`未定义的错误,这通常意味着链接器未能正确识别未初始化的数据段。确保链接器脚本中正确设置了`_bss_start`符号。 #### 1.9 bool的问题 在使用某些类型时可能会遇到与bool类型相关的编译错误。这可能是由于不同编译器对bool类型的定义不同导致的。需要确认编译器对bool类型的定义,并相应地调整代码。 #### 1.10 __xchg 在使用`__xchg`指令时可能会遇到问题,需要检查是否在汇编器支持范围内。 #### 1.11 bsz 在汇编代码中可能需要使用`bsz`指令。确保汇编器支持该指令。 #### 1.12 第二阶段的程序入口 在u-boot中,第二阶段的程序入口是一个重要的组成部分。确保正确设置了程序的入口点,并且所有必需的初始化步骤都已正确执行。 #### 1.13 使用L1 对于ADSP Blackfin DSP而言,使用L1缓存可以显著提高性能。在移植过程中需要考虑如何充分利用L1缓存。 #### 1.14 使用VDSP库 在移植过程中,使用VDSP库可以帮助实现一些复杂的DSP算法。 ##### 1.14.1 添加头文件的引用 确保所有的头文件都被正确引用。 ##### 1.14.2 库的初始化 确保VDSP库被正确初始化。 #### 1.15 DECLARE_GLOBAL_DATA_PTR 在移植过程中,需要确保全局数据指针被正确声明和初始化。 #### 1.16 *cplb_add 在使用`*cplb_add`时可能会遇到问题,需确认其是否在汇编器支持范围内。 #### 1.17 Entry.h `Entry.h`文件中包含了程序入口点的相关定义。确保所有必要的宏和函数都被正确定义。 #### 1.18 const 在使用const关键字时,需要注意编译器对const的定义和处理方式。 #### 1.19 分号惹祸 在编写汇编代码时,有时一个多余的分号可能会导致错误。确保所有语句结尾都使用正确的分号。 #### 1.20 INPUT_SECTION_ALIGN 在链接器脚本中,`INPUT_SECTION_ALIGN`用于指定输入段的对齐方式。确保所有段都按需正确对齐。 #### 1.21 收工 完成所有必要的移植工作后,进行全面的测试,确保移植后的u-boot能够在目标平台上稳定运行。 以上是将u-boot-1.1.6移植到VDSP5 (bf561) 过程中的一些关键知识点和技术细节。希望这些内容能够帮助您更好地理解整个移植过程,并解决可能遇到的技术难题。
- 粉丝: 1140
- 资源: 55
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助