首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • M4-R1

    • 一、简介

      • M4-R1简介
    • 二、快速上手

      • 01 OpenHarmony概述
      • 02 镜像烧录
      • 03 应用开发快速上手
      • 04 设备开发快速上手
    • 三、应用开发

      • 01 ArkUI

        • 1 ArkTS语言简介
        • 2 UI 组件-Row 容器介绍
        • 3 UI 组件-Column 容器介绍
        • 4 UI 组件-Text 组件
        • 5 UI 组件-Toggle 组件
        • 6 UI 组件-Slider 组件
        • 7 UI 组件-Animation 组件&Transition 组件
      • 02 资料获取

        • 1 OpenHarmony 官方资料
      • 03 开发须知

        • 1 Full-SDK替换教程
        • 2 引入和使用三方库
        • 3 HDC调试
        • 4 命令行恢复出厂模式
        • 5 升级App为system权限
      • 04 构建第一个应用

        • 1 构建第一个ArkTs应用-HelloWorld
      • 05 案例

        • 01 串口调试助手应用案例
        • 02 手写板应用案例
        • 03 数字时钟应用案例
        • 04 WIFI 信息获取应用案例
    • 四、设备开发

      • 1 Ubuntu环境开发

        • 01 环境搭建
        • 02 下载源码
        • 03 编译源码
      • 2 使用DevEco Device Tool 工具

        • 01 工具简介
        • 02 开发环境的搭建
        • 03 导入SDK
        • 04 HUAWEI DevEco Tool 功能介绍
    • 五、内核外设与接口

      • 01 指南
      • 02 设备树介绍
      • 03 GPIO介绍
      • 04 I2C通讯
      • 05 SPI通信
      • 06 PWM 控制
      • 07 串口通讯
      • 08 TF卡
      • 09 屏幕
      • 10 触摸
      • 11 Ethernet(以太网)
      • 12 M.2 硬盘
      • 13 音频
      • 13 WIFI & BT
      • 14 摄像头
    • 六、资料下载

      • 资料下载
  • M5-R1

    • 一、简介

      • M5-R1简介
    • 二、快速上手

      • 镜像烧录
      • 环境搭建
      • 下载源码
    • 三、外设与接口

      • 树莓派接口
      • GPIO 接口
      • I2C 接口
      • SPI通信
      • PWM控制
      • 串口通讯
      • TF Card
      • 屏幕
      • 触摸
      • 音频
      • RTC
      • Ethernet
      • M.2
      • MINI-PCIE
      • Camera
      • WIFI&BT
    • 四、资料下载

      • 资料下载

01 环境搭建

首先需要一台安装了Ubuntu的电脑或者虚拟机,推荐使用20.04版本。用户名不能包含中文。

我们已经准备了docker环境,只需要按照以下方法便可创建一个完善的编译环境来编译open Harmony 5.0.

docker镜像创建方法如下所示:

1 安装 docker

  • 参考:10分钟学会Docker的安装和使用-CSDN博客中的 2.2

2 使用我们构造好的 docker image

本文档将介绍两种方式,
方式 1 为使用我们构造好的 docker image;方式 2 为自己构建一个 docker image。

优点:省心,不需要联网。
缺点:可能会有文件权限问题。

备注

docker image 路径:
ShimetaPi开源鸿蒙资料>M4-R1>05-开发资料>01-OpenHarmory 开发资料>openharmony5_env.tar

将文件下载下来拷贝到任意目录下面,然后执行以下命令加载docker镜像

docker load -i openharmony5_env.tar
docker images  # 查看镜像是否加载成功

3 构建一个自己的docker image

3.1 创建dockerfile

3.1.1 作用

  dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。

3.1.2 创建方法

(1)cd ~
(2)mkdir proj
(3)cd ./proj
(4)vim dockerfile
(5)将以下文本粘贴进来后输入“:q”保存。

// dockerfile
FROM ubuntu:18.04

ARG TARGETPLATFORM
ARG DEBIAN_FRONTEND=noninteractive
ARG userid
ARG groupid
ARG username

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8


RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
RUN sed -i 's@http://.*ubuntu.com@http://repo.huaweicloud.com@g' /etc/apt/sources.list

RUN dpkg --add-architecture i386 && \
    apt-get update && \
    apt-get install -y locales && \
    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

ENV LANG en_US.UTF-8

RUN apt-get install --no-install-recommends --no-install-suggests --yes \
        binutils git git-lfs gnupg flex bison gperf build-essential zip \
        curl zlib1g-dev gcc-multilib g++-multilib 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 openjdk-8-jdk \
        python3-distutils dosfstools mtools libssl-dev libelf-dev sudo vim openssh-client wget libfl-dev liblz4-tool scons  mtd-utils  u-boot-tools default-jdk cpio genext2fs gcc-arm-none-eabi && \
    apt-get clean && \
    rm -rf /var/lib/apt/* /var/cache/apt/* /tmp/* /var/tmp/*

RUN pip3 install setuptools kconfiglib -i https://pypi.tuna.tsinghua.edu.cn/simple

RUN pip3 install scons ecdsa pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip3 install --upgrade --ignore-installed six
RUN rm -f /usr/bin/python
RUN ln -s /usr/bin/python3.8 python

RUN groupadd -g $groupid $username \
 && useradd -m -u $userid -g $groupid $username \
 && echo "$username:123456" | chpasswd \
 && echo $username >/root/username


RUN sed -i -e '/\%sudo/ c \%sudo ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
RUN usermod -a -G sudo $username

RUN echo "root:123456" | chpasswd


ENV HOME=/home/$username
ENV USER=$username

WORKDIR $HOME

ENV HOME=/home/$username
ENV USER=$username
ENV WORKFOLDER=/home/$username/proj
ENV GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
ENV PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home'

RUN mkdir -p $WORKFOLDER


ENTRYPOINT chroot --userspec=$(cat /root/username):$(cat /root/username) / /bin/bash -c "cd $WORKFOLDER && exec /bin/bash -i"

dockerfile详细说明

欲学习docker的可阅读以下文本:

  在第14行,修改apt命令的源为华为云,以缓解原镜像源下载缓慢的问题。
  在第23行,其主要是安装编译所需要的一些依赖包,后期可在此处进行修改添加自己想要的包;
  在第39行,使用传入的 groupid 创建组,建议不修改。
  在第40行,使用传入的 userid 创建用户,建议不修改。
  在第41行,修改用户密码为123456,可在此处将用户的默认密码自行修改为自身常用的密码;
  通过以上配置,当我们进入容器后,容器的默认用户,其grouid、userid、用户密码就是由上述代码所决定的。
  在第48行,将root的密码显式设置为123456,此处可将root密码修改为自身常用的密码。

3.2 创建build-container

3.2.1 作用

  该脚本用于:根据2.1中的dockerfile创建出所需的镜像(image)。

3.2.2 创建方法

(1)cd ~/proj
(2)vim build-container
(3)将以下文本粘贴进来后输入“:q”保存。

#!/bin/bash

USER_ID=1000
GROUP_ID=1000
USERNAME=shimeta


docker build --build-arg userid=$USER_ID  --build-arg groupid=$GROUP_ID  --build-arg username=$USERNAME --tag sc3568ha2:latest .

提示

   第3、4、5行将自定义用户的组ID、用户ID、用户名称传递给dockerfile,在2.1所创建的dockerfile中,会根据传入的这三个参数创建一个新用户。
   第8行末尾的 " . " 用于指定上一步我们创建的dockerfile所处的位置,由于我们将dockerfile、build-container、entrycontainer这三个文件都放在同一路径下,因此此处就使用 " . " ,表示dockerfile处于当前目录下。
   第8行的"sc3568ha2:latest"用于指定创建出的docker镜像的名称及其版本号,可自行修改,格式为"镜像名称:版本号"。

(4)chmod +x ./build-container

3.3 创建镜像

# 先将当前用户加入docker组
sudo usermod -aG docker $USER
# 应用变更
newgrp docker
# 运行以下命令测试是否无需 sudo 即可使用 Docker:
docker images
bash ./build-container

3.3.1 问题1

创建镜像失败,并有以下相关字样,考虑是网络问题导致的docker拉取镜像失败。 Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

可通过配置镜像源解决,参考解决方案:

# 编辑daemon.json
vim /etc/docker/daemon.json

# 将下述第5至36行的文本粘贴到daemon.json
{
  "registry-mirrors" : ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
],
 "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
    ],
"debug": true,
"experimental": false
}


# 重新加载daemon.json文件,使修改生效
sudo systemctl daemon-reload
# 重新启动docker服务
sudo systemctl restart docker
# 查看是否配置成功
docker info

4 进入容器

4.1 entrycontainer

4.1.1 作用

  该脚本用于:根据1中的镜像或者2中生成的镜像创建一个容器并进入该容器。

4.1.2 创建方法

(1)cd ~/proj
(2)vim entrycontainer
(3)将以下文本粘贴进来后输入“:q”保存。

#!/bin/bash

set -e

HOME_DIR="/home/shimeta/proj"
BUILD_DIR="/home/xxx/proj"


docker run --privileged  --volume ${BUILD_DIR}:${HOME_DIR}:rw --volume /tmp:/tmp \
  --workdir=${HOME_DIR} \
  --env TERM=xterm-256color --env SHELL=/bin/bash \
  --rm --init --tty --interactive \
  --hostname docker_OP \
  sc3568ha2:latest

提示

  使用docker的一个便利之处在于可以将主机文件夹映射到容器中,我们进入到容器中后,仿佛是在使用一台新的电脑的同时,还可以访问主机的指定文件夹。借助这一功能,后续,在进入容器前,我们先把项目文件放置在BUILD_DIR所指定的路径下,然后进入容器后,我们进入HOME_DIR路径下,便可以在容器路径HOME_DIR看到我们的项目文件。
  第9行的"--volume ${BUILD_DIR}:${HOME_DIR}:rw"是实现这一映射功能的语句,其将主机文件夹BUILD_DIR映射到容器的路径HOME_DIR下面,当我们进入容器中后,可以在路径HOME_DIR下面访问主机文件夹BUILD_DIR下面的所有文件。
  第6行的路径通常也是"/home/xxx/proj",与容器内路径一致,以避免混淆。其中,xxx是你使用的用户的名称,需要手动修改一下。

4.2 执行以下命令

cd ~/proj
chmod +x ./entrycontainer
bash ./entrycontainer

5 进入容器后操作

进入容器后,还需要执行以下命令:

# 1、配置默认命令行解释器为bash
ls -l /bin/sh                   #如果显示为“/bin/sh -> bash”则为正常,否则请以以下方式修改:
sudo dpkg-reconfigure dash      #然后选择no
# 2、配置git邮箱,防止编译代码时报错
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱@example.com"
在 GitHub 上编辑此页
上次更新:
贡献者: fxx
Next
02 下载源码