这一篇随笔讲叙述下基于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 按键) 

  随后继续烧写镜像,等大概 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)

Hi3559板载u-boot、kernel及rootfs烧录过程及心得的更多相关文章

  1. 实现Hi3559板载自启动网卡、NFS及Telnet服务

    实现Hi3559板载开机自启动网卡.NFS及Telnet服务通过直接在home目录下,编辑.bashrc,vi ~/.bashrc 1 ifconfig eth0 up 2 ifconfig eth0 ...

  2. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  3. Hi3559AV100-自己编译了u-boot、kernel及rootfs后,出现烧写错误或者烧写后板载无法启动的解决思路

    这篇随笔主要给出了Hi3559AV100-自己编译了u-boot.kernel及rootfs后,出现烧写错误或者烧写后板载无法启动的解决思路. 问题 (1)对于 u-boot 为官方的,kernel ...

  4. 02.将uboot,kernel,rootfs下载到开发板上

    转载,侵删 将uboot,kernel,rootfs下载到开发板上 1.为什么要下载 所谓下载,也称烧录,部署. 1.1.什么是u-boot Hi3518EV200 单板的 Bootloader 采用 ...

  5. HI3518EV200+AR0130开发板烧录uboot、kernel、rootfs及其参数配置

    分区名 分区大小 起始地址 截至地址bootloader:1M 0x00000000 0x00100000kernel: 3M 0x00100000 0x00400000rootfs: 12M 0x0 ...

  6. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统

    qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...

  7. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】

    转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...

  8. BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍

    BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍 你进入BeagleBone世界的第一步就是将它连接以得到命令提示,然后你就可以处理文件以及执行命令了.在这里,你就可以定制你 ...

  9. 在树莓派3B、Ubuntu 18.04关闭板载Wifi、蓝牙

    树莓派没有传统的BIOS设置界面,文件/boot/firmware/config.txt就相当一个BIOS设置.这里是config.txt的详细文档:https://github.com/raspbe ...

随机推荐

  1. Educational Codeforces Round 86 (Div. 2)

    比赛链接:https://codeforces.com/contest/1342 A - Road To Zero 题意 有两个非负整数 x, y 以及两种操作: 支付 a 点代价使其中一个数加一或减 ...

  2. 【uva 10570】Meeting with Aliens(算法效率--暴力+贪心)

    题意:输入1~N的一个排列,每次可以交换2个整数,问使排列变成1~N的一个环状排列所需的虽少交换次数.(3≤N≤500) 解法:(又是一道我没打代码,光想和看就花了很久时间的题~QwQ)由于n很小,可 ...

  3. 【uva 177】Paper Folding(算法效率--模拟)

    P.S.模拟真の难打,我花了近乎三小时!o(≧口≦)o 模拟题真的要思路清晰!分块调试. 题意:著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折--每次对折都是从右往左折,因此在折了很多次以后 ...

  4. python+fiddler下载vip视频 && ts视频可合并

    如果你只想在线看视频可以去看这篇博客:python实现通过指定浏览器免费观看vip视频  先看一下我们程序运行的结果 我们要解析的接口就是(就是这个"接口+视频地址"可以解析出vi ...

  5. Codeforces Round #428 (Div. 2) C. Journey (简单搜索)

    题意:给你一颗树(边是无向的),从根节点向下走,统计走到每个子节点的概率,求所有叶子节点的深度乘上概率的和. 题解:每层子节点的概率等于上一层节点的概率乘\(1\)除以这层的子节点数,所以我们用\(d ...

  6. SpringBoot整合shiro-MD5盐值加密

    为什么要进行密码加密? 在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是qaq),假如应用程序或服务器出现漏洞,数据被窃取,用户的明文密码直接被暴露给黑客.显然后果将不堪设想 ...

  7. Docker文件挂载总结

    Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker ...

  8. 一篇文章图文并茂地带你轻松实践 HTML5 history api

    HTML5 history api 前言 由于笔者在网络上没有找到比较好的关于 history api 的实践案例,有的案例过于杂乱,没有重点,有些案例只是告诉读者 api 是什么,却没告诉怎么用,本 ...

  9. C# opc 功能相关

    C# 程序里,使用 Interop.OPCAutomation.dll ,用于和opc通讯,读opc变量,写opc变量 链接: https://pan.baidu.com/s/1OpUa_Jct1gf ...

  10. SQL优化汇总

    今天面某家公司,然后问我SQL优化,感觉有点忘了,今天特此总结一下: 总结得是分两方面:索引优化和查询优化: 一. 索引优化: 1. 独立的列 在进行查询时,索引列不能是表达式的一部分,也不能是函数的 ...