美文网首页
Hi3519v101烧录方法

Hi3519v101烧录方法

作者: tianxiaoMCU | 来源:发表于2019-06-27 18:50 被阅读0次

工具准备

海思芯片使用的烧录工具为HiTool,该软件及使用说明文档的存放路径在《Hi3519 V101R001 交付件清单.xlsx》里有明确的说明。

烧录文件

《Hi3519V101/Hi3516AV200 SDK 安装以及升级使用说明.txt》中有关于SDK结构的介绍,pub存放的是编译好的,开始的时候这个目录是空的,而image_*中存放的是官方编译好的,如果合适,可以直接拿来用。

Hi3519V101_SDK_Vx.x.x.x 目录结构如下:    
    |-- sdk.cleanup                 # SDK清理脚本
    |-- sdk.unpack                  # SDK展开脚本
    |-- osdrv                       # 存放操作系统及相关驱动的目录
    |   |-- opensource              # opensource源代码
    |   |   |-- busybox             # busybox源代码
    |   |   |-- kernel              # linux内核源代码
    |   |   |-- toolchain           # 交叉编译器
    |   |   |-- uboot               # uboot源代码
    |   |-- pub                     # 编译好的镜像、工具、drv驱动等
    |   |-- tools                   # linux工具源代码
    |   |-- readme_cn.txt           # osdrv使用说明(中文版)
    |   |-- readme_en.txt           # osdrv使用说明(英文版)
    |   |-- ......                  # 
    |   |-- Makefile                # osdrv Makefile
    |-- osal                        # 存放操作系统适配层的头文件和源文件的目录
    |   |-- include                 # 存放操作系统适配层的头文件的目录
    |   |-- source                  # 存放操作系统适配层的源文件的目录
    |-- package                     # 存放SDK各种压缩包的目录
    |   |-- osdrv.tgz               # linux内核/uboot/rootfs/tools源码压缩包
    |   |-- osal.tgz                # 操作系统适配层源码压缩包
    |   |-- mpp_*.tgz               # 媒体处理平台软件压缩包
    |   |-- drv.tgz                 # drv压缩包
    |   |-- image_*                 # 可供FLASH烧写的映像文件(如内核、根文件系统)和rootfs的压缩包
    |-- scripts                     # 存放shell脚本的目录
    |-- drv                         # drv目录
    |   |-- extdrv                  # 板级外围驱动源代码
    |   |-- interdrv                # mipi,rtc,cipher等驱动源代码 
    |-- mpp_single                  # 存放单核媒体处理平台的目录
    |   |-- component               # 组件源代码 
    |   |-- init                    # 内核模块的初始化源代码
    |   |-- obj                     # 内核模块的obj文件
    |   |-- include                 # 对外头文件
    |   |-- ko                      # 内核模块
    |   |-- lib                     # release版本库以及音频库
    |   |-- Makefile.param          # mpp一些全局编译选项
    |   |-- Makefile                # mpp的Makefile
    |   |-- linux.param             # mpp一些跟操作系统相关的全局编译选项
    |   |-- tools                   # 媒体处理相关工具
    |   |-- sample                  # 样例源代码
    |-- mpp_big-little              # 存放big-little双核媒体处理平台的目录

烧录说明

这里只是纯粹记录烧录的方法,所以烧录用的镜像文件直接使用image_*中官方编译的。

烧录bootloader
  • 打开HiTool工具,切换到“烧写Fastboot”选项;
  • 选择好对应的串口号;
  • Flash类型里选择“spi”,选什么类型具体看自己板子原理图或相关的说明文档来确定,我的板子用的spi flash;
  • 选择对应的u-boot-xxx.bin文件;
  • 点击烧写按钮;
  • 给板子上电,如果已经上电就先断电再重新上电;
按分区烧录
空间划分

在讲具体的分区烧录步骤前,得先搞明白"分区"这个概念。在《Hi3519V101/Hi3516AV200 SDK 安装以及升级使用说明.txt》中有个简明的示意图,这图跟在单片机里做IAP很像。flash起始处放bootloader,设备开机后先运行bootloader,然后再跳到APP里。在这里是kernel和rootfs就相当于APP了,bootloader起来后分别挂在kernel(内核)、rootfs(跟文件系统)。

        |      1M       |      3M       |      12M      |
        |---------------|---------------|---------------|
        |     boot      |     kernel    |     rootfs    |

从上面这个图引出两个问题,

  • 1)、boot、kernel和rootfs的烧录文件是什么格式?
    image_*中(下图)看到,可以很容易区分boot、kernel和rootfs的烧录文件,其中rootfs_hi3519v101_64k.jffs2中的64k是spi flash的block大小,该参数可以通过查spi flash的数据手册得到。

    而在《Hi3516AV200 Linux 开发环境用户指南.pdf》中有对于根文件系统各个格式的介绍
  • 2)、boot、kernel和rootfs的分区大小如何确定?
    根据烧录文件的大小进行划分,kernel是3030KB,小于3M,那就分配3MB。boot才291KB,却给1MB是啥意思呢,其实也没啥,就是我钱多,用得起大容量Flash,为了方便分区,干脆给个1MB。

烧录步骤
  • 选择传输方式,这里选网口,串口也可以,但是速度非常慢;
  • 选好对应的串口号(即使上一步选了网口,Fastboot也是通过串口下载的),服务器IP(就是本机的IP);
  • 配好板端配置的参数,这些参数可以进入bootloader后,通过输入printenv打印出来;
  • 新建并配置好各个分区的参数,具体的配置方法可以查看《HiBurn 工具使用指南.pdf》要注意的是,rootfs中 jffs2不是特殊的格式,因此文件系统处选择 none
  • 点击"烧写",然后给板子重新上电;
  • 烧写完成后给板子重新上电,进入bootloader设置启动参数;
    setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),3M(kernel),28M(rootfs)'
    setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
    saveenv
    reset
    

bootargs定义传递给Linux内核的命令行参数。引导内核启动后,内核会去解析该启动参数,从而保证系统的正常启动。一个个来看看:

setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),3M(kernel),28M(rootfs)'
—— mem=64M  // 分配给操作系统的内存为64M
—— console=ttyAMA0,115200       // 使用串口0作为控制台(串口设备要根据实际的设备名称来设置),波特率为115200
—— root=/dev/mtdblock2      // 指定根文件系统的位置,mtdblock2 代表mtdparts的第3分区 (第一个分区为mtdblock0)
—— rootfstype=yaffs2        // 指定根文件系统的类型,这个选项需要跟root一起配合使用,一般如果根文件系统是ext2的话,有没有这个选项是无所谓的,但是如果是jffs2,squashfs等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区。
—— rw               // linux-3.18.y kernel默认文件系统只读,需要在bootargs中加入rw选项,文件系统才可读写
—— mtdparts=hi_sfc:1M(boot),3M(kernel),28M(rootfs)  // 设置分区信息,‘hi_sfc’是mtd-id,跟具体平台的flash有关

bootcmd是启动命令,稍稍解释一下:

sf probe 0                                  /* 命令格式sf probe [[bus:]cs] [hz] [mode],按给定的总线和片选初始化 SPI-Nor flash*/ 
sf read 0x82000000 0x100000 0x300000        /* 将kernel加载到内存中(这条命令的格式是read addr offset size,从Flash的offset偏移地址处开始读取size字节的数据到SDRAM的addr地址,前面可以看到kernel的偏移和大小,和这里对应) */
bootm 0x82000000                            /* 从内存地址0x82000000启动内核, 启动前需把内核镜像uImage存放到指定的内存地址 */

相关文章

  • Hi3519v101 更改u-boot默认启动参数

    问题 在前文《Hi3519v101烧录方法》中,烧录boot之后要手动配置一下启动参数才能正确的加载kernel和...

  • Hi3519v101烧录方法

    工具准备 海思芯片使用的烧录工具为HiTool,该软件及使用说明文档的存放路径在《Hi3519 V101R001 ...

  • Hi3519v101 编译u-boot

    操作方法在《Hi3519V101/Hi3516AV200 U-boot 移植应用开发指南.pdf》中有说明,可能是...

  • Linux串口烧录ST芯片固件

    一、解压安装stm32flash 下载地址 二、使用方法 三、烧录STM32 使stm32进入串口烧录模式(BOO...

  • 树莓派重新烧录系统

    问题:......想重新烧录系统? 解答: 重新烧录系统的原因很多,在这里不做深究,只谈方法。这里说一下格式化SD...

  • ZigBee抓包指南(Silicon Labs EM3585)

    一、固件烧录 1.1 烧录环境 1.1.1 硬件环境 1.1.2 软件环境 1.2 烧录步骤 1.2.1 接线方式...

  • 常用命令汇总

    1 ubuntu adb devices下出现 解决方法如下: 2 使用fastboot烧录 system.img

  • STM32烧录方法

    STM32的学习 1:STM32F103的最小系统板的烧录程序。 需要 USBTOTTL模块 stm32f103...

  • 搭建最基本的Home assistant

    烧录系统 使用刻录工具win32diskimager 将下载的mossbian 烧录到TF卡中。 烧录完成后,插入...

  • [Research.003] Odroid XU3 Notes

    1. Flash EMMC 1.1 Ubuntu方法 下载镜像并烧录 其中sdx要用lsblk查询 1.2 Win...

网友评论

      本文标题:Hi3519v101烧录方法

      本文链接:https://www.haomeiwen.com/subject/dmuccctx.html