这一篇随笔讲叙述下基于Hi3559AV100的BOXER-8410AI板载u-boot、kernel及rootfs烧录具体过程及遇到问题的解决方法与心得。
1、前期板载启动测试和烧录手段
1.1、烧写方法一-利用MicroUSB接口烧录准备
烧写测试:拿到板子后,根据官方文档是通过板载中MicroUSB连接到PC端,之后进行串口通信,但是一顿操作下来之后,发现PC端没有发现com口,后面分析原因,可能是板载没有进行MicroUSB的驱动加载,导致PC端没有加载com口,具体解决方面可以参考《HiBurn工具使用指南》,个人操作如下:
文档说:单板上电时,需要进入 USB 模式,进入 USB 模式的方法请参考 SDK 包里面的文档《Hi35xxVxxx SDK 安装使用说明》,但是在安装说明中没有找到类似的地方,直接忽略即可。
结合文档:Hi3559V100芯片支持 USB 非裸烧,需要提前在 Windows 平台的 PC 机上,安装好指定的驱动,安装方法如下:由于 USB 裸烧或非裸烧,还跟板端配置及软件配合相关,实际是否支持以实际发布版本为准。
①. 从 http://zadig.akeo.ie 上下载 zadig.exe 文件,请根据自己的操作系统下载相应的
exe 执行文件,当前最新版本如下(请以实际为准):
zadig_2.3.exe
以 win7 系统下驱动安装为例(文档说win10 暂不支持,虽然说win10不支持,但其实通过实践win10也是OK的)。
②. 用 HiBurn 工具串口功能烧写 uboot,烧写完成之后,在单板的 uboot 下输入命令usb device,USB 接口与 PC 端相连,进入升级模式,PC 端设备管理器出现HiUSBBurn 设备如图1所示,此时 windows 会自动搜索驱动程序,等待 windows 搜索驱动程序搜索不到之后进行第③步。
图1 HiUSB安装图解
③. 打开 zadig_2.3.exe 文件,选择 Options->List All Devices,将 List All Devices 勾
上,如图 2所示。
图2 勾选 List All Devices
④. 在红色方框位置选择 hiUSBBurn 设备,然后方框内选择驱动 libusbK,点击“Install Driver”,如图3所示,之后点击Install Driver,等待驱动安装完成。
图3 安装 libusbK
⑤. LibusbK 安装完成之后,打开设备管理器,查看驱动是否安装正确,如图4为正确安装后的状态。
图4 驱动正确安装后的设备管理器
1.2、烧写方法二-利用Console Port接口进行烧录-推荐使用(最稳定)
拿到板子后,连接 Console Port 端口,在 putty (其他串口工具也可以)进行串口连接(通过打开设备管理器选择对应com串口),波特率设置为 115200,在接通板子电源后,putty 软件上点击连接,随后按下板子开关键,可以看到板子正在启动,最后进入到系统,不需要账号密码,在 home目录下可以进行一些脚本的测试,包括 HDMI 等的测试。(但是在测试过程中发现厂家自带的系统是没有网口驱动的,即其内核没有搭建网口驱动,因为后续的开发用到了网口,所以需要重新烧录内核)
2、Hi3559AV100 镜像烧录步骤
起初参考了厂家发来的文档《BOXER-8410AI Manual 1st Ed.pdf》(但是貌似是 hisilicon 官方提供的文档),在 P40 页 33.3 Flash Image Steps,但
是按起步骤来搞不定,主要是因为 microUSB 连接之后没有串口显示即没有 com口,在 Hitool 软件下进行烧录时,用 USB Port 模式也可以不能行,主要是 USB的驱动可能没有事先装好,可能需要事先装好 libusbK(HiUSBBurn)驱动,(但是 Hi3559AV100 只支持 USB 非裸烧,非裸烧即为不勾选 uboot,仅勾选其他分区进行烧写,此时需要保证当前单板上已经存在 uboot,烧写时工具会启动 uboot,与其交互,通过向 uboot 发送 TFTP 命令与 Write 命令,完成烧写)
--------->具体步骤见《HiBurn 工具使用指南.pdf》1、5 步骤 7 P6 页。
之后自己摸索了一下,成功进行了镜像烧录,具体的硬件连接需要将板载端Console Port 端口与 PC 相连,之后去官网下载镜像:
https://www.aaeon.com/cn/p/edge-ai-box-pc-hisilicon-hi3559a-boxer-8410ai因为板子型号为 BOXER-8410AI-A2-1010,因此选择如下:
目录如下:
之后打开 Hitool 软件,注意点如下:
但是官网给的根文件系统太大了,用串口下载大概需要 1~2 天的时间,因此根据《Hi3559A╱C V100 SDK 安装及升级使用说明.pdf》下 3.2 P7 页,参照单系统 Linux 方案烧写步骤,到虚拟机下 SDK 目录下找到发布包image_glibc_multi-core_arm64(一定注意osdrv编译时make选项选择为emmc烧录,否则无法烧录),如下图所示:
选择文件系统大小为 16.7M 的根文件系统,如下:
随后在 Hitool 界面下,点击如下图所示,更换根系统:最后在板子通电的情况下(板子上开关指示灯不亮),点击 Hitool 的烧写:
之后按下板子开关,随后 Hitool 控制台显示如下,即正在烧写。(注意:全过程不需要在板子上按 update 或者 reset 按键)
之后按下板子开关,随后 Hitool 控制台显示如下,即正在烧写。(注意:全过程不需要在板子上按 update 或者 reset 按键)
随后继续烧写镜像,等大概 40 分钟即可。
3、NFS 挂载-网口激活与启用(板载根文件为虚拟机下的根文件系统)
(即虚拟机下 16.7M 的 rootfs,ext4 格式-emmc类型)
挂载命令:
mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 192.168.43.27:/nfsroot /mnt
4、板载简单测试(板载根文件为虚拟机下的根文件系统)
(即虚拟机下 16.7M 的 rootfs,ext4 格式)
在虚拟机/nfsroot/test_hello 目录下首先编写一个简单的 hello 程序,具体
hello.c 代码如下:
并通过交叉编译器编译成可执行文件,输入如下命令:$aarch64-himix100-linux-gcc -o hello hello.c(且发现,通过交叉编译器生成的可执行文件,在虚拟机端是运行不过的,只有用 gcc 来编译才可以在虚拟机上运行,但用 gcc 编译的可执行文件,在板载端运行不了)。
之后进行验证,在虚拟机挂载好/nfsroot 目录之后,进入到/mnt/nfsroot/test_hello 目录下直接输入 $ ./hello,输出结果如下所示,是正常运行的。(其可以很好说明交叉编译链已经安装成功)
5、使用网口烧写官网给的根文件系统(速度最快效率最高)
通过上述步骤2 Hi3559AV100 镜像烧录步骤下,已经启用了网口,之后直接通过Hitool的网口下载,选择正确的板端配置IP,在Burn eMMC一栏选择对应的根文件系统,在不断电的情况下,直接点击烧录,之后开启网口的步骤和上述2一样。(因为官方给的根文件系统自带了很多驱动,省去了重新配置kernel driver menuconfig)