S3C2440A工程移植:从ADS1.2到RealView MDK

来源:互联网 发布:欧洲右翼崛起知乎 编辑:程序博客网 时间:2024/05/18 20:12

        RealView MDK在中国推出已经有一段时间了,而且作为未来发展的趋势必将取代ADS1.2,成为工程师广泛应用的开发平台。

但是,以前的S3C2440的项目都是由ADS开发,而且我在网上搜索并没有发现有ADS1.2工程移植的例子,只能自己摸索。而且刚刚接触嵌入式的这个部分,希望把这个成果与大家分享,让其他的人少走弯路。

移植思路:

        不兼容问题主要在于启动的汇编代码中加入了很多的与编译器相关的调用,只需修改原有的2440init.s部分代码就可以实现。而修改Realview自身引入的s3c2440a.s启动代码修要修改的内容过多。因而,采用第一种方案。

 

编译中出现的问题以及解决:

1,  .\output\LJD2440TEST.axf: Error: L6218E: Undefined symbol Main (referred from 2440init.o).

Main -> main,新的Realview MDK中大小写认为名称不同

 

2,.\output\LJD2440TEST.axf: Error: L6915E: Library reports error: scatter-load file declares no heap or stack regions and __user_initial_stackheap is not defined

    加入部分代码

                EXPORT  __user_initial_stackheap

__user_initial_stackheap

 

                LDR     R0, =  Heap_Mem

                LDR     R1, =(Stack_Mem + USR_Stack_Size)

                LDR     R2, = (Heap_Mem +      Heap_Size)

                LDR     R3, = Stack_Mem

                BX      LR

 

3

.\output\LJD2440TEST.axf: Error: L6218E: Undefined symbol Image$$RW$$Limit (referred from 2440lib.o).

.\output\LJD2440TEST.axf: Error: L6218E: Undefined symbol Image$$RO$$Base (referred from main.o).

.\output\LJD2440TEST.axf: Error: L6218E: Undefined symbol Image$$RO$$Limit (referred from main.o).

.\output\LJD2440TEST.axf: Error: L6218E: Undefined symbol Image$$RW$$Base (referred from main.o).

.\output\LJD2440TEST.axf: Error: L6218E: Undefined symbol Image$$ZI$$Base (referred from main.o).

.\output\LJD2440TEST.axf: Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from main.o).

 

办法:

        重新编写.sct加载文件

4, Error: L6238E: foo.o(.text) contains invalid call from '~PRES8' function to'REQ8' function Warning: L6306W: '~PRES8' section foo.o(.text) should not use the address of 'REQ8' function foobar

 

办法:在每个汇编文件的开头,添加“PRESERVE8”指令

原创粉丝点击