2018年3月19日的Linaro Connect大会上华为正式发布了HiHope Hikey 970开源硬件。HiHope Hikey 970基于华为海思麒麟970,采用了台积电10nm工艺,拥有4核[email protected]和4核[email protected],12核的Mali-G72。麒麟970是全球首款内置独立NPU(神经网络单元)的移动AI计算平台。HiHope Hikey 970拥有6GB的LPDDR4 和 64GB UFS。外围部分拥有支持4K高清的HDMI 2.0a接口,2个USB3.0接口,2个USB Type-C接口,1个千兆网口,支持CAN V2.0B协议,可以运行AOSP、Ubuntu、Debian等系统。
目前淘宝已经可以买到。
HiHope Hikey 970以强悍的性能和兼容于96Boards CE的标准,在计算机视觉、高性能计算开发、Android标准化程序开发测试等领域有广泛的应用,HiHope Hikey 970不只是开源硬件中的性能怪兽,因为集成了NPU(NPU相比与CPU在能效上有50倍以上的提升,性能上有25倍以上的提升),并且得到了华为HiAI生态的全力支持,在AI等人工智能领域开发中拥有巨大的发展前景,HiHope Hikey 970可运用于深度学习算法、智能机器人、无人驾驶和智慧城市等多个领域。
这款虽然是华为的产品但是主要的文档都在96boards的官网上。
Using the HiKey970
hikey970 相关软件
如果Hikey970开发板之前烧录了 Debian,再次烧录 Lebuntu 之后开机发现系统可能仍然是 Debian,可以先烧录 Android 再烧录 Lebuntu 。
hikey 970 开发板刷基础固件和Android系统刷板子的系统主要包括两个方面,一个是基础固件,一个就是系统文件。根据板子上面四个开关状态的不同板子会处在不同的状态。
开关位于图中的22的位置 这四个开关的功能分别是
1.自动开机 这个开关如果是On,当板子通电的时候就会自动启动系统。反之则上电之后要按电源键启动。
2.启动模式 开关是On的时候上电后启动至刷基础固件模式,这时候可以通过程序给板子刷基础固件。当是off的时候系统会从已经安装的bootloader启动。
3.系统启动模式 当是On的时候系统会以UEFI模式启动,反之则会直接启动系统
4.扩展功能选择 当是On的时候会使用低速扩展口功能,当是Off的时候会使用蓝牙功能。
基础固件包含了板子的bootloader等等。如果基础固件刷错了系统就不能再启动了。甚至连fastboot也不能使用,也无法再刷其他系统。正常情况下只是刷系统是不需要刷基础固件的。
安装基础程序
sudo apt-get install android-tools-adb
sudo apt-get install android-tools-fastboot
基础固件
以下的操作都是在Linux系统环境下完成的
下载镜像
从96boards的970下载主页下载最新的系统镜像。目前(2018.5.19)只有Android的。这个文件中包含了基础固件和系统镜像。
下载完成后你需要解压这个文件。在image文件夹中包含了需要的文件。
下载镜像工具
git clone https://github.com/96boards-hikey/tools-images-hikey970
官方的工具有错误,我们需要进行修改后才能用 在 recovery-flash.sh 的第九行
UEFI_BUILD_PATH=/home/qubo/tools-images-hikey970
改为
UEFI_BUILD_PATH=${PWD}
然后把刚才下载的文件中的image里的所有文件复制到tools-images-hikey970文件夹
设置开发板启动方式
把板子的开关设置成 On On On Off,然后上电。按照之前的说明,这时候板子处在刷基础固件的状态。 用数据线通过USB把板子和电脑连接起来。
正常情况下你会在/dev/ 文件夹下面发现一个ttyUSBX的设备,X是一个数字可能是0,1之类的。确认自己的板子是对应哪个设备。
刷入固件
运行
sudo ./recovery-flash.sh ttyUSBX
如果你的设备是ttyUSB0那么你可以省略第二个参数
程序卡在了 wait for devices可能的原因是
1.你安装过modemmanager,这个程序会给我们的板子发数据导致程序写入失败。解决方法很简单,卸载这个软件
sudo apt-get purge modemmanager
2.你刷入了错误的固件。可能你的固件是从别的地方下载的,也可能是自己编译的。如果是这样那么很有可能是固件自身出了问题。
系统镜像
实际上在刷入上个基础固件的时候会自动的把系统镜像也刷入进去。这时候把板子上的开关设置为On Off On Off就可以启动系统了。第一次启动的时候要多等一会,因为Android要先初始化一下。
如果只是要刷系统固件可以只刷入系统固件中的下面几个文件。执行
sudo fastboot flash boot boot.img
sudo fastboot flash cache cache.img
sudo fastboot flash system system.img
sudo fastboot flash userdata userdata.img
镜像下载
官方网址: https://www.96boards.org/
国内网站:http://smartfire.cn/forum-64-4.html
其中 Lebuntu 烧录之后就是 ubuntu16.04 (xenial),板载的wifi模块可以直接连无线网。
烧录过程
1、在Ubuntu虚拟机中安装烧录工具,下载镜像文件的压缩包并进行解压。
sudo apt-get install android-tools-adb
sudo apt-get install android-tools-fastboot
cd “下载目录”
tar -xvzf hikey970-lebuntu-16.04.tar.gz
cd hikey970-lebuntu-16.04
2、给 hikey970 板断电,将4位拨码开关拨到 ON OFF ON OFF,用USB type-c数据线将板子的 Type C 接口与 Ubuntu 虚拟机连接。
3、给板子通电后,在虚拟机中打开终端,使用 lsusb 指令查看是否有 Google Inc. 字样的USB设备,如果有则执行步骤4,如果没有则执行步骤5。
4、执行指令
./flash-all-binaries.sh
即可完成系统烧录。
5、注意仔细看第3条,当没有 Google Inc. 设备被识别时才执行这条。先将拨码改为 ON ON ON OFF,重启板子,查看USB终端编号
ls /dev/tty*
记住终端名称 /dev/ttyUSBx 其中 x 可能是 0、1、2等数字,在镜像文件的目录中执行
./binaries/recovery-flash.sh /dev/ttyUSBx
即可完成系统烧录。
6,烧录完成后,将拨码改为 ON OFF OFF OFF,其中第一个 ON 表示通电后立即启动。
7、登录系统,用户名和密码都是 shunya,在终端中查看系统详情。
#:lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
修改分区
首先查看默认的分区空间,在 hikey970 上登录系统后在终端中输入指令
df -h
可以看到根目录只有不到 4GB 的空间。
扩展空间需要重新进行分区镜像文件的烧写。
下载地址:https://test-1252517595.cos.ap-guangzhou.myqcloud.com/media/hikey970/64gtoendprm_ptable.img
下载之后拷贝到 Ubuntu 虚拟机中。将hikey970拨码拨到 ON OFF ON OFF,用USB Type-C 数据线连接板子 TYPE C 接口和 Ubuntu 虚拟机(参考上述烧录步骤)。执行一条指令
sudo fastboot flash ptable 64gtoendprm_ptable.img
重新将拨码拨到 ON OFF OFF OFF,登录 hikey970 板载系统,在终端中输入指令 sudo fdisk -l 查看分区情况。
#: sudo fdisk -l
Device Start End Sectors Size Type
/dev/sdd1 256 511 256 1M Microsoft basic data
/dev/sdd2 512 3583 3072 12M Microsoft basic data
/dev/sdd3 3584 5119 1536 6M Microsoft basic data
/dev/sdd4 5120 8191 3072 12M Linux filesystem
/dev/sdd5 8192 73727 65536 256M Microsoft basic data
/dev/sdd6 73728 73983 256 1M Microsoft basic data
/dev/sdd7 73984 94463 20480 80M EFI System
/dev/sdd8 94464 98559 4096 16M EFI System
/dev/sdd9 98560 102655 4096 16M Microsoft basic data
/dev/sdd10 102656 106751 4096 16M Microsoft basic data
/dev/sdd11 106752 107263 512 2M Microsoft basic data
/dev/sdd12 107264 15611907 15504644 59.1G Linux filesystem
可以看到最后一个分区是 /dev/sdd12,大小接近60G。
输入指令 df -h,查看根目录大小是否变化。如果还是小于 4GB,则需要输入指令
sudo resize2fs /dev/sdd12
来手动调整分区大小,最终得到的结果是。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 59G 4.5G 52G 8% /
devtmpfs 2.8G 0 2.8G 0% /dev
tmpfs 2.9G 0 2.9G 0% /dev/shm
tmpfs 2.9G 17M 2.8G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.9G 0 2.9G 0% /sys/fs/cgroup
tmpfs 577M 0 577M 0% /run/user/107
tmpfs 577M 0 577M 0% /run/user/1000
根目录已经扩展到59GB。
添加ROS软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
添加key
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
开始安装
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
配置环境
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装编译软件包依赖
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
测试
roscore
参考文献:
[1]介绍+刷机 https://doc.bwbot.org/zh-cn/books-online/hikey970-doc/topic/461.html
[2]Ubuntu烧录 https://blog.csdn.net/SIR_wkp/article/details/86226611
[2] ROS安装 http://wiki.ros.org/kinetic/Installation/Ubuntu