【系列一:DevKit代码迁移工具】第三讲:《megahit 源码迁移》项目大作业解析

举报
炒香菇的书呆子 发表于 2022/11/30 20:59:11 2022/11/30
【摘要】 《megahit 源码迁移》项目大作业解析代码迁移工具是一款可以简化用户迁移步骤,将用户的现有的 886 环境上的应用迁移到赋能平台上,并获得良好的性能和功能体验的辅助工具具体的功能有过上节课的介绍我们就不多讲了。今天我们这堂课主要的功能的话聚焦在我们的源码迁移部分,这部分的话主要就是我们分析源码。然后根据扫描出来的根据分析报告,然后去修改根据分析报告的还有迁移建议去修改相关的源码。修改完成...

《megahit 源码迁移》项目大作业解析

image-20220717085113130

代码迁移工具是一款可以简化用户迁移步骤,将用户的现有的 886 环境上的应用迁移到赋能平台上,并获得良好的性能和功能体验的辅助工具具体的功能有过上节课的介绍我们就不多讲了。今天我们这堂课主要的功能的话聚焦在我们的源码迁移部分,这部分的话主要就是我们分析源码。然后根据扫描出来的根据分析报告,然后去修改根据分析报告的还有迁移建议去修改相关的源码。修改完成修改完之后,然后我们再去编译来自端。完整的体验下一款软件在鲲鹏代码在代码迁移工具上的并已过产。

image-20220717085131445整个迁移流程的话大概分为这几块,一个是环境搭建,这块的话对硬就是有硬件要求,这块的话可以通过后面的整个代码迁移工具的就是实验的介绍环节去做更加深的了解这块主要就是就是我们可以通过远程实验室去申请我们相关的硬件,然后去在上面搭建我们的代码迁移工具等。

image-20220717085147558代码迁移工具搭建好之后,我们再根据就是整个代码迁移工具的源码扫描这块的功能去操,去对我们的源码进行一个扫描分析。扫描分析之后,那么我们再根据仪式的内容去做一个就是代码的修复的也不是修复,就是去做一个代码的那个修改,让它能够适配在我们的空盆环境上运行。等失败完之后,我们再去迁移之后验证迁移之后重新编译 B 的话就是一个验证,也是一个验证的过程。最后我们再去运行它运行,再去确保我们的迁移。迁移后软件是能够在空本环境上运行起来的。前,那我们就开始我们的大作业的讲解,先了解一下我们今天这款需要迁移的软件叫是一款用作基因组优化的程序,也是这是一款开源软件,是在 github 上有源码。就是托管了源码的,我们后续的话就要不要到那个就是 github 上去把相关的代码下载下来,然后放到我们的代码迁移工具的对应的目录上去。

image-20220717085205406这个是简单一个介绍,主要就是介绍一下我们今天的这个主角,就是这个代码一个需要迁移的源码的一个背景。它这这块主要涉及到就是这三块代码,这块三块代码也是我们整个代码迁移工具中就是支持的扫描的类型先看一下我们这个就是我们的硬件环境,这个的话到时候我们可以通过远程实验室去申请使用我们的鲲鹏崩盘的代码。
这块的话主要就是下载地址,一个是下载地址,还有就是我们目前的就是我们最终的运行环境的操作系统的介绍。 open 奥拉。对,还有就是我们的那个运行环境是鲲鹏环境这块,也就简单的给大家过一下,先了解一下我们整个的那个迁移大概的这就是这个这款软件迁移的大概步骤第一块是先把我们的迁待迁移源码下载到下下载下下载到服务器上。然后就是我们使用一个终端工具先连接到我们的部署。好我们代码迁移工具的环境,然后将我们的代码清代码,就是这个下载的源码拷贝到对应的目录去,或者是直接在当前目录去下载操作也可以的。对,这两步相当于把我们的那个信息材料给下载下来,然后放于我们工具的对应指定的目录下。

image-20220717085222864第三第四块就是把我们的代码和合并,就是说因为你需要生成 Mac file 之类的,需要生成 make file 然后我们再进行扫描。最后就是我们创建一个这个主要就是前面的步骤,就是说将整个我们的源码的环境准备好,然后到最后生成 Mac file 然后再修改我们的数组,这些都是第一步,我们的这个源码准备的,准备相关的这块的准备,主要就是将代码下载到我们代码工迁移工具的指定位置,然后去给它把那个编译那那就是那个构建文件生成,然后并修改图组,能让代码迁移工具去扫描识别调步的话就是我们登录到我们已经安装好的那个代码迁移工具的 web 页面,然后就开始进行下面的那个操作了。

image-20220717085503039就是选择我们的源码迁移,目标这块的话就是选在这个目目录选择我们需要迁移的内容,然后这块是指定我们需要迁移的源码类型,就是我们刚才讲的它主要是 C 和 C 加加代码这个有平台相关性,然后就是我们之后要迁移的那个目标操作系统,还有我们准备的就是编译编译的那个编译的编译的编译的编译器编译器和编辑版本我们支持的比较多编译器,到时候大家可以打开去看一下。然后目前的话我们根据我们迁移的 open 欧拉,然后毕生这个是我们推荐的一个就是 open 欧拉环境,还有我们的构建工具,然后搞搞编辑器。然后构建工具的话就是因为我们是生成了 make file 然后我们就选择 make file 然后 make 的话就是它编译命令也就是 make arm 就是就不指定它的别命,大家可以参考这块。

image-20220717085528177就是这个就是我刚才介绍的我们的一个代码迁移的那个目录,指定我们的源码目录,然后这个是指定我们的目标操作系统、指定编译器,还有指定的构建工具和编译命令等这些都填充完之后,我们开始扫描,点击。开始分析之后就是进行代码扫描,等代码扫描完成之后会打会弹出一份报告。然后我们建议进入查看,查看报告来到查看报告页面。具体的就是。报告页面的话主要会给我们展示架构相关的依赖库,还有我们的需要修改的源码信息。然后目前的话从我们分析的结果来看,它的依赖库跟架构相没有跟架构相关的依赖库。然后目前的话主要就是进行我们的源码的相关的修改,去适配我们的鲲鹏编译鲲鹏的环境。左边的话这些文件列表就是我们待修改的就是有x 86 特有的内容。

image-20220717085545567然后我们需要根据我们的提示建议把它修改为就是能够支持鲲鹏运鲲鹏环境上运行的代码就是做一个兼容适配。像第一块这块的话,这个 CPU dispatach.h 里面的话有那个内联汇编相关的内联换编相关的话可以会用到我们的汇编。就是这块的解析是用到我们汇编翻译的提供的功能,它可以将就是叉 86 的汇编翻译成我们的工程上支持的汇编内容。

image-20220717085554207然后针对这块修改点的话还需要导入一个头文件,这个头文件的话也是随着我们的鸿蒙代码信息工具一起发布的。然后它会在我们的工具的目录下,等我们后面正式去编译的时候会用到这个好文件,大家稍后在最后我们的那个编译环境上可以确认一下。就是这块的使用大家可以看,可以看,可以先记一下。

image-20220717085602421就是说我们最到最后的编译因为是导入头文件,会使用到我们带出去的查文件,然后等我们的然后这几块的话都是我们提供的一个汇编,就是汇编翻译的汇编少描述汇编相关的内容。然后我们可以用到我们的自动修复修复,

image-20220717085617223就是 clickfix 可以直接就自动把代码 1 代码适配成支持昆仑设扫描的内容,

image-20220717085627008鲲鹏运行的内容这样这个修改点就是第一个三点的修改点的话就引入这个头文件,然后就 prefix 之后,它会自动自己添加这部分代码。然后那个第二跟第四个修改点的话是就是会指定编译指定命令的编译的那个替换。替换的话因为这里加注释是因为担心就是用户有一些特殊功能没有识别,需要用户去就是再次确认,然后再加加入到它的那个代码中。这块的话还需要把它的那个修复完之后,还需要把它的注释去掉这个代码才能够生效。

image-20220717085636440然后等修改这个文件内的那个待修改点都修改完之后,我们点击一个保存,把我们的修改后的代码保存下来。这个是我们第一个文件的修改,第二个是我们的那个 MA make 就是那个编我们的那个构建文件,构建文件里面的它识别出来的就是不支持这两个指令 BMI 度和那个标 pcnt 指令。然后需要就是需要我们在编译选项中把这两个指令给删去。这个大家可以看一下。

image-20220717085644112就是说到我们的代码迁移工具,支持这些编译命令 w6 特有的编译命令的识别,因为空本上因为架构不同,它们支持的指令不一样,所以说这些不支持的我们需要去掉,不然也还是编译不过的。

image-20220717085655099等等。把这些内容去掉之后我们也保存也是保存之后就要就是修改完成之后保把我们的那个修改完之后代码保存下来等等我们的代码上的修改点都修改完成之后,我们到我们的就是刚才提到的这个头文件,

image-20220717085726823因为我们导入了一个我们就是汇编翻译提供的相关的条文件,然后我们就到那个我们的就是汇编到我们的工具的目录下去,将我们的这个查文件,然后拷贝到它的代码的对应的目录目目录下,这样它能够调用。

image-20220717085735138这个就是我刚才提到的需要从注意一个点的地方,就是我们提供了头文件,但这个头文件还是需要拷贝到我们的那个,在正式编译过程中还是需要拷贝到我们的的,那就是我们使用这个就是待迁移源码,迁移源码使用到这个草文件的地方,这样才能够正常编译等拷贝完成之后,我们就可以开始执行编译。
编译过程中我们会发现这里报一个我们的那个一个头文件缺失,一个头文件缺失等。这个头文件缺失的话,这个应该是叉 86 英券这个头文件是鲲鹏特有的,不是叉 86 特有的那个叉 86 特有的一个头文件。所以说我们需要将这块内容注释掉,然后等待保存。保存完这个文件之后我们再继续编译等编译的话我们会发现通过。编译通过之后我们在去跑这块源码提供的相关的测试用例等验证我们的基本功能是否完备等验证完成之后,我们才能够就是说我们的整个迁这个源码的迁移完成。以上就是整个我们大概就是需要做的步骤和每一步做了什么,就给大家讲解了一下就是我们这块内容的话大概就是一个就是我们准备好我们待迁移源码,对应生成好相关的开始文文那个构建文件之后,等到后面我们再第二步就是我们用我们代码工具去做一个扫描分析,分析完之后我们再去做一个修代码的一个兼容性的那个修改修改让我们的那个鲲鹏的工资能够就是把叉 86 特有的放到鲲鹏的分支下,然后放放在那个差 86 配有的分支下,把放在空门的分支下,等整个然后等代码修改完之后,我们再去编译,然后并将我们的投文件拷贝到对应的位置去编译的。
然后如果还有报错的话,我们再统计报错信息去修改对应的源码文件这块的话,我们因为后面的版本才做了那个同键优化,后续的话不需要就相当于这块同键我们也能够识别出来。当前的话目前因为我们之前使用的这个版本的话是所以这个头文件还没有识别,需要手动去修改,后面的话会让这块识别完整的等这就不需要再编译再修改的过程。就是这样。然后等这个都修改完之后,我们再去编译。编译完之后,我们再去跑我们的测试用例,测试用例跑完了之后,相当于我们的整个迁移过程就完成了。行然后我们就是最后的一个总结。
总结就是说我们这个碰迁代码迁移的大作业主要就是了解一下,就是使用我们的昆明代码申请工具,然后去去分析源码,然后到我们的整个迁移端到端的就是将整个迁移过程到最后运行到他修改的到修改代码,到最后编译到最后运行测试用例,将整个代码迁移工具给大家演示完成。然后就是增强大家对整个迁移过程的了解,然后也就是更加熟悉我们的代码迁移工具。
以上就是我们的这个诈骗的内容,然后后面的话我们将会进行就是带着大家再从我们实验的内容里面给大家过一遍我们的整个代码迁移的内容。行。那我们开始我们的实验相关的操作的,跟大家一起过一遍我们的整个操作过程。然后因为环境相当于来说大家都是比较稀缺的。然后我们的那个我们的鲲鹏社区的话提供了一个远程实验室的申请,大家可以通过远程实验室去申请。我们的那个就是我们的实验环境,位置是在这块我们的那个空门社区开空盆,大家可以记一下,然后到我们的开发者开发者的那个开发套件 DU tier 这里 DU tiger 这里的话我们再往下拉拉到我们的远程实验室,然后去一个。立即申请的话根据填一个邮箱,然后根据在线使用的时间,如果有时间限制,然后选择自己的那个环境这块我就不去为大家做演示了然后我们就申请完成之后他会返给我们一封邮件,邮件邮件的内容里面会会有那个会有相关的信息的介绍。这块的话到时候等大家自己去申请的时候会去知道然后申请完成了之后,我们去登上 VPN 连到我们的网络上去之后我们去使用我们的已经发服务器上已经安装好的一个运行环境。我们先登录下。
这是我们一个登录,就是一个用户密码。然后我们这里因为是第一次登录他会让我们签署一个声明,然后给我们切到代码迁移工具,等到这块的话我们就可以到环境上去准备我们的一个代码。代码迁移代码的一个材料,我们需要通过那种终端工具,我这边的话是使用那个。
使用这个魔法插上大家根据自己的使用法使用去一个就是去根据自己的日常使用的一个通常工具,去做一个连接。

image-20220717085806845密码。二维码,连上工具账号。然后我们到我们的那个到我们的工具目录下到 put admin 下面的那个这边是这边是之前就是我们这个实验室会存在的一个环境。然后我们去根据我们之前的那个操作指导,去一个下载我们的那个代码。

image-20220717085819792等我们的代码拷贝完成之后,代码拷贝完成之后,然后我们再继续下一步操作。
就是初始化代码,然后这个是生成那个一个构建目录。好,最后这个 CMake 是去生成我们的那个要。

image-20220717085825081目前这台环境的话 CMake 没有安装,那我们可以继续安装一下。
然后我们继续执行上一步操作,等这个操作完成之后,我们再继续到就是修改那个代码权限。因为是这样的,就是我们的那个 porting 的话,因为对文件读取权限的一些限制之类的。

image-20220717085834631就是我们要改成让 PO 我们的代码迁移工具能够读取到这个文件,都现在操作已经把我们的那个就是代码,就是代迁移代码的材料准备好了,这块就是我们的第一个步骤,准备好我们的代码迁移材料然后我们回到我们的界面上操作这块的话,就是我们选择我们的那个代码,就是我们的那个需要迁移的目录调整到那个 build 下面,因为这块的它的那个就是构建文件是存在这个 build 目录下的。

image-20220717085845508然后选择的话这块就是我们的那个代码,就是我们它因为主要类型是 CC 加加,然后还有汇编当就是之前的照片里面讲到的内容。然后这个是目标迁操作系统,就是我们将要迁移到的环境。我们是 open 欧拉,我们目标相关系统是 open 欧拉的话,然后编写版本的话它会自动根据默认的那个部分和 Lark 相关的去带出来。

image-20220717085901582然后构建工具的话是一定是 make file 那就 make 构建编译命令的话,因为也就默认的 make 就行。然后我们就执行我们的整个就是扫描动作。

这个分整个分析过程,因为分为好几步,它会有一些那个时间上的,就是应应该也不会太久,大家到时候具体操作的时候就会知道,就是你扫描的那个文件内容越多,它的那个时间会相对来说越久。

image-20220717085921201就是还有这块的界面,来给大家介绍一下。刚好就是这块的话就是我们的整个大概我们就是我们整个源码迁移的整个界面。就是像这些我们还支持一些其他类型的语,像破圈 go 还有那些解释型语。这边的话就是说我们有个历史报告的这个功能,就是说因为可能会迁移到比较多软件,或者说是我们迁移过程中会存在一些就是说就是继续扫描之类的,就是可以通过这块去打开我们的那个报告,就是说去查看这些扫描的。当然因为是整个因为我们整个代码修复过程是一个动态的,所以说建议就是说看最新的这样子,把一些代码混在一起,很快是这样的一个内容

image-20220717085935573这个代码就是因为分析还是要一点点时间的。大家再稍微等一等,然后马上我们结果就会出现了。

image-20220717085950080我们的代码已经分析完了,然后我们跳转到我们的那个查看报告页面。
然后这块的话整体也给大家解读一下,这块是我们一些扫描的配置信息,就是说是我们之前填充的一些内容。然后这块的话就是我们的一些汇总信息,就是说有多少要替换了。目前分析的话发现它是没有一些架构相关的一些内容的,就是说那个这个是没有架构相关的那个依赖库的那种限制的,这块就不用关注了。然后主要的就是我们这些代码需要修改,可以通过这里查看源码建议这里跳过去也可以通过这块就是说这块解码建议这里跳过去行。然后就是到我们的那个代码修改的关键那部分,然后我们可以先放到我们待修改点,然后这里就是因为它不支持这个指令。然后我们就把这两个编译选项给去掉。能找到这两个编译选项在的位置。这个看有一个 mbm BMI 号码,一个是 mmpopcn T 去掉。然后还有一个这个。
然后保存。

image-20220717090019055我们已经修改完成第一个文件了,那我们再修改第二个文件。
这块也是就是说我们有个就是那个标 P cnp 这个不支持,然后让我们把这个编辑选项给去掉。
已修改完成,然后记得保存,这些都就是需要手动去替换的这些建议。然后这块的话就是关于我们自动替换的那个内容,这块的话就是我们需要去添加刚才说的添加一个空盆券时间的点 H 的头文件,这个头文件也在我们工具的目录下放着的,到时候等份子编译的时候你们会看到。然后这两个就是我们的那个汇编翻译的那个内容,汇编翻译也这是自动修复的。这块的话修复完之后,因为这个代码需要就是说把这些注释给去掉。
也就是就直接能够替换掉。
然后等修改完成之后,我们保存一下。对这块目前的话我们的所有的那个代码上的修改点也就完成了。然后我们去执行一个编译到需要到这块这个应该终端这里,我们先到那个我们的那个,先把我们的那个图文件拷贝到我们的那个对应目录下面去。
拷贝完了之后,我们再到这个幕布下去进行编译。
目前的话就出现一个,报错信息就是我们那个 interest 投文件这个未修改这块的话是因为之前现在的版本有点就是做的有点就是有点稍微有点缺陷,到时候我们在后面的版本进行了一个修复的。当前因为演示版本是这样,就大家还需要再手动改一个改一下。
快的话就是找到那个 int 文件,把它那个注释掉。再保存一下。然后再再执行编译。
编译稍微要点时间,大家稍微等一下。关于这块的话,因为头文件的话我们在后面也会也做了一个需求的,这个在新后面的新版本中大家可以使用一下。就是说我们对这块做了一个修改,可以同建这种,可以专门给它识别出来。
在他编的过程中刚好还可以。再就是回顾一下,就是我们整个迁移过程主要就是准备一个代码,代码代码的话就是按照人事工程的编译。然后我们在我们的那个就是代码迁移工具里面去指定它的那个 mysbattle 所在的就是它构建文件或者的所在的路径告诉给工具,然后工具再去识别我们的代码中相关的那个就是代码中架构相关的内容,包括汇编翻译汇汇编汇编包括编译选项,包括过一些头文件,因为头文件应该也是那个车友,包括就是一些编译选项。
还有那个就是就是红之类的,就是卡巴 6 相关的内容。这块的话需要就是需要去做一个空门平台上来兼容适配。然后等兼容适配完成之后,然后我们再去就是去就是再去。编译的过程中,去就是去解决一些就是说工具的话去解决大部分的那些就是架构相关的问题。然后其他可能有一些小部分这些问题需要用户稍微调整一下。但这块我们也在就是说把这块的那个漏报,相当于有些点,也尽可能里面给用户抱抱,全让他只减少这个就是反复去编去做的一个过程。对,就是这样子我们能够方便用户整个的一个迁移,就是提升他的迁移效率,让他能够在尽可能短时间内把我把他那个就是问题发现全。
确实因为每次编译如果是说编到后面的话,某一个文件失败了,就会整个编译其实是挺全的。对用户来说,最耗时的就是这个编译过程中是这样的,比如说工具的话,就是为了解解决这部分问题。然后因为这块是一个例子,就是说到时候用就是真遇到真实的环境的时候,真实的一些问题的时候,我们也就是,多去使用一下工具,然后去协助解决一些问题。遇到实习项目的时候。
目前看已经 60% 了,还需要一点点时间。
是整个操作的话其实就是还是需要,就是结合工具作为一个比较好的辅助工具,去帮助去解决一些问题。像我们的这个汇编翻译这快的话,如果是需要,就是如果没有工具的话,需要自己再去写一遍,这个 handle 来说也是比较困难的,就是工具对这块就是常见的那个汇编的翻译都能够支持了也常用的场景。
但还除了汇编这块。然后汇编这块的话,因为除内编汇编,我们还有一个全汇编的这块的话,在这个案例就不体现了。就是后面如果对工具使用或者说有实际项目都可以,就是尝试着用我们的工具去做一个扫描。仍然快结束了,因为这个过程还是稍微需要点时间的,已经到 93% 了。

image-20220717090144413从编译就是整个。其实整体来说整个迁移过程就是修改的点对修改的内容可能就是还还好,但是整个编译整个测试过程会稍微久一点这样的。因为就目前了解到的那种这些就是成成项目比较大的耗时点,就是在这些问题的解决上,这些架构相关的迁移之类的。我看已经编译完成了,然后我们再去跑一下我们的那个测试用例。
这个整个试用跑完了也没有报错,就证明我们整个代码已经从就是在昆仑上已经能够完整的运行和使用了。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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