论文部分内容阅读
Linux环境中编译ARM工程,必须使用ARM交叉编译工具和MAKE工具,通过Makefile文件实现编译过程。ARM工程在Windows平台和Linux平台下的语法区别很大,编译工具链也不一样。选题来源于某公司设计平台升级,需要一个把ARM工程从Windows平台移植到Linux平台并进行编译连接。由于编译器的区别,若要在Linux平台下开发原来在Windows平台下的ARM工程,首先必须要修改ARM工程,使其符合Linux平台下GCC的编译规则,其次为了满足此公司的项目开发需求,需要实现ARM工程目录结构的自动定义,最后对编译连接生成的二进制文件进行分割处理,生成设计平台其他的部分需要的vhx文件。由此可得出ARM自动编译工具的功能需求是:ARM汇编文件的自动移植、ARM C源文件的自动移植、地址映射配置文件的自动移植、自动定义目录结构、配置编译连接参数、分割二进制文件等。根据需求,本文分为三个模块:移植模块、编译模块和接口模块,详细设计如下:移植模块的主要功能是将Windows平台下ARM工程自动转换成Linux平台下ARM工程。移植模块主要包括三个脚本:ARM汇编文件移植脚本、C源文件移植脚本和地址映射配置文件移植脚本。论文首先详细分析了 ARM工程的汇编源文件、ARM C源文件以及地址映射配置文件在Windows平台下和Linux平台下的区别和联系,然后采用了Python正则表达式的匹配功能,将各个文件在Windows平台相关的关键字转换成Linux平台下的相关关键字,以达到自动移植的目的。编译模块的主要功能有三个:定义ARM工程目录、配置编译连接参数、分割二进制文件。ARM工程目录的定义包括输入文件目录、输出文件目录以及库文件目录的定义。由于在方案选择的时候ARM自动编译工具的设计方向是适用于该公司目录结构的任意ARM架构的ARM工程的编译工具,所以目录结构的自动定义直接在Makefile文件中实现,在该公司ARM工程目录结构的基础上目录的变化不会影响工具的使用。配置编译连接参数是在配置脚本中实现的,本文以ARM7为例配置了一些编译连接的参数,如果需求或ARM架构改变只需要修改相关参数即可。最后二进制文件根据项目环境需要分割处理成vhx脚本,也是在Python脚本中实现的。接口模块的主要作用是方便和平台中的其他部分联调和调整ARM自动编译工具的功能,简化使用流程等。它包括一个配置脚本和一个控制脚本,采用Shell脚本语言实现。工具的测试分为两步,首先人工查看移植结果,基本符合预期。然后在Linux平台下的验证平台VCS工具中运行ARM工程,基本验证通过,但是C内嵌汇编以及优化延时问题待解决。本工具已在公司使用,极大地简化了设计流程,效果良好。