Hikey960 OS安装及OpenCL driver安装

Posted by Sz Zheng on 2020-10-07

Hikey960 OS安装及OpenCL driver安装

Hikey960是一个非常老的板子了,实验室正好有一块,一直都没人用(因为配置起来比较麻烦,不如用TX1这种方便的板子),最近对Mali GPU感兴趣,就趁着假期看看能不能用起来。
要想用这块板子,首先得刷OS(Hikey960自带AOSP,不过安卓的OS没支持OpenCL driver,所以最好刷一个新的OS,比如Debian的,然后再装driver)。
好在由于板子够老,有足够的文档、论坛、博客讨论,只是内容比较混杂,而且中文内容更加零散,于是在这里记录一下如何刷OS和装driver(本文的本质还是搬运整理已有信息)。

参考信息源:

1. 准备

1.1 熟悉板子

additional 这块板子有一个type C接口和两个type A接口,一个HDMI输出,一个SD插槽,还有比较关键的GPIO用于控制输出。目前Debian kernel无法使用HDMI进行显示输出,所以必须从GPIO连串口进行控制输出。type C接口是刷OS时使用的接口。 additional 板子的反面有三个开关,据说更老版本的是跳片。这些开关的组合代表了板子的不同状态: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

大致流程与这里一样,只是有点细节区别。
additional
首先切断板子电源,将开关调整至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. 1
    2
    $ sudo dpkg -s modemmanager
    $ sudo apt-get remove modemmanager
  2. 1
    2
    $ git clone https://github.com/96boards-hikey/tools-images-hikey960
    $ cd tools-images-hikey960
  3. 1
    $ sudo ./recovery-flash.sh /dev/ttyUSB1

最后一步可能看到报错xloader没刷成功,这个没关系,不会影响后续步骤。

这些做完了要拔掉板子电源,将背面开关调整至fastboot模式1 ON; 2 OFF; 3 ON,然后再接入电源。
然后刷bootloader,本来文档都有链接,可是由于文档更新不及时,链接是失效的,真正的链接是这里,进去自己选release还是debug目录,下载对应目录内所有内容。下载后按以下步骤进行:

  1. 1
    2
    chmod +x hikey_idt
    sudo ./hikey_idt -c config -p /dev/ttyUSB1
  2. 1
    2
    3
    4
    fastboot 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
2
Press ESCAPE for boot options .Android Fastboot mode - version 0.7.
Press RETURN or SPACE key to quit.

这里,这里不要按任何按键,就让它停在这里。

第三步要刷OS的映像了,从这里下载boot和rootfs开头的文件并解压。然后执行下面的命令:

  1. 1
    fastboot devices

    应该有输出,类似

    1
    8211F5D02876987 fastboot
  2. 1
    2
    3
    fastboot 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的内容,这个目前还没有解决…