当前位置:   article > 正文

Hi3516EV200 liteOs SDK搭建_makefile:13: /home/one/hi3516ev200_sdk_v1.0.1.2/os

makefile:13: /home/one/hi3516ev200_sdk_v1.0.1.2/osdrv/platform/liteos/liteos

一、操作环境

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,我们先获得脚本的路径然后再用相对路径操作:

  1. #!/bin/bash
  2. WORKPATH=$(pwd)
  3. TOPDIR=$WORKPATH
  4. COMPILER_PREFIX=$TOPDIR/tools/toolchains
  5. if [ ! -d $COMPILER_PREFIX/hisi-linux/x86-arm/arm-himix100-linux ]; then
  6. echo "Failed to set arm-himix100-linux"
  7. return
  8. fi
  9. TOOLCHAINS=$COMPILER_PREFIX/hisi-linux/x86-arm/arm-himix100-linux/bin
  10. export PATH=$TOOLCHAINS:$PATH
  11. 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. (1)编译整个osdrv目录:
  2. make all
  3. 注意:由于Makefile中文件系统编译依赖组件较多,不能保证单独编译的文件系统可用,建议采用make all编译;
  4. 但可单独编译uboot,liteos;
  5. 可以传如下参数:
  6. a, BOOT_MEDIA:spi(default) or emmc
  7. b, CHIP:hi3516ev200(default) or hi3516ev300 or hi3518ev300
  8. c, 如果客户想要更换可以使用TARGET_XLSM=*.xlsm来指定所需要的u-boot表格文件
  9. (2)清除整个osdrv目录的编译文件:
  10. make clean
  11. (3)彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:
  12. make distclean
  13. (4)单独编译liteos (以hi3516ev200为例):
  14. cd osdrv/platform/liteos
  15. tar -xf liteos.tgz
  16. cd liteos/
  17. cp tools/build/config/hi3516ev200_defconfig .config
  18. make menuconfig (如有需要,可根据需求进行功能配置)
  19. make
  20. (5)单独编译uboot:
  21. 注意:发布包默认按照DMEB板的配置发布,如果客户单板和DEMB板不一致,需要根据客户自己的单板环境修改uboot表格才能使用,否则可能导致uboot无法启动或者其他问题。
  22. 待进入boot源代码目录后,执行以下操作
  23. make ARCH=arm CROSS_COMPILE=arm-himix100-linux- hi3516ev200_defconfig
  24. (emmc启动时执行如下操作:make ARCH=arm CROSS_COMPILE=arm-himix100-linux- hi3516ev200_emmc_defconfig)
  25. make ARCH=arm CROSS_COMPILE=arm-himix100-linux- -j 20
  26. make -C ../../../tools/pc/hi_gzip
  27. cp ../../../tools/pc/hi_gzip/bin/gzip arch/arm/cpu/armv7/hi3516ev200/hw_compressed/ -rf
  28. Windowns下进入到osdrv/tools/pc/uboot_tools/目录下打开对应单板的Excel文件,在main标签中点击"Generate reg bin file"按钮,生成reg_info.bin即为对应平台的表格文件。
  29. 从osdrv/tools/pc/uboot_tools目录拷贝reg_info.bin到boot源代码目录,重命名为.reg
  30. cp ../../../tools/pc/uboot_tools/reg_info.bin .reg
  31. make ARCH=arm CROSS_COMPILE=arm-himix100-linux- u-boot-z.bin
  32. 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:

  1. cd osdrv
  2. 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目录下出继续创建一个脚本,用于运行这个脚本就自动打包文件系统:

  1. #!/bin/bash
  2. ./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状态,由于没有设置从哪里引导内核,所以会一直在终端界面,所以我们要设置下启动变量:

  1. setenv bootcmd 'sf probe 0;sf read 0x40000000 0x100000 0xa00000; go 0x40000000'
  2. saveenv
  3. setenv bootcmd 'nand read 0x40000000 0x100000 0xa00000; go 0x40000000'
  4. saveenv

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

  1. System startup
  2. Uncompress Ok!
  3. U-Boot 2016.11 (Jun 12 2020 - 22:49:09 +0800)hi3516ev200
  4. Relocation Offset is: 03734000
  5. Relocating to 43f34000, new gd at 43e93ef0, sp at 43e93ed0
  6. SPI Nor: Boot Media isn't SPI Nor
  7. NAND: hifmc_ip_ver_check(44): Check Flash Memory Controller v100 ...hifmc_ip_ver_check(50): Found
  8. SPI Nand ID Table Version 2.7
  9. SPI Nand(cs 0) ID: 0xef 0xaa 0x21 Name:"W25N01GV"
  10. Block:128KB Page:2KB OOB:64B ECC:4bit/512
  11. Chipsize:128 MiB
  12. MMC:
  13. In: serial
  14. Out: serial
  15. Err: serial
  16. Net: eth0
  17. Warning: eth0 (eth0) using random MAC address - be:fa:16:59:44:05
  18. Hit any key to stop autoboot: 0
  19. NAND read: device 0 offset 0x100000, size 0xa00000
  20. 10485760 bytes read: OK
  21. ## Starting application at 0x40000000 ...
  22. ********Hello Huawei LiteOS********
  23. version : Huawei LiteOS V200R002C00SPC050B012
  24. open-version : Huawei LiteOS 3.2.3
  25. build data : Jun 12 2020 22:51:32
  26. Huawei LiteOS #
  27. ************************************************************
  28. random dev init ...
  29. ************************************************************
  30. MMC dev init ...sd_mci_probe:1851: host1: detection is broken
  31. ************************************************************
  32. mem dev init ...
  33. ************************************************************
  34. porc fs init ...
  35. Mount procfs finished.
  36. ************************************************************
  37. spi bus init ...
  38. ************************************************************
  39. i2c bus init ...
  40. ************************************************************
  41. gpio init ...
  42. ************************************************************
  43. nand init ...
  44. Nand ID:0xEF 0xAA 0x21
  45. Nand:"W25N01GV"
  46. Size:128MB Block:128KB Page:2KB Oob:64B Ecc:8bit/1K
  47. yaffs: 0 blocks to be sorted...
  48. ************************************************************
  49. spi nor flash init ...
  50. hifmc100_host_init(538): Warning:Flash type isn't Spi Nor!
  51. spinor_host_init(613): Error:hifmc100 host init fail!
  52. hifmc100_probe(125): Error:spinor host init fail!
  53. [ERR] probing device hifmc100 with driver hifmc100 failed
  54. [ERR] driver attach failed
  55. ************************************************************
  56. net init ...
  57. VPP2.0 V100R001C20 (lwIP) Jun 12 2020 22:51:01
  58. Ethernet start.hisi_eth: User did not set phy mode, use default=mii
  59. hisi_eth: User did not set phy addr, auto scan...
  60. FEPHY: addr=0 ld_am=0xb, ldo_am=0x4, r_tuning=0x1d DONE.
  61. Detected phy addr 0, phyid: 0x20669903
  62. Huawei LiteOS #
  63. Huawei LiteOS #
  64. Huawei LiteOS #
  65. Huawei LiteOS #

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

八、友情链接

DOPI官方群:735884031

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/287268
推荐阅读
相关标签
  

闽ICP备14008679号