x86程序移植到arm平台的四种场景及解决方案简介

由于arm芯片对比x86具备成本优势以及功耗优势,再叠加国产化自主可控需求,很多时候,需要工程师将原有x86平台上可运行的程序移植到arm平台。

这种移植通常分四种场景:主流软件场景、有对应的源码的场景、没有源码但对性能没有要求的场景、没有源码但对性能有要求的场景。

1. 主流软件场景

这种场景下比较简单,因为随着arm生态的不断完善,主流软件,比如openstack、spark、PostgreSQL、MySQL等都已经做好了对ARM的支持。此时按照官方文档或者网上资料的指引操作即可。

2. 有对应源码的场景

对于Java、Python等解释型语言写的程序来说,因为中间层(Java:JVM+字节码;Python:解释器)替上层屏蔽了硬件OS差异,因此迁移比较简单。

而对于C/C++、Go等编译型语言写的程序来说,迁移的过程则要复杂一些,需要替换工具链,依赖库、适配修改编译脚本,移植编译宏、Builtin函数、内联的汇编函数、SIMD相关移植等。工作还是比较繁琐的。

不过,为了提升用户程序的迁移效率,厂家们也推出了相应的工具,比如:华为的鲲鹏DevKit应用迁移工具,阿里的EasyYitian等。有需要的读者可以去它们的官网查阅相关资料。

华为的相关资料的网址:

https://www.hikunpeng.com/document/detail/zh/kunpengdevps/userguide/Plugins_UserGuide/DevKit_Porting_0001.html

阿里的相关资料的网址:

https://help.aliyun.com/zh/ecs/user-guide/easyyitian-migration-tools?spm=a2c4g.11186623.help-menu-25365.d_4_9_7.6fae1636Q4SSsQ

3. 没有源码但对性能没有要求的场景

没有源码的场景比较难搞,但聪明的工程师们还是想出了解决方案。那就是软件界的"同声传译"---动态二进制翻译。

动态二进制翻译技术可以在运行时将一种指令集架构的二进制代码转换成另一种架构的二进制代码。比如Intel的Houdini可以将Arm指令动态翻译为x86,微软和高通合作开发了windows系统的x86->Arm的动态翻译技术。

华为也有一款动态二进制翻译工具ExaGear,可将X86或者Arm32指令翻译成Arm64指令。在官网和公开网站找到了一些说明图,大家可以参考下:

动态二进制翻译把复杂留给工具,简单留给用户。但是它的不好的地方,是会带来性能的损耗,在对性能要求比较高的场景下,就不适用了。

4. 没有源码,但对性能有要求的场景

找不到源码,但对性能还有要求,这个时候怎么办呢?

这时候就不得不祭出逆向工程这个杀器了。也就是从程序反推出逻辑,重构出代码。

这时,可以使用IDA这个工具,可以将机器码反推成汇编代码和C代码。

通过实时Debug,可以推断出程序的运行逻辑。

从而将核心的逻辑重构出来。

不过这种方法对工程师的基本功要求很高,毕竟重构的过程需要工程师在一堆很没有可读性的代码中,像个侦探一样,抽丝剥茧,熟练应用栈、堆、调试、汇编等底层技能来抽丝剥茧。

不过,友情提示一下,看这种代码,如果借助下KIMI、豆包、deepseek等AI助手,则会大大提升效率。如果大家在进行这项工作的话,不妨一试。

相关推荐
szxinmai主板定制专家10 小时前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576
女神下凡10 小时前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范
abc light10 小时前
ARM 裸机开发(1)——ARM 体系结构
c语言·arm开发
abc light12 小时前
ARM 裸机开发(2)——ARM 汇编与启动代码
汇编·arm开发
女神下凡1 天前
芯参谋(77):裸机(无 OS)存储驱动开发指南
arm开发·单片机·嵌入式硬件·设计规范·1024程序员节
女神下凡1 天前
芯参谋(76):电源监控复位芯片电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
陌上花开缓缓归以1 天前
liteos 内存分布
arm开发
u0109053592 天前
(永久免费)树莓派 / 香橙派等开发板,安装神卓互联巴比达内网穿透安装教程(Linux ARM 版 V9.4.1)
linux·运维·arm开发
打工仔折腾 AI3 天前
后端部署避坑:吃透IPv4地址、网络接口与CIDR前缀的实际应用
arm开发·人工智能·后端·python·性能优化
工控存储研习3 天前
嵌入式设备启动时间优化:从上电到应用就绪,每一毫秒怎么抠
arm开发