提醒:首先确定板子的flash类型(可以给板子通电查看打印的信息,见图1。板子刚通电按下任意键进入uboot界面,如图一,显示hisilicon# 的行,表示进入成功,输入printenv可以查看已经设置的bootargs和bootcmd参数,这样可以了解到之前系统boot,kernel和rootfs分区的大小以及flash的类型,就可以提前对刷三件套有了解),海思支持三种flash(SPI nor flash,SPI nand flash,eMMC),因为每种的flash对应不同的rootfs打包类型(jffs2,yaffs2,ext4)和bootargs参数,具体可以参考《裸烧及非裸烧升级使用手册》文档介绍。其中裸烧包括uboot的烧写,非裸烧过程本身启动介质上已经烧写过uboot,不再烧写uboot。从文档中升级包参考图可以看出,rootfs文件系统在不同启动介质上的格式不同,NOR介质为jffs2,NAND介质为yaffs2,eMMC介质为ext4,而uboot和kernel在不同介质上使用相同的文件格式,但是仍然需要根据外围芯片型号和硬件电路原理图对uboot和kernel进行移植编译,需要注意kernel编译时需要开启对应的文件系统支持。
图1 开机按任意键键入uboot及开机打印的信息
通过图1可以看到板子是nand flash:型号"MX35LF2G14AC",块block size:128K,页page size:2KB,ECC:4bit/512,chip size总容量:256M。
图1.1 开机打印的bootargs和bootcmd参数
通过图1.1了解到板子bootargs参数的设置, tdparts=hinand:1M (Uboot),4M(kernel),251M(rootfs) 。uboot size:1M,kernel size:4M,rootfs size:251M,总size=1M+4M+251M=256M,和flashd size一样。在使用Hitool工具(路径:\海思sdk\Hi3516C V500R001C02SPC010\01.software\pc\HiTool)按分区烧写,uboot,kernel,rootfs的长度必须和bootargs设置的uboot,kernel,rootfs的size一样,见图1.2,Hitool工具使用见海思提供的文档:HiBurn工具使用指南(路径:HI3516DV300+IMX327\海思sdk\ReleaseDoc\zh\01.software\pc\HiTool),海思原厂提供的uboot,rootfs和kernel目录:HI3516DV300+IMX327\海思sdk\Hi3516C V500R001C02SPC010\01.software\board\Hi3516CV500_SDK_V2.0.1.0\Hi3516CV500_SDK_V2.0.1.0\hi3516dv300_spi_smp_image_glibc,下载可以使用的。不推荐使用命令烧写,HiBurn工具烧写简单不容易出错。
图1.2 红框中长度参数代表分区的大小,可以使用“-”代替剩余的长度。
每种flash对应rootfs打包格式如下图2所示:(我不确定nand flash是否能使用jffs2格式的文件,我实验是能烧写进去,但是启动时候找不到roofs,报错)
图2,每种flash对应的文件类型
每种flash对应bootargs参数写法如下图3,其中bootargs参数的boot,kernel和rootfs的每个大小要与图1.2中的boot,kernel和rootfs长度数值一致,否则使用Hiburn工具会提示烧写不成功。如果bootargs配置错误,如其中的rootfstype参数没有匹配对应的flsh类型,开机就不能识别rootfs。
图3 每种flash对应不同的bootargs和bootcnd参数配置(rootfstype参数不一样)
遇到问题多看海思提供的文档,在去网上浏览。
参考资料:
1.HiBurn工具使用指南.pdf 裸烧及非裸烧升级使用手册.pdf Hi3516C V500R001C02SPC010资料开发包
2.海思芯片系统镜像烧写教程 - 知乎
3.Hi3516A开发--根文件系统_不积跬步,无以至千里-CSDN博客