一、操作环境

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,解压完成提示:

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

三、安装交叉编译器

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

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

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

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

#!/bin/bashWORKPATH=$(pwd)
TOPDIR=$WORKPATHCOMPILER_PREFIX=$TOPDIR/tools/toolchains
if [ ! -d $COMPILER_PREFIX/hisi-linux/x86-arm/arm-himix100-linux ]; thenecho "Failed to set arm-himix100-linux"return
fiTOOLCHAINS=$COMPILER_PREFIX/hisi-linux/x86-arm/arm-himix100-linux/bin
export PATH=$TOOLCHAINS:$PATHecho "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 emmcb, CHIP:hi3516ev200(default) or hi3516ev300 or hi3518ev300c, 如果客户想要更换可以使用TARGET_XLSM=*.xlsm来指定所需要的u-boot表格文件(2)清除整个osdrv目录的编译文件:make clean(3)彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:make distclean(4)单独编译liteos (以hi3516ev200为例):cd osdrv/platform/liteostar -xf liteos.tgzcd liteos/cp tools/build/config/hi3516ev200_defconfig .configmake 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 20make -C ../../../tools/pc/hi_gzipcp ../../../tools/pc/hi_gzip/bin/gzip arch/arm/cpu/armv7/hi3516ev200/hw_compressed/ -rfWindowns下进入到osdrv/tools/pc/uboot_tools/目录下打开对应单板的Excel文件,在main标签中点击"Generate reg bin file"按钮,生成reg_info.bin即为对应平台的表格文件。从osdrv/tools/pc/uboot_tools目录拷贝reg_info.bin到boot源代码目录,重命名为.regcp ../../../tools/pc/uboot_tools/reg_info.bin .regmake ARCH=arm CROSS_COMPILE=arm-himix100-linux- u-boot-z.binopensource/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,于是一般就会出现以下错误:

原因是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,然后连接串口,配制表如下设置:

选择烧写便可以了,大小可以自己修改但是得跟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 startupUncompress Ok!U-Boot 2016.11 (Jun 12 2020 - 22:49:09 +0800)hi3516ev200Relocation 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:05Hit any key to stop autoboot:  0NAND read: device 0 offset 0x100000, size 0xa0000010485760 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:32Huawei 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: 0x20669903Huawei 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 liteOs SDK搭建相关推荐

  1. Eclipse+ADT+Android SDK 搭建安卓开发环境

    2019独角兽企业重金招聘Python工程师标准>>> Eclipse+ADT+Android SDK 搭建安卓开发环境 博客分类: Android 最近刚开始接触Android(安 ...

  2. Android:Eclipse+ADT+Android SDK 搭建安卓开发环境

    Eclipse+ADT+Android SDK 搭建安卓开发环境 要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位);  eclipse-jee-luna-SR2- ...

  3. 基于Rockchip RK3588 Android12 SDK搭建自己的repo 仓库服务器

    基于Rockchip RK3588 Android12 SDK搭建自己的repo 仓库服务器 文章目录 基于Rockchip RK3588 Android12 SDK搭建自己的repo 仓库服务器 搭 ...

  4. Android sdk 搭建

    下载安装 http://pan.baidu.com/wap/share/home?uk=67915989&third=0 搭建Android环境时,无论使用的Eclipse还是Android ...

  5. 使用Senparc.Weixin SDK搭建微信公众号服务程序

    之前学过一些关于微信公众号二次开发的教程,偶然的机会接触了Senparc.Weixin SDK,确实是不错的框架,所以想着按照http://www.cnblogs.com/szw/archive/20 ...

  6. 海思3518EV300 liteos sdk编译

    本文主要是编译海思osdry目录,以及sample的编译 一.安装arm-himix100-linux交叉编译工具 1.解压arm-himix100-linux.tgz     tar -xvf ar ...

  7. 【开源项目】使用环信SDK搭建在线教学场景(含三端源码下载)

    2021年在线教育行业如火如荼,所谓人人为我,我为人人,为了方便教育行业的小伙伴们更好地使用环信SDK,我搭建了一个在线教学开源项目"环环教育",一期覆盖1对1互动教学.在线互动小 ...

  8. maemo sdk 搭建(官方转载)

    http://wiki.maemo.org/Maemo_5_Final_SDK_%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97 Maemo 5 Final SDK 安装指南 ...

  9. 51-20210316华为海思Hi3516DV300的linux系统编译2(SPI模式)

    51-20210316华为海思Hi3516DV300的linux系统编译 2021/3/16 10:42 https://xueqiu.com/7970718062/159110439 官井想开挖掘机 ...

最新文章

  1. 使用vue-cli + webpack搭建vue项目环境
  2. c++ 多个线程操作socket要同步吗_基础知识深化:NIO优化原理和Tomcat线程模型
  3. 在落雨的鼓浪屿打着伞到处走走找个地方坐坐
  4. python进行谱曲_python进行曲——迭代生成
  5. [uva11235]Frequent values(RMQ,ST,离散化)
  6. 如何分辨高仿和原装VGA线(图文教程)_对比赛打分进行现场硬件连线产品参考_[评委计分系统-双屏版]使用参考
  7. 单片机用c语言编程软件手机版,单片机C语言编程软件(mikroc pro for pic)下载 V7.1.0 官方版 - 比克尔下载...
  8. 链桨PaddleDTX系列 - xdb源码分析(一)
  9. C++中setw()函数
  10. 新零售O2O商城系统要怎么开发,这些功能都要有
  11. task manager memory meaning
  12. 12生肖年份c语言,12生肖在什么年份最好运
  13. win2003 开启显示加速
  14. 从青蒿素说一下专利与知识产权[更新]
  15. YS_20190822_图像_Matlab_04
  16. Switch开关,两边字隐藏
  17. javaweb_会话管理(sessionCookie)
  18. HW-蓝队工作流程(1)
  19. 用matlab实现运筹学最短路问题,运筹学 最短路问题.ppt
  20. 【论文笔记】A comprehensive survey on sentiment analysis: Approaches, challenges and trends(中)

热门文章

  1. 申宝市场放量了10%还是很强势
  2. 哪里可以免费下载适合Mac版苹果电脑端解压缩软件
  3. 汇编语言中常用进制数据输出的程序实现
  4. DNS服务器它到底是干啥的呢?
  5. ROS(机器人操作系统)基础:(一) Linux系统(Ubuntu)介绍及安装
  6. java计算机毕业设计智能医技预约系统源码+mysql数据库+系统+部署+lw文档
  7. 【C语言走进现实】猜凶手
  8. [网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读
  9. 你究竟该如何学习Linux系统?
  10. paho.mqtt.cpp库编译