华为根生态技术探索 | 鲲鹏DevKit代码迁移工具快速完成C&C++源码迁移

举报
叶一一 发表于 2024/12/18 18:57:45 2024/12/18
【摘要】 为何要进行跨平台软件迁移?我下载了一个微信软件包,在安装的时候,却提示我安装版本和我的电脑系统不匹配。仔细观察微信下载的页面不难发现,微信提供了两个芯片版本:Intel 芯片和Apple 芯片。微信对不同的芯片架构提供了不同的安装包。可见,同一个软件,要支持不同的硬件和系统,需要提供对应的版本。通常,开发者会将软件迁移至多个平台,以确保用户在不同的设备上都能体验到相同的功能。这种多平台适配的...

为何要进行跨平台软件迁移?

我下载了一个微信软件包,在安装的时候,却提示我安装版本和我的电脑系统不匹配。

1.jpg

仔细观察微信下载的页面不难发现,微信提供了两个芯片版本:Intel 芯片和Apple 芯片。微信对不同的芯片架构提供了不同的安装包。

2.jpg

可见,同一个软件,要支持不同的硬件和系统,需要提供对应的版本。

通常,开发者会将软件迁移至多个平台,以确保用户在不同的设备上都能体验到相同的功能。这种多平台适配的需求便是跨平台软件迁移的主要原因之一‌。

此外,不同平台上的用户群体、消费习惯和市场环境存在差异。一款软件在一个平台上的表现并不能保证在其他平台上的成功。因此,开发者经常需要将其产品迁移到其他平台上,以适应不同的市场,并寻求更广泛的用户基础和销售机会。

以及,跨平台软件迁移还涉及技术更新和升级的需求。随着新技术的不断涌现,旧有的软件架构或技术可能无法满足新的需求或标准。迁移至新的平台或技术栈可以帮助软件保持与时俱进,提升性能、安全性和用户体验‌。

如何快速实现跨平台软件迁移?

想要实现跨平台软件的快速迁移,开发者多数情况下会选择使用自动化迁移工具‌。自动化迁移工具相较于人工迁移适配,能显著提高迁移效率和降低技术门槛‌

例如,鲲鹏DevKit代码迁移工具,它提供了软件包扫描和重构等功能。该工具能自动分析软件包的兼容性,快速提供目标平台的版本下载路径,并实现一键重构,从而达到Hour级跨平台迁移的效果‌。

如何使用鲲鹏DevKit实现软件的快速迁移

为了解决平台差异问题,Devkit推出了迁移工具帮助用户进行迁移,迁移工具提供了五大迁移功能,帮助开发者简单方便的将软件迁移到鲲鹏平台上进行使用。

软件包迁移流程

3.jpg

一个待迁移的系统往往是由很多个复杂的子组件组成的,除了自己开发的源代码,还有引用的各种依赖软件,使用Devkit迁移工具会使整个系统迁移工作更加简单高效,首先用户可以进行软件迁移评估,将待迁移的软件包传入,获取so依赖库兼容信息、工作量预估信息等多项关键数据,方便后续重构功能的使用。

之后再根据子组件的情况使用不同的重构功能,如果待迁移的子组件是C/C++编写的软件,同时可以获取到源码包,则可以使用源代码迁移功能进行源码级别迁移,迁移结束后还可以使用鲲鹏亲和分析进行扫描,修复其中的变量对齐,内存一致性等问题、提升软件的性能和稳定性;除了源码级的重构,迁移工具还提供了软件包重构功能,将用户的X86软件包重构为适用于鲲鹏平台的软件包;同时针对工程和科研领域的一些常用软件,用户可以直接使用专项软件迁移功能获取迁移好的软件包直接使用,一步到位完成迁移。

C&C++源码迁移实验

步骤1:下载迁移源码

Smartdenovo 是一款在 github 上开源的一款基于 C 语言开发的开源软件,基于 X86 平 台进行开发,源码地址如下:https://github.com/ruanjue/smartdenovo

git clone https://github.com/ruanjue/smartdenovo 

在实验的过程中,还需要 avxToNeon 的源代码,当应用程序从 x86 架构移植到鲲鹏架构 时,由于 Arm64 指令名称和功能与 x86 不同,需要进一步开发指令。

为了减少用户的移植工作量,在 avxToNeon 项目中,常用的 AVX 指令被封装为独立的模 块, AVX 指令被相关的 NEON SIMD 指令取代,而指令名称和功能保持不变。用户可以 通过将相关头文件导入应用软件来调用相应的指令。avxToNeon 的源码存放地址如下: https://github.com/kunpengcompute/AvxToNeon

git clone https://github.com/kunpengcompute/AvxToNeon 

将 AvxToNeon 复制到 smartdenovo 项目目录下,然后将 smartdenovo 打成 zip 压缩包,留作后面创建源码迁移任务。

步骤2:自动部署装有 DevKit 的鲲鹏服务器

在云主机打开终端窗口,执行自动部署命令:

hcd deploy --password 远端服务器密码 --time 7200
# --password 待部署项目所在 ECS 的 root 用户密码(至少 8 个字符)
# --time value 待部署资源的保留期(单位为秒,至少 600 秒,默认 600 秒)。当前 实验预估需要 1 小时,可以配置 time 为 1-2 小时保留期。

该命令会自动部署鲲鹏服务器并安装 DevKit。首次部署会直接执行,旧资源未到期时重复部 署,会提示是否删除前面创建的资源,可以删除旧资源再次部署。

记录部署远端服务器公网 IP、Devkit 平台访问地址。

步骤3:安装鲲鹏代码迁移插件

方式一:在线安装

进入云主机,打开 CodeArts IDE,点击左侧“扩展”搜索“Kunpeng Porting Advisor Plugin” 点击安装该插件。

4.jpg

方式二:本地安装

前往鲲鹏社区官网下载插件 Kunpeng Porting Advisor Plugin 到云主机,下载地址为: CodeArts IDE 插件市场。

5.jpg

安装好插件后,在 CodeArts IDE 点击左上角“文件”,选择“设置”,在设置界 面选择“应用程序”-“代理服务器”,将“Proxy Support”设置为“off”。

步骤4:登录 DevKit 工具

1、在云主机进入 CodeArts IDE,打开安装好的鲲鹏代码迁移插件,点击“...”中的“配置远端服务器”。

2、填配置远端服务器成功后,点击“登录”,首次登录需要创建管理员密码。

3、安装完成后选择“采用 SSH 连接时输入的 IP 地址 xxx.xxx.xx.xx”然后点击立即登录。

4、设置密码后进行登录。

步骤5:执行源码扫描任务

1、登录代码迁移工具成功后,在插件窗口新建源码迁移任务。

2、在新建源码迁移任务界面,上传 2.1 步骤打好的 smartdenovo.zip 压缩包,目标操作系统 切换成 CentOS 7.6,其他保持默认,点击“开始分析”。

3、扫描完成完成后,点击 CodeArts IDE 下面“终端”登录到远端弹性云服务器(命令:ssh root@远端服务器公网IP),在远端服务器中执行以下命令,编译迁移前的代码,对比迁移效果。

尝试编译未进行迁移修改的代码,查看是否可以编译成功。编译运行命令如下:

cd /opt/portadv/portadmin/sourcecode/smartdenovo/ 

make

步骤6:根据扫描报告修改源码

1、在扫描报告界面,可以在“需要迁移的源文件”下查看需要修改文件,点击“查看建议代码”后可跳转到源码页面,根据修改建议直接修改源码。从迁移报告中可以得知,有Makefile 和 ksw.c 两个文件需要修改。首先点击 ksw.c 对应的“查看建议代码”按钮,修改 ksw.c 的源代码

2、修改构建文件Makefile

在“源码迁移建议”页面,查看 Makefile 文件的修改建议,悬浮在黄色波浪线的语句上, 可以看到详细的迁移建议。

至此该实验已完成。

优化建议

1、迁移源码下载报错

如下图中,在下载avxToNeon时,终端中提示下载失败。建议优化一下。

6.jpg

最终我采用的方式是通过在git上直接下载的方式。

7.jpg

总结

通过上面的源码迁移动作我们拿到了可以在鲲鹏平台上运行的smartdenovo软件包。

整个过程对于像我这种第一次使用鲲鹏进行源码迁移的开发者,还是有些困难的。希望未来提供更多的案例,帮助开发者增进对鲲鹏的熟悉。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。