SylixOS 应用移植指导——以Redis5.0.3为例(一)

tc666
tc666
tc666
8
文章
1
评论
2021年6月30日17:18:35 3 1,037

本文章致力于指导有一定SylixOS开发基础的用户进行中大型应用软件移植。

没有SylixOS应用开发基础的建议先参考IDE自带的《RealEvo-IDE使用手册.pdf》,了解SylixOS IDE下的不同的工程类型,尝试过APP与动态库编译后再读本文,会更容易上手。

推荐书籍:《程序员的自我修养--链接、装载和库》

总述:

SylixOS应用移植遵循的四步原则是:搬 改 测 查

1. 搬:

既然是移植,首先我们要确定移植的目的。本文以Redis5.0.3为例,源码来自Redis官网,源码编译环境为Ubuntu20.0,移植目标环境是SylixOS X86平台,版本是2.0.1。移植的目标是将Redis-Server、Redis-Client运行在SylixOS环境下,编译出的其他文件,可移植的就一起加入工程。

移植不是盲目的,像Redis这样的,对第三方库依赖非常少的,可行性较高。如果是Linux下依赖Linux比较核心机制的库就很难移植,比如一些依赖X11的中间件。而那些根本不开源只提供Linux下动态库的就更不用说了。

言归正传,何谓搬,搬就是希望将Linux下的整个工程源码、编译流程、生成的文件,分毫不动的在SylixOS下实现一遍。这当然是移植的最好结果,然而事实是SylixOS并不是Linux,或多或少都存在差异性,差异体现在API实现的数量、进程创建的机制、系统参数的配置等各方面。

所以,原则上应用移植需要照搬Linux工程源码,并参考Linux编译流程,搭建基于SylixOS IDE的应用工程。

2. 改:

然而照搬的工程编译一般没法一次通过,甚至编译通过后,运行时会提示“can not find symbol xxx“ 的提示,这是因为SylixOS是交叉编译的,编译器并不清楚实际运行的环境中是否存在某个符号(符号可以理解为函数、变量),只会有告警(有声明不会告警),而无法判断你的应用是否正确的实现了所有需要的符号。

所以在工程编译阶段,由于操作系统的不同,需要我们修改工程源码。大部分情况下是注释掉不支持的接口,移植性较好的工程一般有config.h供用户注释相关宏定义,以做到工程裁剪或替换功能。小部分情况需要我们自行修改相关实现,以适用于SylixOS的运行环境。

当工程修改到:编译不会报错,编译完成的可执行文件(ELF)可以上传到SylixOS运行环境下,运行不会提示找不到符号表了。别太早高兴,这只说明,移植的第一步终于完成了。

3. 测

既然都可以运行了,那就开测吧。一般来说,Linux的工程源码内都会配有test目录,或其他测试脚本。测的目的就是通过这些测试用例。

当然,初步移植的应用大概率是 ./xxx 运行的时候,应用直接跑飞,系统报个栈回溯。无论是应用直接跑飞、测试用例跑飞、还是测试用例表现结果与预想不一致,这都说明我们的移植还存在问题,需要开始 查。

4. 查

问题排查,移植中最头疼的一部,由于问题五花八门都有可能,在后续的移植指导中会带着提到。

当然,大概率问题是出在第二步 改 那里,可以重点关注一下自己改的是否存在问题。

测和查是循环的过程,当排完所有问题,所有测试用例通过之后,可以说自己的应用移植已经完成大部分了。那还有什么问题呢?那就涉及到更高级的一些玩法,比如跨平台配置,工程的美观性配置等等。

 

接下来,就以Redis5.0.3的移植过程为例,演示SylixOS的应用移植吧。

tc666
  • 本文由 发表于 2021年6月30日17:18:35
  • 转载请务必保留本文链接:http://www.databusworld.cn/10323.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:3   其中:访客  2   博主  1
    • gewenbin gewenbin

      赵哥牛逼 :wink:

      • Rn氡 Rn氡 4

        继续围观

        • 楼主的仰慕者 楼主的仰慕者 4

          太强了