Hi3516EV200 liteOs SDK搭建

一、操作环境

PC:win10

虚拟机:Ubuntu14.04 LTS 64bit

板端:DOPI 3516EV200 (Hi3516EV200)NAND 128MB

需要liteOs SDK(Hi3516EV200_SDK_V5.0.1.1.tgz)、以及海思的开发文档。

二、在linux环境下解压sdk

tar -zxf Hi3516EV200_SDK_Vx.x.x.x.tgz

解压完毕后会有package 、scripts两个文件夹以及两个脚本:sdk.cleanup 、sdk.unpack。根据官方文档的指引《Hi3516EV200╱Hi3516EV300╱Hi3518EV300 Huawei LiteOS SDK 安装以及升级使用说明.pdf》路径:ReleaseDoc\zh\01.software\board,展开sdk:

source ./sdk.unpack

这里先确保下当前的权限为root,解压完成提示: 

Hi3516EV200 liteOs SDK搭建_第1张图片

就如图所示会出现drv 、mpp 、osal 、osdrv是个目录,至此SDK基本上已经完成解压。

三、安装交叉编译器

先对交叉编译器进行解压, tar xzf arm-himix100-linux.tgz,运行 chmod +x arm-himix100-linux.install,然后运
行./arm-himix100-linux.install 即可,执行这些需要root用户权限执行,使用前需切换为root。安装好后在/opt下:

Hi3516EV200 liteOs SDK搭建_第2张图片

海思文档里面的安装交叉编译器是安装在/opt目录下,个人习惯喜欢放在sdk的目录下,然后再创建一个脚本,每次使用sdk前都需要source下这个脚本,以使得将交叉编译链的路径添加在系统的环境变量里面,我将交叉编译器安装之后提取出来,在刚刚解压的sdk目录下创建一个文件夹专门存放这个交叉编译器。在sdk目录下创建一个tools/toolchains的目录用于存放交叉编译链,将打包好的交叉编译链放在这个文件夹内:

Hi3516EV200 liteOs SDK搭建_第3张图片

四、创建一个添加环境变量的脚本

在Android或者Tina Linux的sdk中,每次使用sdk前首先要source ./build/envsetup.sh用户初始化sdk的环境变量 ,于是便产生了一个习惯,没事使用sdk先source脚本然后再进行后续的操作。脚本的任务很明确,就是要知道我的arm-himix100-linux-一系列编译器的路径添加到系统的PATH,我们先获得脚本的路径然后再用相对路径操作:

#!/bin/bash

WORKPATH=$(pwd)
TOPDIR=$WORKPATH


COMPILER_PREFIX=$TOPDIR/tools/toolchains
if [ ! -d $COMPILER_PREFIX/hisi-linux/x86-arm/arm-himix100-linux ]; then
	echo "Failed to set arm-himix100-linux"
	return
fi

TOOLCHAINS=$COMPILER_PREFIX/hisi-linux/x86-arm/arm-himix100-linux/bin
export PATH=$TOOLCHAINS:$PATH

echo "Set environment arm-himix100-linux successfully..."

于是在每次使用sdk时source ./build/envsetup.sh, 打印Set environment arm-himix100-linux successfully...说明执行的没问题。使用arm-himix100-linux-gcc  -v便知道有没有成功添加至环境变量。

五、编译liteOs内核

Hi3516EV200可以选择从emmc启动也可以从spi设备启动(nor or nand),DOPI 3516EV200板载128MB Nand Flash,所以我们使用spi启动。

在sdk/osdrv下有两个说明文档readme_cn.txt,里面有说明怎么编译liteOs内核,文档的主要内容在:

(1)编译整个osdrv目录:
	make all

注意:由于Makefile中文件系统编译依赖组件较多,不能保证单独编译的文件系统可用,建议采用make all编译;
        但可单独编译uboot,liteos;

    可以传如下参数:
    a, BOOT_MEDIA:spi(default) or emmc
    b, CHIP:hi3516ev200(default) or hi3516ev300 or hi3518ev300
    c, 如果客户想要更换可以使用TARGET_XLSM=*.xlsm来指定所需要的u-boot表格文件

(2)清除整个osdrv目录的编译文件:
	make clean

(3)彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:
	make distclean

(4)单独编译liteos (以hi3516ev200为例):
 	cd osdrv/platform/liteos
 	tar -xf liteos.tgz
 	cd liteos/
 	cp tools/build/config/hi3516ev200_defconfig .config
 	make menuconfig (如有需要,可根据需求进行功能配置)
 	make

(5)单独编译uboot:
	注意:发布包默认按照DMEB板的配置发布,如果客户单板和DEMB板不一致,需要根据客户自己的单板环境修改uboot表格才能使用,否则可能导致uboot无法启动或者其他问题。

    待进入boot源代码目录后,执行以下操作
	make ARCH=arm CROSS_COMPILE=arm-himix100-linux- hi3516ev200_defconfig
	(emmc启动时执行如下操作:make ARCH=arm CROSS_COMPILE=arm-himix100-linux- hi3516ev200_emmc_defconfig)

	make ARCH=arm CROSS_COMPILE=arm-himix100-linux- -j 20

    make -C ../../../tools/pc/hi_gzip

    cp ../../../tools/pc/hi_gzip/bin/gzip arch/arm/cpu/armv7/hi3516ev200/hw_compressed/ -rf

    Windowns下进入到osdrv/tools/pc/uboot_tools/目录下打开对应单板的Excel文件,在main标签中点击"Generate reg bin file"按钮,生成reg_info.bin即为对应平台的表格文件。
    从osdrv/tools/pc/uboot_tools目录拷贝reg_info.bin到boot源代码目录,重命名为.reg
    cp ../../../tools/pc/uboot_tools/reg_info.bin .reg

    make ARCH=arm CROSS_COMPILE=arm-himix100-linux- u-boot-z.bin

    opensource/uboot/u-boot-2016.11下生成的u-boot-hi3516ev200.bin即为可用的u-boot镜像

我们这个是空的sdk没有编译过,所以我们选择编译全部(uboot,liteos kernel),当然编译内核需要有仪式感,我们使用一个脚本放在sdk目录下,只要运行这个脚本便可以自动编译全部。脚本很简答就是去sdk/osdrv下敲个make all,然后再指定下BOOT_MEDIA以及CHIP便可,那就创建一个脚本为make_all_spi.sh:

cd  osdrv
make all BOOT_MEDIA=spi CHIP=hi3516ev200

接着我们./make_all_spi.sh,于是一般就会出现以下错误:

Hi3516EV200 liteOs SDK搭建_第4张图片

原因是sh命令链接到的是dash,而pushd命令需要在bash的环境中执行,我们需要修改为bash,执行:

dpkg-reconfigure dash

弹出界面选择no,然后再回车,然后继续执行./make_all_spi.sh.接着不出意外,经过漫长的编译刷屏后编译完成了。生成的文件在sdk/osdrv/pub/liteos/sample.bin和sdk/osdrv/pub/boot/u-boot-hi3516ev200.bin,这个其实就是一个app加上liteos的内核,我们可以用这个测试,对应liteos的软件框架会在后续需的章节进行介绍,敬请关注。。。。。

六、编译文件系统

对于liteos版本的文件系统不像linux那样,只是通过第三方的工具来实现将某一个目录打包成一个文件系统。
对于Hi3516EV200启动的方式有spi与emmc,决定了他的文件系统格式一般是jffs2与ext4,所以我们需要第三
放的打包工具进行打包,相关工具在sdk/osdrv/readme_cn.txt有下载链接,我们是用的是spi nand,所以使用
的文件系统是jffs2,对于emmc的话需要make_ext4fs,需要的朋友可以在下评论留言,这里就不说明了。跳转到
sdk/osdrv/tools/pc/jffs2_tool,编译make,接着会有以下报错:

原因还是sdk/osdrv/tools/pc/zlib下没有库,我们进入zlib这个把目录下,有个文档,里面有个下载链接,将其下载后放在zlib目录下然后重新进入jffs2_tool下make,等待编译好,会出现两个工具:mkfs.jffs2和mkfs.ubifs用于制作两个不同类型的文件系统(jffs2与ubi),将mkfs.jffs2拷贝到sdk/osdrv/pub/tools/下,然后在pub下创建一个rootfs文件夹用于存放文件系统相关文件,在rootfs目录下创建两个文件夹bin与rootfs,前者用于存放mkfs.jffs2制作好了的文件镜像,后者用于mkfs.jffs2工具打包那个目录作为文件系统。接下来在sdk目录下出继续创建一个脚本,用于运行这个脚本就自动打包文件系统:

#!/bin/bash

./osdrv/pub/tools/mkfs.jffs2 -d osdrv/pub/rootfs/rootfs -l -e 0x10000 -o osdrv/pub/rootfs/bin/hi3516ev200_64k.jffs2

这个是mkfs.jffs2工具传参决定的,具体可以查看这个的用法;按照上述运行这个脚本会在sdk/osdrv/pub/rootfs/bin下生成
hi3516ev200_64k.jffs2这样的文件系统文件。以上创建的文件夹根据自己的情况而定,自己按照情况修改上述的脚本便可。
至此,uboot、kernel、rootfs已经编译完成,剩下烧录。

七、烧录

安装好HiTool后选择芯片选择Hi3516EV200,然后连接串口,配制表如下设置:

Hi3516EV200 liteOs SDK搭建_第5张图片

选择烧写便可以了,大小可以自己修改但是得跟uboot环境变量适配。

 由于选用的串口烧录,时间有点漫长,烧录完毕后板子会进入到uboot状态,由于没有设置从哪里引导内核,所以会一直在终端界面,所以我们要设置下启动变量:

setenv bootcmd 'sf probe 0;sf read 0x40000000 0x100000 0xa00000; go 0x40000000'
saveenv
setenv bootcmd 'nand read 0x40000000 0x100000 0xa00000; go 0x40000000'
saveenv

上面的那条是nor启动,下面的是nand启动。sf probe 0用于探测以及初始化nor flash,然后从0x100000处读取0xa00000长度,到内存的0x40000000,意思就是读取kernel(sample.bin),读取10M到内存的0x40000000位置,然后转过去。我们在uboot设置这个环境变量后便可以直接进入sample.bin,如图:


System startup

Uncompress Ok!

U-Boot 2016.11 (Jun 12 2020 - 22:49:09 +0800)hi3516ev200

Relocation Offset is: 03734000
Relocating to 43f34000, new gd at 43e93ef0, sp at 43e93ed0
SPI Nor:  Boot Media isn't SPI Nor
NAND:  hifmc_ip_ver_check(44): Check Flash Memory Controller v100 ...hifmc_ip_ver_check(50):  Found
SPI Nand ID Table Version 2.7
SPI Nand(cs 0) ID: 0xef 0xaa 0x21 Name:"W25N01GV"
Block:128KB Page:2KB OOB:64B ECC:4bit/512
Chipsize:128 MiB
MMC:
In:    serial
Out:   serial
Err:   serial
Net:   eth0
Warning: eth0 (eth0) using random MAC address - be:fa:16:59:44:05

Hit any key to stop autoboot:  0

NAND read: device 0 offset 0x100000, size 0xa00000
 10485760 bytes read: OK
## Starting application at 0x40000000 ...
********Hello Huawei LiteOS********

version : Huawei LiteOS V200R002C00SPC050B012
open-version : Huawei LiteOS 3.2.3
build data : Jun 12 2020 22:51:32

Huawei LiteOS #
************************************************************
random dev init ...

************************************************************
MMC dev init ...sd_mci_probe:1851: host1: detection is broken

************************************************************
mem dev init ...

************************************************************
porc fs init ...
Mount procfs finished.

************************************************************
spi bus init ...

************************************************************
i2c bus init ...

************************************************************
gpio init ...

************************************************************
nand init ...
Nand ID:0xEF 0xAA 0x21
Nand:"W25N01GV"
Size:128MB Block:128KB Page:2KB Oob:64B Ecc:8bit/1K
yaffs: 0 blocks to be sorted...

************************************************************
spi nor flash init ...
hifmc100_host_init(538): Warning:Flash type isn't Spi Nor!
spinor_host_init(613): Error:hifmc100 host init fail!
hifmc100_probe(125): Error:spinor host init fail!
[ERR] probing device hifmc100 with driver hifmc100 failed
[ERR] driver attach failed

************************************************************
net init ...
VPP2.0 V100R001C20 (lwIP) Jun 12 2020 22:51:01
Ethernet start.hisi_eth: User did not set phy mode, use default=mii
hisi_eth: User did not set phy addr, auto scan...
FEPHY: addr=0 ld_am=0xb, ldo_am=0x4, r_tuning=0x1d  DONE.
Detected phy addr 0, phyid: 0x20669903

Huawei LiteOS #
Huawei LiteOS #
Huawei LiteOS #
Huawei LiteOS #

至此,已经完成了启动,至于文件系统在哪呢,后续章节会分析!有问题请留言。

八、友情链接

DOPI官方群:735884031

购买链接:https://item.taobao.com/item.htm?spm=a230r.1.14.1.71ee4becDs9H02&id=618882047300&ns=1&abbucket=0#detail

 

你可能感兴趣的:(hi3516ev200)