拿到鸿蒙开发板AICamera已经一个星期了,期间查找了众多的资料教程来学习,无奈各位老师们的讲解起点很高,各自的环境又不尽相同,经验碎片化很严重;各种工具和设置之间的切换也容易让人摸不着头脑,非常不利于我们这种刚刚接触鸿蒙的小小白们入门。鉴于此我把目前的一点点操作流程初步总结一下,希望当作自己的记录也能为别人提供一些帮助。
本文将尽量简洁明了通俗易懂来描述各个环节的操作,包括以下四大步骤:
一、开天辟地:安装一个只有Linux的操作系统实现全部工作,而不是在Windows+各种虚拟机下完成,既提高运行效率又减少很多额外的操作,即使只有4G小内存的机器也不怕了;
二、编译环境:编译工具就那么几种,下载解压配置一下环境变量就可以使用,固定的操作模式就能编译出用于烧写的镜像文件;
三、开发环境:光烧写没有用,还得能把自己的文件添加进去,这步来说明怎样最简单的生成自己的可执行文件;
四、烧写文件:鸿蒙目前的弱点,Windows下不能编译,Linux下又没有烧写工具。虽然vscode有个DevEcoDevice插件,但是网络不好我始终也安装不完全,没法用。所以只好自己动手,Linux下敲命令来烧写吧。
下面和我一来起操作,简单低级的东西可以直接略过。
一、开天辟地:
1.拆机装硬盘;
完全抛弃Windows,因为前期已经折腾的不像样了,Windows本身+Linux虚拟机+vscode+浏览器+一个内存盘,笔记本8G的内存用起来提心吊胆,所以干脆只用Linux,有强迫症的我连硬盘都不希望和Windows共用一个。
翻出来一个很老的机械硬盘,跑Linux一样飞快。拆机仅供参考,拆坏了可别找我。
2.安装Lubuntu18.04.5;
不像Ubuntu那样臃肿,Lubuntu可算是在各个发行版中比较精简的,ARM上都能流畅操作更别说x86的了。最新版Lubuntu20.04是一个重大的更新版,但用起来不习惯了,最后还是退一步选择了
Lubuntu18.04.5。
http://cdimage.ubuntu.com/lubuntu/releases/,各种版本自己挑吧,别太老就行。
二、编译环境:
由于系统默认的是dash而不是bash,所以首先把它改掉。
dpkg-reconfiguredash
rm-RF/bin/sh
ln-s/bin/bash/bin/sh
1.鸿蒙编译环境:
1)安装:
apt-getinstalldosfstoolsmtoolsziplibffi-devpython3-setuptoolspython3-pip-y
Lubunt18.04是python3.6,已验证可用。真要是碰到不行的时候想办法装3.8以上版本吧。
2)下载:
https://repo.huaweicloud.com/HarmonyOS/compiler/gn/1523/linux/gn.1523.tar
https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar
https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar
https://repo.huaweicloud.com/harmonyos/compiler/clang/9.0.0-34042/linux/llvm-linux-9.0.0-34042.tar
https://files.pythonhosted.org/packages/8a/f1/d98a89231e779b079b977590efcc31249d959c8f1d4b5858cad69695ff9c/kconfiglib-14.1.0-py2.py3-none-any.whl
也可以用浏览器下载,保存到哪里都可以。
3)解压:
tarxvfgn.1523.tar
tarxvfninja.1.9.0.tar
tarxvfhc-gen-0.65-linux.tar
tarxvfllvm-linux-9.0.0-34042.tar
pip3installkconfiglib-14.1.0-py2.py3-none-any.whl
我把鸿蒙所有相关的东西放到了一个单独的分区里,工具也都扔在那里。
4)配置:
找到用户目录下的.bashrc文件,把这些东西添加进去。我用的是root登录的,那么就在/root下找,其他用户在/home/登录名中。
exportPATH=/HarmonyOS/Env/gn:$PATH
exportPATH=/HarmonyOS/Env/ninja:$PATH
exportPATH=/HarmonyOS/Env/hc-gen:$PATH
exportPATH=/HarmonyOS/Env/llvm/bin:$PATH
告诉当前用户这些工具从哪里能找到。保存后重启一下,或者source~/.bashrc来生效。
5)鸿蒙代码:
https://repo.huaweicloud.com/harmonyos/os/1.0/code-1.0.tar.gz
tarxzvfcode-1.0.tar.gz
其中/HarmonyOS是鸿蒙分区,可以随意更改。Env就是上面解压的那些工具,OHOS是源代码解压改名的目录,编译要从这里开始。先不要急着编译,还要做一下小小的改动,否则需要重新编译。
2.改造编译命令:
用文本工具打开/HarmonyOS/OHOS/build/lite/gen_rootfs.py文件,
搜索ifos.path.exists(rootfs):语句,然后注释掉三行,编译后就不会自动删除rootfs目录了。
3.编译内核:
pythonbuild.pyipcamera_hi3516dv300-bdebug
编译出的文件保存在out目录下,其中OHOS_Image.bin、rootfs.img、userfs.img用于烧写,rootfs目录保存自己编译后可执行文件并可以单独生成rootfs.img文件,不用全部重新编译。默认情况下,编译后会将rootfs目录删除。虽然保留了rootfs.tar文件,但是每次还得解压再使用,麻烦。rootfs的详细用法稍后说明。
三、开发环境:
1.Linux下的IDE:
Linux下开发C语言的IDE有很多,不过我感觉最好用的还是vscode,小巧灵活,众多的插件也能实现复杂的功能。其实严格来说,vscode不是一个IDE,只能算是一个DE。但是这是一个非常出色的DE,可以看成是一个工具的集合,把本不该它做的事也都做了。
不夸了,赶紧安装。官网上已经提供了编译好的Linux版本,直接选择对应的操作系统下载。
https://code.visualstudio.com/Download
dpkg-icode_1.49.3-1601661857_amd64.deb
2.编写代码:
随便找个目录存放自己的代码,目录文件的内容包括代码的各个.c、.h,编译用的make.sh文件,和生成烧写镜像的rootfs.sh文件。程序的内容就不多说了,想写什么就写什么,要保证头文件引用对了。使用IDE开发的好处就是支持代码跳转,在vscode中配置好头文件所在的路径,按住ctrl,然后鼠标点击头文件名即可打开对应的文件,便于查看,点击函数名或变量等也可以,这样在开发过程中就能验证引用路径是否正确,不必等待编译的时候再看报错信息。
3.单一程序的编译:
make.sh和rootfs.sh在使用之前请先编辑一下,把ROOT变量改为自己的正确的路径。
make.sh:编译出可执行文件,并拷贝到rootfs/bin目录下。
ROOT=/HarmonyOS/OHOS
clang-targetarm-liteos
--sysroot=$ROOT/prebuilts/lite/sysroot/
-oTest*.c
cpTest$ROOT/out/ipcamera_hi3516dv300/rootfs/bin/
rootfs.sh:直接生成rootfs.img文件,不用再去全部重新编译。
ROOT=/HarmonyOS/OHOS
rm$ROOT/out/ipcamera_hi3516dv300/rootfs.img
$ROOT/kernel/liteos_a/tools/scripts/make_rootfs/rootfsimg.sh
$ROOT/out/ipcamera_hi3516dv300/rootfsvfat
可执行文件的名字是在make.sh里指定的,叫Test,也可以改为其他名字,拷贝到rootfs/bin里的就是这个Test。
四、烧录并运行:
1.生成烧录镜像文件:
./make.sh
./rootfs.sh
运行完之后会先把之前的rootfs.img删除,再重新生成一个。如果不放心可以把原来的文件改名备份一下,再等着新文件的产生。
2.安装烧录用到的工具:
1)PL2303
AICamera开发板上有个TTL的调试串口,并且附送了一条PL2303的串口线。Lubuntu自带PL2303的驱动,插上后从设备中可以找到这个串口,ttyUSB0。
不一定都叫这个名字,根据实际情况而定。
2)aptminicom
Windows下有许多串口调试工具,Linux下也有,比较常用的是minicom。安装之后要先指定一下使用哪个串口。
minicom-s,然后选择A,把默认的串口号改为/dev/ttyUSB0,按回车返回,再选择保存。
重新运行minicom,给开发板上电,可以看到uboot的启动信息,串口通讯成功。
3)apttftpd-hpa
修改/etc/default/tftpd-hpa文件中的TFTP_DIRECTORY为镜像文件所在的路径和目录。
修改配置文件之后保存,重新运行tftpd,servicetftpd-hparestart。
3.烧录并运行程序:
烧写之前,uboot的环境变量要先设置一下,最主要的是本机MAC地址、本机IP、ServerIP、bootargs和bootcmd等,可以使用printenv来显示,修改后用save保存,reset生效。
请参照上图设置,偷懒不写出来了。
Windows下有海思专用的烧写工具,看着功能很复杂,其实万变不离其中,归根结底就是几条命令:
mw.b0x810000000xFF0x4f0000
tftp0x81000000OHOS_Image.bin
mmcwrite0x00x810000000x8000x2780
mw.b0x810000000xFF0xe05c00
tftp0x81000000rootfs.img
mmcwrite0x00x810000000x50000x702e
mw.b0x810000000xFF0x3200000
tftp0x81000000userfs.img
mmcwrite0x00x810000000xc8000x19000
reset
分别烧写了三个文件,kernel、rootfs、userfs。烧写的过程就是先通过tftp下载文件到内存中,再保存到mmc里。这样可以直接脱离工具使用命令来完成。三个文件都成功后需要重启才能运行。运行后还会停在uboot里,手动执行go0x80000000来进入系统。因为这个go我没有让它直接运行,为了方便烧写。要自动运行的话,把go0x80000000加在环境变量的bootargs里即可开机自动进系统。
这是其中一个文件下载的样子,如果没有保存直接go了是不会执行新系统的。
另外多说一句,千万不要用串口直接烧写程序,会慢到你怀疑人生。不要问我怎么知道的,因为我怀疑过了。
烧写完毕进入系统,赶紧来找一下自己的程序,在/bin下。
运行./bin/Test,大功告成。
最后打印一下系统的信息,留个纪念吧。
责任编辑:lq
原文标题:我是如何实现鸿蒙系统编译、烧录不跨平台的?
文章出处:【微信号:HarmonyOS_Community,微信公众号:HarmonyOS社区】欢迎添加关注!文章转载请注明出处。
评论