本文是记录我在安装过程中遇到的问题和参考的文章
本文参考了http://t.csdnimg.cn/TH4Gm这个博主的文章,但是我跳了很多步。
一开始用的是基于IDE开发,但是DevEco Tool里最高版本的码源只有3.2版本,于是改用基于命令行开发,进入正题
按照开发者手册的安装,我省略了好多步(因为我的目的就是为了编译成功)
有些步骤还是不能省略,我重新整理了一下!!!!
Windows环境要求
源码烧录需要Windows10 64位的系统环境。
Ubuntu环境要求
-
Ubuntu18.04及以上版本,X86_64架构,内存推荐16 GB及以上。(Ubuntu的运行内存非常重要)
-
Ubuntu系统的用户名不能包含中文字符。
!!!Ubuntu22.04版本的不支持!!!(非常重要)Ubuntu20.04版本的最优!!!
必要的环境配置
将Shell环境修改为bash
sudo dpkg-reconfigure dash
(会跳出一个页面,选择no就行)
替换Ubuntu软件源
(1)在https://mirrors.ustc.edu.cn/repogen/网站上下载对应版本的最新源
!!!注意:版本别下错了
(2)将etc/apt路径下的sources.list文件的内容改为在(1)中下载的最新软件源
!!!注意:如果没有更换成功,会造成库和工具的安装失败
(3)更新软件包索引
sudo apt update
(4)配置国内源
sudo vim ~/.pip/pip.conf
在文件里添加
[global]
index-url = https://repo.huaweicloud.com/repository/pypi/simple
trusted-host = repo.huaweicloud.com
timeout = 120
安装必要的库和工具
!!!如果这个没安装后续会出现3000的报错
sudo apt-get install 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
sudo apt-get install gcc-arm-linux-gnueabi gcc-9-arm-linux-gnueabi
配置Python
设置默认Python解释器:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
python --version
安装python包管理工具(pip3):
sudo apt install python3-pip
配置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-lfs:
sudo apt install git-lfs
安装git/git-lfs/python/curl:
sudo apt install git git-lfs python3-pip curl
安装码云repo工具命令:
mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
和Gitee连接
配置git和SSH公钥
#配置git(请将下面的邮箱和用户名换成您自己的):
git config --global user.email "xxx@xxx.com"//你的邮箱账号
git config --global user.name "edu" //Ubuntu的用户名
git config --global credential.helper store
git config --global --add safe.directory "*"
#生成/添加SSH公钥
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
# Generating public/private ed25519 key pair...
按照提示完成,即可生成 ssh key。
通过查看 ~/.ssh/id_ed25519.pub 文件内容,获取到你的 public key
cat ~/.ssh/id_ed25519.pub
将获得的公钥复制,打开Gitee的个人中心的SSH公钥,将公钥添加
#添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
若返回 Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功。
拉取源码
//新建的文件夹在文件夹下下载源码
mkdir -p ~/openharmony/4.0
cd ~/openharmony/4.0
#源码下载
repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony-4.0-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
#在源码根目录下执行prebuilts脚本,安装编译器及二进制工具:
bash build/prebuilts_download.sh
#下载的prebuilts二进制默认存放在与OpenHarmony同目录下的OpenHarmony_2.0_canary_prebuilts下
# prebuilts_download.sh这个脚本会创建prebuilts目录,并将边回忆工具链下载、解压到这个目录下
安装编译工具
#在源码根目录运行如下命令安装hb并更新至最新版本:
python3 -m pip install --user build/hb
#设置环境变量:
echo 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
编译
./build.sh --product-name rk3568 --ccache
(编译的时间好久)
编译过程中有出现报错
截取小片段的报错,类似这种
解决方法;
-
清理构建环境:
- 转到 OpenHarmony 的根目录。
- 运行以下命令之一来清理构建环境:
hb clean --all #(建议用这个) 或者 rm -rf out build/resources/args/*.json
-
同步代码仓库:
- 运行
repo sync
命令来确保所有子模块和依赖项是最新的。
- 运行
-
拉取 Git LFS 文件:
- 如果项目使用 Git LFS 存储大文件,运行以下命令来确保所有 LFS 文件都已拉取:
repo forall -c 'git lfs pull'
- 如果项目使用 Git LFS 存储大文件,运行以下命令来确保所有 LFS 文件都已拉取:
-
下载预构建文件:
- 执行脚本下载所需的预构建文件:
bash build/prebuilts_download.sh
- 执行脚本下载所需的预构建文件:
-
重新构建产品或组件:
./build.sh --product-name rk3568 --ccache
然后就会接着你之前断开的地方继续编译,最后还是出现报错4000的问题,尝试了很多种方法,重新拉码源,重新安装库,重新配环境,重新安装Ubuntu,最后都是报错4000。于是直接拷贝了编译成功的Ubuntu在我的电脑上进行2次编译,最后还是报错。查了很多资料,最后确定是运行内存不足的问题
扩大WSL的运行内存
Windows + R 键
输入 %UserProfile% 并运行进入用户文件夹
新建文件 .wslconfig,文件内容如下:
[wsl2]
memory=7G # 限制最大使用内存,不使用64G,是为了为Windows保存一些内存,不这么卡
swap=7G # 限制最大使用虚拟内存
然后运行Windows cmd,输入 `wsl --shutdown` 来关闭当前的子系统,重新运行bash进入子系统
注意.wslconfig文件的后缀别忘记删了
进入Ubuntu的时候可以用 free -m的指令来查看运行内存是否设置成功。
成功后,重新编译,编译成功!!!
总结:是因为我电脑的运行内存不足,再加上wsl的默认运行内存也小,导致的4000报错的问题