Hikey960 OS安装及OpenCL driver安装
Hikey960是一个非常老的板子了,实验室正好有一块,一直都没人用(因为配置起来比较麻烦,不如用TX1这种方便的板子),最近对Mali GPU感兴趣,就趁着假期看看能不能用起来。
要想用这块板子,首先得刷OS(Hikey960自带AOSP,不过安卓的OS没支持OpenCL driver,所以最好刷一个新的OS,比如Debian的,然后再装driver)。
好在由于板子够老,有足够的文档、论坛、博客讨论,只是内容比较混杂,而且中文内容更加零散,于是在这里记录一下如何刷OS和装driver(本文的本质还是搬运整理已有信息)。
参考信息源:
1. 准备
1.1 熟悉板子
这块板子有一个type C接口和两个type A接口,一个HDMI输出,一个SD插槽,还有比较关键的GPIO用于控制输出。目前Debian kernel无法使用HDMI进行显示输出,所以必须从GPIO连串口进行控制输出。type C接口是刷OS时使用的接口。 板子的反面有三个开关,据说更老版本的是跳片。这些开关的组合代表了板子的不同状态:recovery/fastboot/normal- recovery: 1 ON; 2 ON; 3 OFF
- fastboot: 1 ON; 2 OFF; 3 ON
- normal: 1 ON; 2 OFF; 3 OFF
1.2 其它设备
需要准备一个运行Linux的pc机作为host,一个1.8v的USB转TTL芯片及杜邦线(或者买96Boards的UART,某宝售价一百到两百)用作控制输出,一个USB typeC的线(手机充电线就行)(如果买了96Boards的UART,要准备一根micro USB线,手机充电线即可)。
2. 刷Debian OS
大致流程与这里一样,只是有点细节区别。
首先切断板子电源,将开关调整至1:ON; 2:ON; 3:OFF的状态,此时板子在recovery状态,然后连接type C到pc机,再把控制输出接到pc机,这里我是向同学借了一个96Boards UART用作控制输出,直接连micro USB线就好;如果要用USB转TTL的话,就要自己把串口线接好,11,13号口分别是板子的输出和输入,用杜邦线把11号口连在转接器的输入,13号连在转接器的输出,USB端连接pc机。这些就绪后,接上电源线待机。此时两个USB接口连着pc机,pc机的/dev/下应该至少有两个ttyUSBx(比如ttyUSB0和ttyUSB1),通过插拔USB线,可以对应好哪个线是哪个ttyUSBx,为了方便说,就假设控制输出(就是UART的线)连着ttyUSB0,而type C线连着ttyUSB1。后续步骤涉及插拔电源线,USB线则可以一直连着,不用插拔。
在pc机上使用screen监视控制输出,我本来用minicom,可是由于不太会用,导致只能看到输出而无法输入来自pc端的信息,所以最后使用了screen,命令为
1 | sudo screen /dev/ttyUSB0 115200 |
最开始要刷板子的firmware,这里的流程基本是按照github 文档。步骤是:
-
1
2$ sudo dpkg -s modemmanager
$ sudo apt-get remove modemmanager -
1
2$ git clone https://github.com/96boards-hikey/tools-images-hikey960
$ cd tools-images-hikey960 -
1
$ sudo ./recovery-flash.sh /dev/ttyUSB1
最后一步可能看到报错xloader没刷成功,这个没关系,不会影响后续步骤。
这些做完了要拔掉板子电源,将背面开关调整至fastboot模式1 ON; 2 OFF; 3 ON,然后再接入电源。
然后刷bootloader,本来文档都有链接,可是由于文档更新不及时,链接是失效的,真正的链接是这里,进去自己选release还是debug目录,下载对应目录内所有内容。下载后按以下步骤进行:
-
1
2chmod +x hikey_idt
sudo ./hikey_idt -c config -p /dev/ttyUSB1 -
1
2
3
4fastboot flash ptable prm_ptable.img
fastboot flash xloader hisi-sec_xloader.img
fastboot flash fastboot l-loader.bin
fastboot flash fip fip.bi
这些做完后再次拔出板子电源,然后保持fastboot状态再接入电源,此时控制输出监视(screen)应该可以看到启动输出很多内容,最终停在了
1 | Press ESCAPE for boot options .Android Fastboot mode - version 0.7. |
这里,这里不要按任何按键,就让它停在这里。
第三步要刷OS的映像了,从这里下载boot和rootfs开头的文件并解压。然后执行下面的命令:
-
1
fastboot devices
应该有输出,类似
1
8211F5D02876987 fastboot
-
1
2
3fastboot flash boot boot-linaro-stretch-developer-hikey-<日期>.img
fastboot flash system rootfs-linaro-stretch-developer-hikey-<日期>.img
fastboot reboot这里的日期是不同的,看你下载的文件具体名字。
这个刷完后就可以拔出电源线,将背后的开关调整至normal状态1 ON; 2 OFF; 3 OFF,再次插入电源线,此时控制输出监视就可以看到完整的OS启动过程了。至此,OS的刷写完毕。有了OS就可以自己配置一下ssh,之后的操作都可以通过主机ssh连接板子完成了,两个USB设备都可以移除了,只需要连着电源线和网线即可。
3. 安装OpenCL driver
OpenCL driver的安装是完全按照文档来的,注意虽然现在已经是2020年了,文档是2018年的内容,但是不要使用新的kernel driver代码包,它们会出问题(一些文件找不到),所以还是乖乖地使用2018年版本为好。
4. 后续
虽然OpenCL driver都装好了,但是有个问题是只有sudo才能使用,普通用户下clinfo都找不到设备的,这就带来了一些问题,比如我装个tvm的runtime,用rpc调用跑kernel,它会报错说对应设备没有,找不到mali OpenCL的内容,这个目前还没有解决…