Docker 编译OpenHarmony 4.0 release

一、背景介绍

1.1、环境配置

  • 编译环境:Ubuntu 20.04
  • OpenHarmony版本:4.0 release
  • 平台设备:RK3568

OpenHarmony 3.2更新至OpenHarmony 4.0后,公司服务器无法编译通过,总是在最后几十个文件时报错,错误码4000:

[OHOS ERROR] ld.lld: error: undefined symbol: __aarch64_cas4_acq_rel
[OHOS ERROR] >>> referenced by hdf_vnode_adapter.c:294 (/home/xxx/OHOS/OpenHarmony_master/out/kernel/OBJ/linux-5.10/../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.c:294)
[OHOS ERROR] >>> vmlinux.o:(HdfVNodeAdapterIoctl)
[OHOS ERROR] >>> referenced by hdf_vnode_adapter.c:303 (/home/xxx/OHOS/OpenHarmony_master/out/kernel/OBJ/linux-5.10/../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.c:303)
[OHOS ERROR] >>> vmlinux.o:(HdfVNodeAdapterIoctl)
[OHOS ERROR] >>> referenced by hdf_vnode_adapter.c:428 (/home/xxx/OHOS/OpenHarmony_master/out/kernel/OBJ/linux-5.10/../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.c:428)
[OHOS ERROR] >>> vmlinux.o:(HdfDeviceSendEventToClient)
[OHOS ERROR] >>> referenced 1 more times
[OHOS ERROR] BTF .btf.vmlinux.bin.o
[OHOS ERROR] pahole: .tmp_vmlinux.btf: No such file or directory
[OHOS ERROR] LD .tmp_vmlinux.kallsyms1
[OHOS ERROR] ld.lld: error: .btf.vmlinux.bin.o: unknown file type
[OHOS ERROR] make[2]: *** [/home/xxx/OHOS/OpenHarmony_master/out/kernel/src_tmp/linux-5.10/Makefile:1236: vmlinux] Error 1
[OHOS ERROR] make[1]: *** [arch/arm64/Makefile:208: rk3568-toybrick-x0-linux.img] Error 2
[OHOS ERROR] make[1]: Leaving directory '/home/xxx/OHOS/OpenHarmony_master/out/kernel/OBJ/linux-5.10'
[OHOS ERROR] make: *** [Makefile:192: __sub-make] Error 2
[OHOS ERROR] Traceback (most recent call last):
...
[OHOS ERROR] raise OHOSException('ninja phase failed', '4000')
[OHOS ERROR] exceptions.ohos_exception.OHOSException: ninja phase failed
[OHOS ERROR]
[OHOS ERROR] Code: 4000
[OHOS ERROR]
[OHOS ERROR] Reason: ninja phase failed
[OHOS ERROR]
[OHOS ERROR] Solution: Please check the compile log at out/{compiling product}/build.log, If you could analyze build logs.
[OHOS ERROR] Or you can try the following steps to solve this problem:
[OHOS ERROR] 1. cd to OHOS root path
[OHOS ERROR] 2. run 'hb clean --all' or 'rm -rf out build/resources/args/.json'.
[OHOS ERROR] 3. repo sync
[OHOS ERROR] 4. repo forall -c 'git lfs pull'
[OHOS ERROR] 5. bash build/prebuilts_download.sh
[OHOS ERROR] 6. rebuild your product or component
[OHOS ERROR] 7. check if any environment variables required by the building process are not set in build/compile_env_allowlist.json
[OHOS ERROR]
[OHOS ERROR] If you still cannot solve this problem, you could post this problem on:
[OHOS ERROR] https://gitee.com/openharmony/build/issues
[OHOS ERROR]
=====build error=====

经分析尝试:
1、相同的步骤和命令,wsl2 编译OpenHarmony 4.0 r正常。
2、服务器使用sudo编译正常,但由于sudo使用root权限,会影响项目编译链等配置,故不能作为解决方案。

于是尝试在服务器中使用docker,通过隔离环境编译OpenHarmony 4.0。

二、docker安装与配置

docker
在Ubuntu服务器中安装和配置docker

2.1、docker安装

$ sudo apt-get update
$ sudo apt-get upgrade$ sudo apt install docker.io
#安装后通过查看docker版本验证是否安装成功
$ docker --version 或 docker -v
Docker version 24.0.5, build 24.0.5-0ubuntu1~20.04.1

2.2、获取docker 镜像

获取docker镜像,以ubuntu:20.04为例
注意:此过程较漫长,请耐心等待~

$ docker pull ubuntu:20.04#创建好后可通过image命令查看
$ docker images 或docker image ls
REPOSITORY                                                               TAG       IMAGE ID       CREATED        SIZE
ubuntu                                                                   20.04     f78909c2b360   8 days ago     72.8MB
swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_standard   3.2       ae33c06f45c5   6 months ago   5.3GB

2.3、创建docker容器

#进入需要与docker映射的目录,后续基于此目录的修改,容器和服务会同步。
$ cd ~/docker/
$ docker run -it -v $(pwd):/home/zhangsan --name ohos ubuntu:20.04

说明:命令表示创建一个名为ohos,系统镜像为ubuntu 20.04的容器;这个容器运行在交互模式下,并且将当前目录映射到容器的/home/zhangsan目录。
注意:zhangsan需与后续要在ohos创建的非root用户名保持一致,否则后续下拉和编译代码会出现权限问题。

创建好ohos容器,默认以root用户进入。

#退出root用户
$ exit
# 启动ohos容器
$ docker container start ohos
#查看docker容器
$ docker container ls
CONTAINER ID   IMAGE          COMMAND       CREATED        STATUS        PORTS     NAMES
ab7d67807966   ubuntu:20.04   "/bin/bash"   29 hours ago   Up 29 hours             ohos

2.4、ohos容器中创建非root用户

由于docker 容易与宿主系统共享一个内核,容器中的用户ID和组ID是映射到宿主系统的;默认情况下,容器内的所有进程都以root用户身份运行。这意味着容器内的进程具有与宿主系统中的root用户相同的权限。为了提高安全性,建议在容器中使用非root用户运行进程。

#运行ohos容器(默认root用户)
$ docker exec -it ohos bash
$ apt-get update
$ apt-get upgrade
$ apt install -y sudo
$ apt install -y vim#添加非root用户zhangsan
$ useradd -m zhangsan
#设置用户密码,123456
$ passwd zhangsan
#设置zhangsan用户组
$ usermod -aG zhangsan zhangsan#sudoers添加zhangsan
$ vim /etc/sudoers	#文末添加一行zhangsan	ALL=(ALL)	ALL
#设置/home/zhangsan目录用户和组,需与用户名保持一致
$ chown -R zhangsan:zhangsan /home/zhangsan
$ exit

注意:zhangsan的uid和gid需与宿主系统自己的uid和gid保持一致,否则后续下载源码后,在宿主系统中自己无权限修改。
如下zhangsan 与wangwu的id匹配一致,为1003

#ohos容器zhangsan 用户名,uid,gid和组信息
$ whoami && id
uid=1003(zhangsan) gid=1003(zhangsan) groups=1003(zhangsan)#宿主系统自己账户(wangwu)用户名,uid,gid和组信息
$ whoami && id
wangwu
uid=1003(wangwu) gid=1003(wangwu) groups=1003(wangwu)

若ohos容器中zhangsan的uid与wangwu的不一致(通常zhangsan.uid < wangwu.uid),可在容器中添加任意用户,uid号以1000开始累加,最终使得zhangsan.uid = wangwu.uid即可

#由于uid不匹配,先删除zhangsan用户
userdel zhangsan# 添加随意用户 tom,jerry
$ useradd -M tom
$ useradd -M jerry#查看所有用户
cat /etc/passwd
...
tom:x:1001:1001::/home/tom:/bin/sh
jerry:x:1002:1002::/home/jerry:/bin/sh#此时再次添加zhangsan用户,其uid则为1003

三、OpenHarmony 4.0 源码下载及编译

3.1、配置ohos容器编译环境

#以zhangsan用户运行ohos容器
$ docker exec --user zhangsan -it ohos bash#替换软件源
$ sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
$ sudo vim /etc/apt/sources.list	#sources.list替换以下内容
deb http://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiversedeb http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiversedeb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiversedeb http://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse## Not recommended
# deb http://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
更新
$ sudo apt-get update
$ sudo apt-get upgrade#将Shell环境修改为bash
$ sudo dpkg-reconfigure dash  #select no#部署编译环境,安装工具包
$ sudo apt-get install -y gcc-arm-linux-gnueabi gcc-9-arm-linux-gnueabi
$ sudo apt-get install -y python python3 python3-pip binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev   libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
#上一步命令执行过程需手动选择时区配置:6.Asia/70.Shanghai#配置pip软件包更新源
$ mkdir ~/.pip
$ pip3 config set global.index-url https://mirrors.huaweicloud.com/repository/pypi/simple
$ pip3 config set global.trusted-host mirrors.huaweicloud.com
$ pip3 config set global.timeout 120#配置git
git config --global user.email "jerry@163.com"
git config --global user.name "jerry"
git config --global credential.helper store
git config --global --add safe.directory "*"#安装repo
wget https://gitee.com/oschina/repo/raw/fork_flow/repo-py3
sudo mv repo-py3 /usr/local/bin/repo
sudo chmod a+x /usr/local/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests

3.2、下拉OpenHarmony 4.0r源码及编译

$ mkdir OpenHarmony_4.0r && cd OpenHarmony_4.0r
$ repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-4.0-Release --no-repo-verify
$ repo sync -c && repo forall -c 'git lfs pull'
$ bash build/prebuilts_download.sh
$ ./build.sh -p rk3568	#编译成功,结果如下
...
Please modify according to README.md
[OHOS INFO] rk3568 build success
[OHOS INFO] Cost time:  0:14:17
=====build  successful=====
2023-12-21 21:29:18
++++++++++++++++++++++++++++++++++++++++

宿主系统可见openharmony 4.0r代码已拉下,并有权限修改

$ tree -L 2 ~/docker/
docker/
├── OpenHarmony_4.0r
│   ├── applications
│   ├── arkcompiler
│   ├── base
│   ├── build
│   ├── build.py -> build/build_scripts/build.py
│   ├── build.sh -> build/build_scripts/build.sh
│   ├── commonlibrary
│   ├── developtools
│   ├── device
│   ├── docs
│   ├── domains
│   ├── drivers
│   ├── foundation
...#创建文件正常
$ touch ~/docker/OpenHarmony_4.0r/test

后续

当然,ohos环境可以自己打包成镜像推至自己的仓库,上述繁琐的过程可以在Dockerfile中进行配置,仅通过docker build 命令完成全部操作,刚接触docker,待后续优化完善~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/223715.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux一行命令配置jdk环境

使用方法&#xff1a; 压缩包上传 到/opt, 更换命令中对应的jdk包名即可。 注意点&#xff1a;jdk-8u151-linux-x64.tar.gz 解压后名字是jdk1.8.0_151 sudo tar -zxvf jdk-8u151-linux-x64.tar.gz -C /opt && echo export JAVA_HOME/opt/jdk1.8.0_151 | sudo tee -a …

Diffusion扩散模型学习:图片高斯加噪

高斯分布即正态分布&#xff1b;图片高斯加噪即把图片矩阵每个值和一个高斯分布的矩阵上的对应值相加 1、高斯分布 np.random.normal 一维&#xff1a; import numpy as np import matplotlib.pyplot as pltdef generate_gaussian_noise(mean, std_dev, size):noise np.ran…

【CentOS 7.9 分区】挂载硬盘为LVM操作实例

LVM与标准分区有何区别&#xff0c;如何选择 目录 1 小系统使用LVM的益处&#xff1a;2 大系统使用LVM的益处&#xff1a;3 优点&#xff1a;CentOS 7.9 挂载硬盘为LVM操作实例查看硬盘情况格式化硬盘创建PV创建VG创建LV创建文件系统并挂载自动挂载添加&#xff1a;注意用空格间…

VSCode SSH 连接提示: spawn UNKNOWN

随笔记录 目录 1. 背景介绍 2. 确认问题 : ssh -V 3. 解决问题 3.1 确认本地 ssh.exe 路径 3.2 修改vscode Remote.ssh:Path 3.2.1 设置 Reomte.ssh:Path - 方法一 3.2.2 设置 Reomte.ssh:Path - 方法二 1. 背景介绍 windows 系统vscode ssh remote CentOS7&#xff…

【零基础入门Docker】什么是Dockerfile Syntax

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门Docker专栏https://blog.csdn.net/arthas777/category_12455882.html 目录 编写Dockerfile和Format的语法 2. MAINTAINER 3. RUN 4. ADD 6. ENTRYPOINT 7. CMD 8. EXPOSE 9. VOLUME 11. USER 12. ARG …

.NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式

之前写过使用自定义返回类的方式来统一接口数据返回格式&#xff0c;.Net Core webapi RestFul 统一接口数据返回格式-CSDN博客 但是这存在一个问题&#xff0c;不是所有接口会按照定义的数据格式返回&#xff0c;除非每个接口都返回我们自定义的类&#xff0c;这种实现起来不…

Adobe InDesign各版本安装指南

下载链接 https://pan.baidu.com/s/1VWGKDUijTTETU9sVWFjCtg?pwd0531 #2024版本 1.鼠标右击【InCopy2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 InCopy2024(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Setup…

DevOps系列文章 : 使用dpkg命令打deb包

创建一个打包的目录&#xff0c;类似rpmbuild&#xff0c;这里创建了目录deb_build mkdir deb_build目标 我有一个hello的二进制文件hello和源码hello.c, 准备安装到/opt/helloworld目录中 步骤 在deb_build目录创建一个文件夹用于存放我的安装文件 mkdir helloworld在he…

深入探讨多模态模型和计算机视觉

近年来&#xff0c;机器学习领域在从图像识别到自然语言处理的不同问题类型上取得了显着进展。然而&#xff0c;这些模型中的大多数都对来自单一模态的数据进行操作&#xff0c;例如图像、文本或语音。相比之下&#xff0c;现实世界的数据通常来自多种模态&#xff0c;例如图像…

【Linux】Linux常见指令解析上

目录 1. 前言2. ls指令3. pwd指令4. cd指令3.1 cd常见快捷指令 4. touch指令5. mkdir指令6. rmdir指令 && rm指令 &#xff08;重要&#xff09;6.1 rmdir指令6.2 rm指令 7. man指令 1. 前言 这篇文章我们将详细介绍一下Linux下常见的基本指令。 2. ls指令 语法: ls [选…

系列一、GitHub搜索技巧

一、GitHub搜索技巧 1.1、概述 作为程序员&#xff0c;GitHub大家应该都再熟悉不过了&#xff0c;很多时候当我们需要使用某一项技能而又无从下手时&#xff0c;通常会在百度&#xff08;面向百度编程&#xff09;或者在GitHub上通过关键字寻找相关案例&#xff0c;比如我想学…

Go自定义PriorityQueue优先队列使用Heap堆

题目 分析 每次找最大的&#xff0c;pop出来 然后折半&#xff0c;再丢进去 go写法 go如果想用heap&#xff0c;要实现less\len\swap\push\pop 但可以偷懒&#xff0c;用sort.IntSlice,已经实现了less\len\swap 但由于目前是大根堆&#xff0c;要重写一下less 因此&#xff…

PWM/PFM 自动切换升压型转换器系统(一)

通过对芯片整体设计要求的考虑&#xff0c;搭建全负载高效率升压型 DC-DC 转换器的整体系 统框架&#xff0c;对系统的工作过程和模块电路的功能进行简要阐述&#xff0c;对外围电路的选取进行准确计 算&#xff0c;分析系统的损耗来源&#xff0c;实现高效率的设计目标。 芯片…

机场信息集成系统系列介绍(8):基于视频分析的航班保障核心数据自动采集系统

目录 一、背景 二、相关功能规划 1、功能设计 2、其他设计要求 三、具体保障数据采集的覆盖点 四、相关性能指标要求 1、性能指标要求 2、算法指标要求 一、背景 基于视频分析的航班保障核心数据自动化采集系统&#xff0c;是ACDM系统建设的延伸&#xff0c;此类系统并…

Uniapp + Vue3 + Pinia + Vant3 框架搭建

现在越来越多项目都偏向于Vue3开发&#xff0c;想着uniapp搭配Vue3试试效果怎么样&#xff0c;接下来就是详细操作步骤。 初始化Uniapp Vue3项目 App.vue setup语法 <script setup>import {onLaunch,onShow,onHide} from dcloudio/uni-apponLaunch(() > {console.l…

LeetCode 热题100——单调栈

​ 个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 写在前面&#xff1a; 递增单调栈&#xff1a;栈中元素从栈底到栈顶依次增大 递减单调栈…

【新版】软考 - 系统架构设计师(总结笔记)

个人总结学习笔记&#xff0c;仅供参考&#xff01;&#xff01;&#xff01;! →点击 笔者主页&#xff0c;欢迎关注哦&#xff08;互相学习&#xff0c;共同成长&#xff09; 笔记目录 &#x1f4e2;【系统架构设计系列】系统架构设计专业技能 计算机组成与结构操作系统信…

【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java入门到精通 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. Java的注释方式二. 标识符三. 关键字四. 全篇总结 &#x1f4d1;前言 在Java编程…

vue2 之 实现pdf电子签章

一、前情提要 1. 需求 仿照e签宝&#xff0c;实现pdf电子签章 > 拿到pdf链接&#xff0c;移动章的位置&#xff0c;获取章的坐标 技术 : 使用fabric pdfjs-dist vuedraggable 2. 借鉴 一位大佬的代码仓亏 : 地址 一位大佬写的文章 &#xff1a;地址 3. 优化 在大佬的代码…

QT中网络编程之发送Http协议的Get和Post请求

文章目录 HTTP协议GET请求POST请求QT中对HTTP协议的处理1.QNetworkAccessManager2.QNetworkRequest3.QNetworkReply QT实现GET请求和POST请求Get请求步骤Post请求步骤 测试结果 使用QT的开发产品最终作为一个客户端来使用&#xff0c;很大的一个功能就是要和后端服务器进行交互…