Hi3519v101烧录方法

2019-06-27  本文已影响0人  tianxiaoMCU

工具准备

海思芯片使用的烧录工具为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
按分区烧录
空间划分

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

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

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

烧录步骤

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存放到指定的内存地址 */
上一篇下一篇

猜你喜欢

热点阅读