暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

手把手:“鸿蒙”移植“树莓派”

51CTO技术栈 2021-01-22
4758

项目最新更新,可以查看码:
https://gitee.com/liangzili/harmony-raspberry

01

环境搭建

编译鸿蒙的源码建议在 Ubuntu20.04 下进行,Windows 下会出现各种奇怪的问题,不建议使用。

①VirtualBox 虚拟机安装

VirtualBox官网下载地址:https://www.virtualbox.org/Ubuntu20.04官网下载地址:https://ubuntu.com/download/desktop

关于 VirtualBox 和 Ubuntu 的安装和使用就不展开了,百度一下资料很多。

②改 sh 为 bash

ls -l /bin/sh                   #如果显示为“/bin/sh -> bash”则为正常,否则请按以下方式修改: sudo dpkg-reconfigure dash      #然后选择no

③安装打包工具 mkfs.vfat mtools

sudo apt-get install dosfstools mtools  #官方要求安装的2个工具 sudo apt-get install zip                #官方文档没写,但是rootfs过程需要 sudo apt-get install python3-distutils  #官方文档没写,但是build过程需要

④下载安装编译工具 gn ninja llvm hc-gen

hc-gen:鸿蒙驱动 hdf 框架之类的,用于生成鸿蒙驱动配置对应的文件。
#下载gn/ninja/LLVM/hc-gen包:URL_PREFIX=https://repo.huaweicloud.com/harmonyos/compilerwget $URL_PREFIX/gn/1523/linux/gn.1523.tarwget $URL_PREFIX/ninja/1.9.0/linux/ninja.1.9.0.tarwget $URL_PREFIX/clang/9.0.0-34042/linux/llvm-linux-9.0.0-34042.tarwget $URL_PREFIX/hc-gen/0.65/linux/hc-gen-0.65-linux.tarwget $URL_PREFIX/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz #【可选】编译riscv需要,如wifiiot#解压gn/ninja/LLM/hc-gen包:tar -C ~/ -xvf gn.1523.tartar -C ~/ -xvf ninja.1.9.0.tartar -C ~/ -xvf llvm-linux-9.0.0-34042.tartar -C ~/ -xvf hc-gen-0.65-linux.tartar -C ~/ -xvf gcc_riscv32-linux-7.3.0.tar.gz  #【可选】编译riscv需要,如wifiiot#向~/.bashrc中追加gn/ninja/LLVM/hc-gen路径配置:cat <<EOF >> ~/.bashrcexport PATH=~/build_tools/gn:\$PATHexport PATH=~/build_tools/ninja:\$PATHexport PATH=~/build_tools/llvm/bin:\$PATHexport PATH=~/build_tools/hc-gen:\$PATH#export PATH=~/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin:\$PATHexport PATH=~/gcc_riscv32/bin:\$PATH   #【可选】编译riscv需要,如wifiiot#export PATH=~/.local/bin:\$PATHEOF#生效环境变量source ~/.bashrc

⑤安装 python3.8 和 pip

编译鸿蒙源码 hi3861 目标平台需要使用 scons,默认安装的 scons 版本需要 python 版本>=3.7:

a、如果是 ubuntu20.04,因为默认 python 是 3.8,正好符合要求,只需要安装 pip 即可,可以进行第 6 步了。

sudo apt-get install python3-pip
注意:如果 pip 下载慢,配置 pip 包下载源,加速国内安装 pip 包。
mkdir~/.pip/cat <<EOF > ~/.pip/pip.conf[global]index-url = https://mirrors.huaweicloud.com/repository/pypi/simpletrusted-host = mirrors.huaweicloud.comtimeout = 120EOF
b、如果是其他版本,比如 ubuntu18.04,默认 Python3 版本是 3.6,得先安装 python3.8。
sudo apt-get install python3.8 python3-pip sudo apt-get install python3-pip

安装完成后,需要将默认 python 切换为 3.8,比较麻烦的是多个 python 版本的管理,通常有两种方式:

方案一:使用 virtualenv 管理,单独 source 相应的 active 脚本切换当前 shell 会话的默认 python 版本。

virtualenv 管理多个 python 运行环境,不适用 virtualenv 的情况下,pip install 和 sudo pip install 的包会分别放到用户 home 目录和系统目录。

安装 virtualenv:

pip3 install virtualenvsudo apt install python3-virtualenv#创建使用python3.8为默认python解释器的virtualenvmkdir ~/Harmony/venv && virtualenv -p python3.8 ~/Harmony/venv#激活virtualenv,激活后的pip3 install会将包文件缓存到相应的子目录中source ~/harmonyos/venv/bin/activatesource ~/Harmony/.venv/bin/activate

方案二:使用 update-alternatives 管理,并切换全局 Python 脚本配置(不推荐,用完需要切换回去,否则会影响 apt 等依赖 python3 的软件包使用)。

update-alternatives,它是 Debian 系管理多版本软件的工具,不仅适用 Python ,而且还使用 Java 等各种有多版本共存需求的软件。

它跟 virtualenv 这种虚拟环境不同的是,update-alternatives 管理的是系统级的软件版本,virtualenv 管理的是当前用户下的一个虚拟环境。

⑥确定 Python 的环境变量

方案一:使用【ln -s】,确定 Python 安装好后,运行如下命令,将 Python 路径链接到"/usr/bin/python"。
which python3.8               #查看python3.8的安装位置    输出:/usr/bin/python3.8   #比如我的安装目录cd /usr/bin                   #进入python的目录sudo rm python                #删除pythonsudo ln -s /usr/local/bin/python3.8 python #将python链接到python3.8python --version

方案二:sudo apt-get install python3-venv #安装 venv 虚拟环境。

python3 -m venv .venv       #推荐进入项目的根目录再执行此命令source .venv/bin/activate   #进入虚拟环境
其他工具安装:
#安装setuptools和kconfiglibpip3 install setuptools kconfiglib#安装编译hi3861需要的pip包pip3 install scons ecdsa pycryptodomepip3 install --upgrade --ignore-installed six

02

下载源码

Ubuntu 环境搭建完成之后开始下载源代码。

①配置 GIT

sudo apt install gitgit config --global user.name "liangzili"git config --global user.email "liangzili@qq.com"git config --global credential.helper store

②安装码云 repo 工具。

可以执行如下命令:

sudo apt install curlcurl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repochmod a+x /usr/local/bin/repo       #设置repo文件 a+x就是全部用户可执行pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

③下载源码

repo 是下载多个 git 库的 python 脚本,参考 repo 用法:
https://blog.csdn.net/nwpushuai/article/details/78778602

repo init:

  • -u # 指定 manifests 这个远程 git 库的 URL,manifests 库是整个项目的清单,通常包含了 default.xml 这个文件。

  • -b # 指定 manifest.xml 文件中的一个版本,,也就是俗称的“分支”运行该命令后,会在当前目录下新建一个 .repo 子目录。

repo sync:

  • -j12 # 开启多线程同步操作,这会加快 sync 命令的执行速度。默认情况下,使用 4 个线程并发进行 sync。

  • –no-repo-verify:在下载 repo 库时,会对 repo 的源码进行检查。通过 –repo-url 指定第三方 repo 库时,可能会导致检查不通过,所以可以配套使用该参数,强制不进行检查。

  • -c, –current-branch:只同步指定的远程分支。默认情况下,sync 会同步所有的远程分支,当远程分支比较多的时候,下载的代码量就大。使用该参数,可以缩减下载时间,节省本地磁盘空间

  • -d, –detach:脱离当前的本地分支,切换到 manifest.xml 中设定的分支。在实际操作中,这个参数很有用,当我们第一次 sync 完代码后,往往会切换到 dev 分支进行开发。如果不带该参数使用 sync, 则会触发本地的 dev 分支与 manifest 设定的远程分支进行合并,这会很可能会导致 sync 失败。

  • sync -c # 只同步指定的远程分支。
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verifyrepo sync -c  #以后每天同步远程仓的修改,只需要执行这一条命令即可前期可以先锁定OpenHarmony-1.0版本,避免频繁升级带来的问题,树莓派的移植就是在OpenHarmony-1.0的分支上进行的 repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-1.0repo sync -c -j12

④编译测试

可以先执行官方编译命令测试下编译环境是否正常,编译完成后,主目录下会生成 out 的文件夹。

-b debug 构建调试版本,如果没有这个参数,正常版本是无法进入 shell 的:
python3 build.py ipcamera_hi3516dv300 -b debugpython3 build.py ipcamera_hi3518ev300 -b debugpython build.py wifiiot -b debug

03

树莓派启动流程

①树莓派的启动方式

树莓派自带 BootLoader,引导 SD 卡上的镜像文件启动内核,可以使用树莓派自带的 BootLoader 直接启动内核,但是这样不方便我们调试代码。需要频繁的插拔 SD 卡。

所以我是先通过 BootLoader 加载 u-boot,然后通过 u-boot 的 TFTP 直接将内核的镜像加载到内存,这样在调试的时候,就不需要频发的插拔 SD 卡了。

当调试结束,再拷贝镜像文件到 SD 卡,启动内核就可以了:
TFTP启动内核u-boot环境变量设置:setenv bootcmd "tftp 80000 OHOS_Image.bin;tftp 80000 OHOS_Image.bin;tftp 80000 OHOS_Image.bin;go 80000"SD卡启动内核u-boot环境变量设置:setenv bootcmd "fatload mmc 0:1 100000 liteos.bin;fatload mmc 0:1 100000 liteos.bin;mw.l    0x10100000  ffffffff 1000000;fatload mmc 0:1 10100000 rootfs.jffs2;go 100000 - 10100000"

②树莓派 2 的启动文件

OHOS_image_1.0 这个文件夹中有我已经编译好的鸿蒙镜像,可以直接使用。详细的编译过程可以参考后面的章节。

👇扫码关注鸿蒙技术社区👇

专注开源技术,共建鸿蒙生态

“阅读原文”了解更多

文章转载自51CTO技术栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论