RK3568------Openharmony 4.0-Release Docker移植、部署
文章目录
前言
Openharmony 也搞了有一段时间了,我感觉大部分朋友都是临时被指派过来,负责把公司现有的产品迁移至Openharmony的操作系统中。在这个过程中可能会有各种各样的制约因素,例如项目工期比较短,公司资源受限或者说现有产品的体量比较大,做迁移耗费的时间比较久
。针对以上情况,我个人认为一个很好的解决方案就是将Docker容器移植至Openharmony的操作系统中
,所以本篇通过参考网络上其他大神的文章,详细解说如何在Openharmony 4.0-Release Docker移植、部署
一、Docker简述
Docker是管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术
它具有以下几个重要特点和优势:
1.1 轻量级虚拟化
Docker 容器相较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省系统资源。
例如,启动一个 Docker 容器可能只需要几秒钟,而启动一个虚拟机则可能需要几分钟。
1.2 一致性
确保应用程序在不同的环境中(如开发、测试、生产)具有一致的运行表现。
无论在本地还是云端,应用的运行环境都能保持相同,减少了因环境差异导致的问题。
1.3 可移植性
可以轻松地将 Docker 容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差 异。
比如,在本地开发的容器可以无缝部署到云服务器上。
1.4 高效的资源利用
多个 Docker 容器可以共享主机的操作系统内核,从而更有效地利用系统资源。
1.5 易于部署和扩展
能够快速部署新的应用实例,并且可以根据需求轻松地进行水平扩展。
注:以上几点也解释了在前言中提到的为什么采用Docker的方案
二、移植思路
本篇文章的整体移植思路参考以下文章:
三、移植实例
按照@鸿蒙小王
的文章进行内核检查和SD卡制作文件系统分区即可,不在此复制粘贴浪费篇幅,重点分析移植过程遇到的问题和解决的思路
四、遇到的问题
- 内核检测报错
按照@鸿蒙小王
的文章,将Dokcer运行需要的内核配置选项添加到内核配置中,进行检查后发现以上报错,进行如下分析:
首先检查内核配置项中实际有没有将missing项宏定义打开(=y),在内核配置文件中发现已经全部打开了。接下来就是怀疑相关宏定义可能有依赖项,但是问题是我不知道依赖项是什么,这个时候就要引入一个内核工具“menuconfig”
这里简单说一下menuconfig,menuconfig是一套图像化配置工具,通过他可以菜单化的查看内核配置项,具体使用他的命令是
apt-get install libncurses-dev -y
make ARCH=arm64 menuconfig
打开后就可以通过menuconfig中命令<?>来查询上述相关宏的依赖与具体配置位置信息
相关信息如下:
通过上述menuconfig查询,可以知道缺少的依赖宏为
CONFIG_NET_SCHED=y
CONFIG_VLAN_8021Q=y
-
CONFIG_MEMCG_SWAP_ENABLED missinng(本问题由群友提出)
在上一步操作后会发现,这个宏不在内核配置中,即使手动自己将该宏添加,也无法在内核配置检查中通过,此时我的思路就是查看check-config.sh
,看一下这个内核配置检查脚本他检查内核配置的逻辑到底是什么
通过阅读可以这段脚本,可以发现此选项是对内核版本做了区分,根据打印提示可以判断在执行check-config时的内配版本是5.8以下。那么问题来了,我的Openharmony内核是5.10的版本,但是为什么在做检查的时候,会判断为5.8以下
我的思路就是深入分析check-config脚本的检查逻辑,查看一下他是如何判断内核版本的,通过查看源码发现了问题
问题就出现在第37行uname -r
这里,通过这句话可以分析出来,check-config脚本应该是要在宿主机上进行内核检查,而不应该是在虚拟机上进行检查,在最后的宿主机上进行内核配置检查,验证通过 -
分区挂载报错
mount -t cgroup -o rdma,nodev,noexec,nosuid cgroup /sys/fs/cgroup/rdma
mount: 'cgroup'->'/sys/fs/cgroup/schedtune': Invalid argument
首先需要了解Docker与cgroup的关系,详细介绍参考@小蜜蜂~嗡嗡嗡~
,然后我们分析报错,问题应该是cgroup组件里没有包含“schedtune”。而“schedtune”工具是在安卓系统中存在的工具,本就不应该出现在Openharmony系统中,因为我们的整体移植思路参考的@鸿蒙小王
,我有理由怀疑小王其实是把安卓的一部分东西拿过来了,但是我们有证据,这里我们也不需要纠结,只需要在挂载命令脚本中,将mount -t cgroup -o schedtune,nodev,noexec,nosuid cgroup /sys/fs/cgroup/schedtune
删除即可
五、效果展示
总结
本人之前一直从事应用开发,借着这次电鸿的契机进行系统级开发的学习,将我在工作中的遇到的问题及解决思路记录并分享,希望可以与诸君共勉
目前网上技术讨论群大都是鸿蒙的应用开发,总结此类文章也是希望将同样进行鸿蒙设备开发的同僚召集到一起,一起讨论学习。如果有同样在进行鸿蒙设备开发的朋友,可以加我的联系方式,期待您的消息
个人微信