RK3568------Openharmony 4.0-Release Docker移植、部署

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的方案

二、移植思路

本篇文章的整体移植思路参考以下文章:

  1. Docker官方文档
  2. @鸿蒙小王
  3. @小蜜蜂~嗡嗡嗡~

三、移植实例

按照@鸿蒙小王的文章进行内核检查和SD卡制作文件系统分区即可,不在此复制粘贴浪费篇幅,重点分析移植过程遇到的问题和解决的思路

四、遇到的问题

  1. 内核检测报错

    按照@鸿蒙小王的文章,将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
  1. CONFIG_MEMCG_SWAP_ENABLED missinng(本问题由群友提出)
    在上一步操作后会发现,这个宏不在内核配置中,即使手动自己将该宏添加,也无法在内核配置检查中通过,此时我的思路就是查看check-config.sh,看一下这个内核配置检查脚本他检查内核配置的逻辑到底是什么

    通过阅读可以这段脚本,可以发现此选项是对内核版本做了区分,根据打印提示可以判断在执行check-config时的内配版本是5.8以下。那么问题来了,我的Openharmony内核是5.10的版本,但是为什么在做检查的时候,会判断为5.8以下
    我的思路就是深入分析check-config脚本的检查逻辑,查看一下他是如何判断内核版本的,通过查看源码发现了问题

    问题就出现在第37行 uname -r这里,通过这句话可以分析出来,check-config脚本应该是要在宿主机上进行内核检查,而不应该是在虚拟机上进行检查,在最后的宿主机上进行内核配置检查,验证通过

  2. 分区挂载报错

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删除即可

五、效果展示


总结

本人之前一直从事应用开发,借着这次电鸿的契机进行系统级开发的学习,将我在工作中的遇到的问题及解决思路记录并分享,希望可以与诸君共勉
目前网上技术讨论群大都是鸿蒙的应用开发,总结此类文章也是希望将同样进行鸿蒙设备开发的同僚召集到一起,一起讨论学习。如果有同样在进行鸿蒙设备开发的朋友,可以加我的联系方式,期待您的消息
个人微信

  • 28
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值