1 安装Porting-advisor
使用以下命令下载Portting-advisor的安装包:
cd /home/
gwet https://mirrors.huaweicloud.com/kunpeng/archive/Porting_Dependency/Packages/Porting-advisor_2.2.T2.SPC300_Kunpeng-linux.tar.gz
使用一下命令进行安装即可:
cd /home
tar -zxvf Porting-advisor_2.2.T2.SPC300_Kunpeng-linux.tar.gz
cd /home/Porting-advisor_2.2.T2.SPC200_Kunpeng-linux
./install web
安装完成后,登录porting-advisor,并设置初始密码。
2 检查实验所需代码
使用以下命令下载并解压所需的代码:
cd /home/
wget https://techsaas-experiment-resources.obs.cn-north-4.myhuaweicloud.com/kunpeng-competition/2048.tar.gz
tar -zxvf 2048.tar.gz
使用cp命令将解压后的文件2048下的文件拷贝到/opt/portadv/portadmin/sourcecode/目录下
备份src目录下的main.c文件,具体如下:
cp src/main.c src/main.c.bk
后期扫描源码时需要有读的权限,因此修改此目录下所有文件的权限,具体命令如下:
chmod -R 755 *
ll
代码迁移
扫描源代码
1 登陆“鲲鹏代码迁移工具”
在本机浏览器中,输入https://弹性云服务器弹性公网地址:8084,例如,上面我们获取到的弹性公网IP地址为116.63.104.175,因此,链接为:https:// 116.63.104.175:8084。
如果碰到安全问题告警,请点击“高级”,然后选择忽略,继续浏览。
在弹出的页面输入用户名和密码,其中用户名为:portadmin,然后点击“登录”。
登录完成后,鲲鹏代码迁移工具首页如下:
2 设置分析源码参数
在“源码文件存放路径”对话框中,指定需要分析的源码——src和so_src(选中后点击即可)。
按照下图所示设置其它参数,然后点击“开始分析”。
源码类型:C/C++
编译器版本:GCC 7.3
构建工具:make
编译命令:make
目标操作系统:openEuler 20.03
等待源码分析完成后,在页面的右下加,点击“查看报告”进入报告,查看详情
或者在页面右侧历史报告栏点击以时间命名的报告进入,查看详情。
报告分析
在报告中指出,需要迁移的依赖库(so库)为两个,源文件三个,代码12行。
其中,依赖库具体为libhighscore.so和libcurses.so,在后面实验中,这两个库需要重新编译。
需要迁移的代码所在的文件分别为main.c及两个Makefile。
切换到“源码迁移建议”中,查看具体情况。
关于Makefile的迁移,系统给出了迁移建议。
汇编代码的迁移需要根据下面的内容进行迁移。
具体需要迁移的代码如下图所示:
代码移植
Makefile移植
修改Makefile文件
在“源码迁移建议”的页签中,找到Makefile的路径(由于两个Makefile需要修改的内容一致,因此只做一次步骤描述)。
按照提示进入该路径,进行Makefile的修改,命令如下:
cd /opt/portadv/portadmin/sourcecode/src
vim Makefile
按照工具的提示,添加对应的参数,具体如下:
修改完成后保存该文件
重复1,修改/opt/portadv/portadmin/sourcecode/so_src下的Makefile汇编代码移植
修改main.c文件
同样在“源码迁移建议”的页签中,找到main.c的路径。
按照提示进入该路径,进行main.c的修改,命令如下:
cd /opt/portadv/portadmin/sourcecode/src
vim main.c
按照胶片50页内容,对main.c中的汇编代码进行修改,具体如下:
删除#后的源代码,然后增加适用于鲲鹏平台的、相同功能的汇编代码。
"mrs %0, midr_el1"
: "=r"(s1)
:
:"memory"
修改后的文件如下:
编译测试
移植后代码编译
1、依赖库重新编译
进入so_src目录下,使用make命令对程序所需的依赖库进行重新编译,命令如下:
cd /opt/portadv/portadmin/sourcecode/so_src
make
下图为正常运行后所示:
如出现告错,请仔细排查后重新编译。
2 、源代码编译
进入源代码主目录,使用make命令对应用进行重新编译,命令如下:
cd /opt/portadv/portadmin/sourcecode
make
下图为正常运行后所示:
如出现告错,请仔细排查后重新编译。
使用以下命令修改依赖库环境变量:
export LD_LIBRARY_PATH=/opt/portadv/portadmin/sourcecode/lib:$LD_LIBRARY_PATH
运行测试
运行程序
在/opt/portadv/portadmin/sourcecode目录下使用下面命令运行程序:
./2048
下图为正常运行后所示:
键盘W/S/D/A分别对应上下左右,检查是否能正常操作,并且查看Score和Hi,是否变化。
使用q健退出,检查是否有以下提示:
其中“最高分”为so库运行的结果,CPU id为汇编代码运行结果,如果能正常显示,则证明迁移完成。