电子说
拿到鸿蒙开发板 AI Camera 已经一个星期了,期间查找了众多的资料教程来学习,无奈各位老师们的讲解起点很高,各自的环境又不尽相同,经验碎片化很严重;各种工具和设置之间的切换也容易让人摸不着头脑,非常不利于我们这种刚刚接触鸿蒙的小小白们入门。鉴于此我把目前的一点点操作流程初步总结一下,希望当作自己的记录也能为别人提供一些帮助。
本文将尽量简洁明了通俗易懂来描述各个环节的操作,包括以下四大步骤:
一、开天辟地:安装一个只有 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-reconfigure dash
rm -RF /bin/sh
ln -s /bin/bash /bin/sh
1.鸿蒙编译环境:
1) 安装:
apt-get install dosfstools mtools zip libffi-dev python3-setuptools python3-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)解压:
tar xvf gn.1523.tar
tar xvf ninja.1.9.0.tar
tar xvf hc-gen-0.65-linux.tar
tar xvf llvm-linux-9.0.0-34042.tar
pip3 install kconfiglib-14.1.0-py2.py3-none-any.whl
我把鸿蒙所有相关的东西放到了一个单独的分区里,工具也都扔在那里。
4) 配置:
找到用户目录下的.bashrc 文件,把这些东西添加进去。我用的是 root 登录的,那么就在/root下找,其他用户在 /home/登录名 中。
export PATH=/HarmonyOS/Env/gn:$PATH
export PATH=/HarmonyOS/Env/ninja:$PATH
export PATH=/HarmonyOS/Env/hc-gen:$PATH
export PATH=/HarmonyOS/Env/llvm/bin:$PATH
告诉当前用户这些工具从哪里能找到。保存后重启一下,或者 source ~/.bashrc 来生效。
5)鸿蒙代码:
https://repo.huaweicloud.com/harmonyos/os/1.0/code-1.0.tar.gz
tar xzvf code-1.0.tar.gz
其中/HarmonyOS 是鸿蒙分区,可以随意更改。Env 就是上面解压的那些工具,OHOS 是源代码解压改名的目录,编译要从这里开始。先不要急着编译,还要做一下小小的改动,否则需要重新编译。
2.改造编译命令:
用文本工具打开/HarmonyOS/OHOS/build/lite/gen_rootfs.py 文件,
搜索 if os.path.exists(rootfs):语句,然后注释掉三行,编译后就不会自动删除 rootfs 目录了。
3.编译内核:
python build.py ipcamera_hi3516dv300 -b debug
编译出的文件保存在 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 -i code_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 -target arm-liteos
--sysroot=$ROOT/prebuilts/lite/sysroot/
-o Test *.c
cp Test $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/rootfs vfat
可执行文件的名字是在 make.sh 里指定的,叫 Test,也可以改为其他名字,拷贝到 rootfs/bin里的就是这个 Test。
四、烧录并运行:
1.生成烧录镜像文件:
./make.sh
./rootfs.sh
运行完之后会先把之前的 rootfs.img 删除,再重新生成一个。如果不放心可以把原来的文件改名备份一下,再等着新文件的产生。
2.安装烧录用到的工具:
1) PL2303
AI Camera 开发板上有个 TTL 的调试串口,并且附送了一条 PL2303 的串口线。Lubuntu自带 PL2303 的驱动,插上后从设备中可以找到这个串口,ttyUSB0。
不一定都叫这个名字,根据实际情况而定。
2) apt minicom
Windows 下有许多串口调试工具,Linux 下也有,比较常用的是 minicom。安装之后要先指定一下使用哪个串口。
minicom -s,然后选择 A,把默认的串口号改为/dev/ttyUSB0,按回车返回,再选择保存。
重新运行 minicom,给开发板上电,可以看到 uboot 的启动信息,串口通讯成功。
3) apt tftpd-hpa
修改/etc/default/tftpd-hpa 文件中的 TFTP_DIRECTORY 为镜像文件所在的路径和目录。
修改配置文件之后保存,重新运行 tftpd,service tftpd-hpa restart。
3.烧录并运行程序:
烧写之前,uboot 的环境变量要先设置一下,最主要的是本机 MAC 地址、本机 IP、ServerIP、bootargs 和 bootcmd 等,可以使用 printenv 来显示,修改后用 save 保存,reset 生效。
请参照上图设置,偷懒不写出来了。
Windows 下有海思专用的烧写工具,看着功能很复杂,其实万变不离其中,归根结底就是几条命令:
mw.b 0x81000000 0xFF 0x4f0000
tftp 0x81000000 OHOS_Image.bin
mmc write 0x0 0x81000000 0x800 0x2780
mw.b 0x81000000 0xFF 0xe05c00
tftp 0x81000000 rootfs.img
mmc write 0x0 0x81000000 0x5000 0x702e
mw.b 0x81000000 0xFF 0x3200000
tftp 0x81000000 userfs.img
mmc write 0x0 0x81000000 0xc800 0x19000
reset
分别烧写了三个文件, kernel、 rootfs、 userfs。烧写的过程就是先通过 tftp 下载文件到内存中,再保存到 mmc 里。这样可以直接脱离工具使用命令来完成。三个文件都成功后需要重启才能运行。运行后还会停在 uboot 里,手动执行 go 0x80000000 来进入系统。因为这个 go我没有让它直接运行, 为了方便烧写。要自动运行的话, 把 go 0x80000000 加在环境变量的 bootargs里即可开机自动进系统。
这是其中一个文件下载的样子,如果没有保存直接 go 了是不会执行新系统的。
另外多说一句,千万不要用串口直接烧写程序,会慢到你怀疑人生。不要问我怎么知道的,因为我怀疑过了。
烧写完毕进入系统,赶紧来找一下自己的程序,在/bin 下。
运行./bin/Test,大功告成。
最后打印一下系统的信息,留个纪念吧。
责任编辑:lq
全部0条评论
快来发表一下你的评论吧 !