蒋立兵,申 秋,韩隆隆
(中国电子科技集团公司第三十研究所,四川 成都 610041)
在某些特殊网络内进行内网漫游的时候,能够触及甚至登录大量的设备或板卡,这些板卡通常运行的是嵌入式Linux系统,能够通过telnet或ssh方式登录。当需要在这些设备上运行一些常用的工具时,会面临一些比较棘手的问题,大致可分为如下几类。
(1)目标CPU架构为ARM、PowerPC、MIPS等嵌入式平台时,x86架构下编译的程序不能在目标上运行,而代码在目标平台也不能进行编译。
(2)目标机器采用uClibc时,通过常规ARM、MIPS等交叉编译工具编译出的程序,在目标机器上依旧不能运行。
(3)目标机器的内核版本很低,高版本内核下编译的程序不能在目标程序上运行。
本文从交叉编译工具生成、交叉编译和跨版本运行等方面进行阐述,能够解决大部分上述问题。
交叉编译是在嵌入式领域常用的一种编译方式,通过选择不同的交叉编译工具链,能够在当前平台下,编译出可运行于不同体系架构平台的程序[1]。例如在x86平台电脑上,使用Android Studio进行Android JNI开发时,会调用ARM的交叉编译工具链进行编译,编译好的软件能够在Android手机上运行。
使用交叉编译的主要原因如下:
(1)目标平台一般为低功耗设计,性能较低,运行速度较慢;
(2)编译过程需要消耗大量资源,嵌入式系统往往没有足够的内存和硬盘;
(3)完整的编译环境需要很多支持包,很多嵌入式系统是精简版Linux,难以满足需求。
Linux编译过程包括了预处理、编译、汇编、链接等过程[2-3],如图1所示。……