前言
Hi3559AV100 单板的 Bootloader 采用 U-boot。当选用的外围芯片的型号与单板上外围芯片的型号不同时,需要修改 U-boot 配置文件,主要包括存储器配置、 管脚复用。sdk包里有uboot的源码,可以进行修改后编译
编译 U-boot
当所有移植步骤完成后,就可以编译 U-boot,操作如下:
步骤 1 配置编译环境
当启动介质是 SPI-Nor Flash 或 SPI-NAND Flash 时, 使用配置命令:
make CROSS_COMPILE=aarch64-himix100-linux- hi3559av100_defconfig
当启动介质是并口 NAND Flash 时,使用配置命令:
make CROSS_COMPILE=aarch64-himix100-linux- hi3559av100_nand_defconfig
当启动介质是 eMMC 时, 使用配置命令:
make CROSS_COMPILE=aarch64-himix100-linux- hi3559av100_emmc_defconfig
当启动介质是 UFS 时,使用配置命令:
make CROSS_COMPILE=aarch64-himix100-linux- hi3559av100_ufs_defconfig
步骤 2 编译 U-boot
make CROSS_COMPILE=aarch64-himix100-linux- -j 20
编译成功后,将在 U-boot 目录下生成 u-boot.bin。
这一步生成的 u-boot.bin 只是一个中间件,并不是最终在单板上执行的 U-boot 镜像。!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
步骤3配置 DDR 存储器
在 Windows 下打开 SDK 中的“osdrv/tools/pc/uboot_tools/”目录下的配置表格。当选用不同的 DDR SDRAM 时,需要针对不同器件的特性,对配置工作表中的 DDR 相关标签页进行修改。
步骤4配置管脚复用
如果管脚复用有变化,还需要对配置表格中的管脚复用相关标签页进行修改。
步骤5生成最终使用的 U-boot 镜像
U-boot 镜像生成步骤如下:
步骤 1 配置表格
完成配置表格的修改后,保存表格。
步骤 2 生成临时文件
单击表格第一个标签页上的按钮【Generate reg bin file】或者使用 hiregbin 工具(详细使用方法请参考 osdrv/ tools/pc/uboot_tools/ hiregbin-v5.0.1.tgz 压缩包里的 readme 文件),生成临时文件 reg_info.bin。
欢迎使用hiregbin命令行工具!
此工具功能主要是:Hi3559芯片根据excel文件生成regbin文件。
(只支持2007版本及以上版本的xlsm格式文件,低于2007版本的格式文件需要转换成2007版本及以上版本的xlsm格式文件。)
支持Windows与Linux操作系统 .生成regbin文件功能说明
步骤如下:
(1)在命令行下,进入hiregbin所在目录;
(2)输入命令如下:
./hiregbin [excelFile] [outputFile]
excelFile、outputFile为必须参数,由用户指定。
示例:
./hiregbin ./Hi35**.xlsm ./reg.bin
(3)等待制作完成。
步骤 3 生成最终镜像
将临时文件 reg_info.bin 拷贝到 SDK 中的
“osdrv/opensource/uboot/u-boot-2016.11/”目录下, 并命名为: .reg,然后执行命令:
make CROSS_COMPILE=aarch64-himix100-linux- u-boot-z.bin
生成的 u-boot-hi3559av100.bin 才是能够在单板上运行的 uboot 镜像。
烧写U-boot
烧录时选择海思自带的HiBurn工具,详细的使用方法在文档:《HiBurn工具使用指南》
界面还是做的非常简洁明了的,简单使用下,首先需要选择正确的器件类型,比如我们在spi nand flash的硬件环境下选择了比如nor flash的器件类型会报下图器件类型的错误,并报错提醒我们更换器件类型
而大小的选择并不是实际的真实大小,因为block的原因需要是128k的整数倍
再次烧写就会提醒烧写成功了!
错误记录
根据墨菲定律,还是遇到了稀奇古怪的问题:
板子重新上电之后出现了这样一个项目场景:
u-boot启动后不论怎么敲击按键也无法进入命令行模式
pc端串口软件为:MobaXterm
原因分析:
既然串口可以正常输出打印,那么键盘的输入信息应该没有问题,而u-boot没有收到信息,那就可能:
1. pc端的串口软件没有将键盘输入发送出去(串口软件问题),可以用示波器来测量波形
2.可以确认发送端键盘输入出去了,但是传输过程中出现问题(硬件线路松动等)
3.u-boot收到了信息,但是内部发生错误导致无法进入命令行模式(配置问题)
解决方案:
最简单的肯定是先检查传输线路
再检查串口软件相关设置
MobaXterm需要展开高级设置,检查默认的配置是否正确:
突然发现Mobaxterm的流控默认是开着的,将其关闭后重新上电,
System startup 10 Uncompress Ok ! U - Boot 2016.11( Apr 26 2022 -17:30:03+0800)hi3559av100 Relocation 0ffset1s:176e9000 Relocating to Sfee9000, new gd at Sfe48e00, sp at Sfe48dfo SPI Nor : Boot Media isn ' t SPI Nor NAND : hifmc ip ver check (44): Check Flash Memory Controller v100... hifac _ ip _ ver _ check (50): SPI Nand ID Table Version 2.7 SPI Nand ( cs 0) ID : Oxet Oxba Ox21 Name :"W25N01GWZ11G* Block :128KB Page :2KB00B:64B ECC :4bit/512 Chips12e:128Mi0 MHC : In : Out : Err : Net : Error : gmaco address not set ..ghac1 Error : gmacl address not set . Hit any key to stop autoboot : hisilacon Found seraal serial serial gmaco
好吧,正常了,接下来就可以通过网线正式进行烧写了(详见海思3559平台搭建(一):简单烧写说明)