环境搭建参考


1. 前言

本文提供621开发的相关方法,请根据需要进行查阅。

本文档主要适用于:

  • 技术支持工程师。

  • 软件开发工程师。


2. 板子硬件连接

电源: DC 12V,

调试串口: CON3,TTL电平,特率115200;

调试网口: CON21

片上SpiNor Jumper:SW3:2-3, SW4:1-2, SW5:1-2, JP60:1-2

片上SpiNand Jumper:SW3:1-2, SW4:1-2, SW5:1-2, JP61:1-2

图2-1


3. 准备编译环境

通常我们会以交叉编译的方式进行开发和调试,即“宿主机+目标机”的形式。而宿主机和目标机的连接我们一般采用串口连接或网络连接,如下图所示:

图3-1 交叉编译连接方式

注:可提供debug tool作用为读寄存器和烧写boot。


3.1. 安装Linux服务器

建议使用Ubuntu 16.06(64bit)。


3.2. 安装交叉编译工具

bootkernelproject统一使用一个交叉编译工具。

Glibc:arm-linux-gnueabihf-gcc 8.2.1

Uclibc:arm-buildroot-linux-uclibcgnueabihf-4.9.4-uclibc-1.0.31


4. 编译

621支持nor flash和spinand flash两种启动方式, SDK通过不同的配置文件来区分。


4.1. boot

  1. cd boot/

  2. declare -x ARCH="arm";

    declare -x CROSS_COMPILE="arm-linux-gnueabihf-" (glibc)

    declare -x CROSS_COMPILE="arm-buildroot-linux-uclibcgnueabihf-" (uclibc)

  3. NOR: make infinity2m_defconfig

    1SPINAND: make infinity2m_spinand_defconfig

  4. make clean; make

  5. Get bin from: ./u-boot.xz.img.bin(u-boot_spinand.xz.img.bin)


4.2. kernel

  1. cd kernel

  2. declare -x ARCH="arm";

    declare -x CROSS_COMPILE="arm-linux-gnueabihf-" (glibc)

    declare -x CROSS_COMPILE="arm-buildroot-linux-uclibcgnueabihf-" (uclibc)

  3. NOR: make infinity2m_ssc010a_s01a_defconfig

    SPINAND: make infinity2m_spinand_ssc010a_s01a_defconfig

  4. make clean; make

  5. Get kernel bin from arch/arm/boot/uImage.xz


4.3. Project

  1. cd project

  2. NOR: ./setup_config.sh configs/nvr/i2m/nor.clibc-squashfs.010a.128

    SPINAND: ./setup_config.sh configs/nvr/i2m/8.2.1/spinand.glibc-squashfs.010a.128

  3. make image

  4. get image from project/image/output/images


4.4. mi_demo

路径:sdk/verify/mi_demo/

编译步骤:

  1. sdk与project置于同级目录,先编译project(demo会依赖project中的lib/include)

  2. cd sdk/verify/mi_demo/

  3. source build.sh

  4. make clean; make

  5. get bin from sdk/verify/mi_demo/out/app/


5. 烧写


5.1. MBOOT烧写

适用于空机烧录,或者uboot已经损坏导致无法通过uboot升级的场合。

5.1.1. SPI-NOR FLASH烧写

SPI Norflash烧录的offset如下:

表5-1

name offset path
IPL.bin 0x0000 project\image\output\images\IPL.bin
IPL_CUST.bin 0x10000 project\image\output\images\IPL_CUST.bin
MXP_SF.bin 0x20000 project\image\output\images\MXP_SF.bin
u-boot.xz.img.bin 0x30000 project\image\output\images\u-boot.xz.img.bin
  1. 使用Mstar debug tool 连接板子,执行Flash Tool工具,关闭UART terminal;

  2. 选择“SPI”tab,点击“More”并且选择类型为“SPINOR”;

    图5-1

  3. 加载烧录文件并点击“Connect”

    图5-2

  4. 加载image“IPL.bin”,点击“Run”

    注:需要勾选“erase file area”。

    图5-3

  5. 加载 image “IPL_CUST.bin”, 取消“Erase Device”选项。设置“Base shift”at 0x10000。

    注:可能随着版本变化,Base shift的地址以表格1-3数据为准。

    图5-4

  6. 加载image“MXP_SF.bin”, 设置“Base shift”at 0x20000。

  7. 加载image “u-boot.xz.img.bin” , 设置“Base shift”at 0x30000。

  8. 重启板子即可

5.1.2. SPI-NAND FLASH烧写

烧录选择需要选择“SPINAND”然后连接。

图5-5

烧录SPINAND的方法和NOR一样,只是地址以及文件稍有差别

表5-2

Name Erase Device offset Path
GCIS.bin All Chip 0x00000 project\image\output\images\
IP.bin File Area 0x140000 project\image\output\images\
IPL_CUST.bin File Area 0x200000 project\image\output\images\
u-boot_spinand.xz.img.bin File Area 0x2C0000 project\image\output\images\

5.2. TFTP网络烧写

工具:Tools/tftpb32

  1. 使用tftp工具指向image

    路径:project\image\output\images\,并选择正确的网卡。

    图5-6

  2. 连接板子的网口到PC端,连接debug串口工具到PC端,并检查连接的正确性。进入bootloader command line.

    图5-7

  3. 网络设置,设置板子mac、ip, server ip

    确认板子网络连接正常。

    在mboot console下,依序执行以下指令,通常同一板子只需执行一次

    set –f ethaddr xx:XX:XX:xx:xx:xx

    set serverip xxx.xxx.xxx.xxx

    set ipaddr xxx.xxx.xxx.xxx

    saveenv

    estart

    图5-8

    注:

    1. 为了保证烧录顺利,请保证PC和开发板处于同一网段。

    2. 请采用静态方式固定分配ip,防止烧录时ip地址跳变。

    3. 也可以使用独立网卡使PC端直连开发板,固定该网卡的内网ip地址,并按上述方法设定开发板。

  4. 在UBOOT console下执行以下指令即可自动透过ethernet烧录。

    # estar (OR: estar auto_update.txt)
    

6. 文件交互


6.1. NFS

  1. 在pc上配置nfs server

    参考 http://www.cnblogs.com/king-77024128/articles/2666230.html

  2. 板子连上网络,配置ip(udhcpc).确认板子能ping通nfs server所在pc

  3. 在板子上运行mount 命令,命令格式如下

    mount -t nfs -o nolock
    
    $(nfs_server_IP):$(server_mount_path) $(PCB_board_local_path)
    

    图6-1


6.2. tftp

工具:Tools/tftpb32

使用tftp工具指向文件路径

Get file : tftp gr $(filename) $(serverip) b $(portid)

Put file: tftp pl $(filename) $(serverip) b $(portid)

6.3. U盘

如:mount –t vfat /dev/sda1 /mnt