Chap1 SDK初探

step1.1 解压<Hi3518E_SDK_V1.0.4.0.tgz>到自己的工作目录
进入解压后的目录Hi3518E_SDK_V1.0.4.0可以看到4个文件(linux下一切皆文件?)

package  scripts  sdk.cleanup  sdk.unpack目录说明:
package     :存放SDK各种压缩包的目录
scripts     :存放shell脚本的目录
sdk.cleanup : SDK清理脚本,运行后整个目录将恢复到解压后的初始状态,请注意自己的修改内容,谨慎运行
sdk.unpack  : SDK展开脚本,用以快速展开基本的SDK包

step1.2 运行./sdk.unpack解压SDK包

期间可能会有报错:
./sdk.unpack: 2: ./sdk.unpack: source: not found
./sdk.unpack: 4: ./sdk.unpack: ECHO: not found
./sdk.unpack: 6: ./sdk.unpack: WARN: not found
./sdk.unpack: 7: ./sdk.unpack: WARN: not found
./sdk.unpack: 8: ./sdk.unpack: ECHO: not found
./sdk.unpack: 20: ./sdk.unpack: ECHO: not found
./sdk.unpack: 22: ./sdk.unpack: run_command_progress_float: not found
./sdk.unpack: 24: ./sdk.unpack: ECHO: not found
./sdk.unpack: 26: ./sdk.unpack: run_command_progress_float: not found
./sdk.unpack: 37: ./sdk.unpack: ECHO: not found
./sdk.unpack: 39: ./sdk.unpack: run_command_progress_float: not found
./sdk.unpack: 42: ./sdk.unpack: ECHO: not found
./sdk.unpack: 44: ./sdk.unpack: run_command_progress_float: not found

解决方法:修改系统默认shell为bash
sudo dpkg-reconfigure dash
选择:否/no,重新运行脚本即可

运行后可以看到当前目录下的文件结构:

drv  mpp  osdrv  package  scripts  sdk.cleanup  sdk.unpack新增目录说明:
drv    :driver相关
mpp    :媒体处理软件平台(Media Process Platform)相关
osdrv  :操作系统及相关驱动<uboot, kernerl, rootfs,tools...>

Chap2.SDK整体编译

step2.1 编译链的安装与选择
    040SDK包中提供两种编译工具链 arm-hisiv300-linux 和 arm-hisiv400-linux在osdrv/opensource/toolchain目录下,其中 arm-hisiv300-linux 为基于 uclibc 的工具链, arm-hisiv400-linux 为基于 glibc 的工具链。请注意uboot,kernel,rootfs,和我们的app要统一使用某一个交叉编译链编译,不要两个编译链混用,否则系统运行的时候可能出现奇奇怪怪的错误,安装方法如下(注意,需要有sudo权限或者root权限):
    1)安装v300编译链:
       进入arm-hisiv300-linux目录,然后运行./cross.install即可。
    2)安装v400编译链:
       进入arm-hisiv400-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。
    3)生效环境变量:
       编辑 /etc/environment,在""内加入[ /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/:/opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/bin ](注意用:分隔),然后souce /etc/environment即可
    4)编译链的选取:
       由于单板资源有限,而ulibc比glibc要小很多,所以后续正常情况下选择arm-hisiv300-linux作为我的编译链

step2.2 整体编译
    进入目录<Hi3518E_SDK_V1.0.4.0/osdrv>,make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 all,整体编译。编译期间可能会遇到若干错误,关键字摘录如下:
    错误1:

Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd.a(libmtd.o): in function `dev_node2num':
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd.c:446: undefined reference to `major'
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd.c:447: undefined reference to `minor'
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd.a(libmtd.o): in function `mtd_probe_node':
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd.c:1395: undefined reference to `major'
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd.c:1396: undefined reference to `minor'
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd.a(libmtd_legacy.o): in function `legacy_get_dev_info':
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd_legacy.c:254: undefined reference to `major'
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/jffs2_tool/tmp/mtd-utils-1.5.2/lib/libmtd_legacy.c:255: undefined reference to `minor'
collect2: error: ld returned 1 exit status

错误2:

mkfs.jffs2.c:70:10: fatal error: sys/acl.h: 没有那个文件或目录

错误3:

compr_zlib.c:39:10: fatal error: zlib.h: 没有那个文件或目录

错误4:

mkfs.ubifs/mkfs.ubifs.h:46:10: fatal error: uuid/uuid.h: 没有那个文件或目录

错误5:

/usr/bin/ld: misc-utils/lslocks.o: in function `get_dev_inode':
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/cramfs_tool/tmp/util-linux-2.22-rc2/misc-utils/lslocks.c:223: undefined reference to `makedev'
/usr/bin/ld: misc-utils/lslocks.o: in function `get_fallback_filename':
Hi3518E_SDK_V1.0.4.0/osdrv/tools/pc/cramfs_tool/tmp/util-linux-2.22-rc2/misc-utils/lslocks.c:142: undefined reference to `makedev'
collect2: error: ld returned 1 exit status

错误6:其他
step2.3 错误分析及解决
    产生这些错误的原因在于我们的环境搭建不完全,无论是pc还是交叉编译链。处理方法有如下两种。
    Action1.  修改顶层Makefile:删除目标 all的依赖,hipctools hiboardtools,这样一来不再编译这些工具,可以自己安装代替,同时也需要修改Makefile中使用这些工具的地方,如:

pushd $(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x40000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_256K);popd
pushd $(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x20000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_128K);popd
pushd $(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x10000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_64K);popd
pushd $(OSDRV_DIR)/pub/bin/pc;./mkfs.ubifs -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -m 2KiB -e 126976 -o ./$(UBIFS_UBI_IMAGE_BIN) -c 256 -F;popd
pushd $(OSDRV_DIR)/pub/bin/pc;./ubinize -m 2KiB -p 128KiB -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(UBIFS_IMAGE_BIN) ubi.cfg;popd
pushd $(OSDRV_DIR)/pub/bin/pc;rm ./$(UBIFS_UBI_IMAGE_BIN) ubi.cfg -rf;popd

Action2: 给SDK打补丁。针对以上错误,我给SDK做了一份补丁,补丁脚本内容如下:

#!/bin/bash#Author:  Lucas
#Email:     lucas.ay.wu@gmail.com
#QQ:        2302457646
#Notice:
#   1. you must have runned the script [sdk.unpack] to unpack the sdk
#   2. you must have runned the script [cross.install.v300] or others to install the compiler
#   3. you may should adapt for another compiler firstly,
#       this patch is for arm-hisiv300-linux, others may be will get some errors.if [ $UID -ne 0 ]; thenecho -e "${PURPLE}\n Superuser privileges are required to run this script. ${NC}"echo -e "${PURPLE}\n e.g. \"sudo $0\" ${NC}"exit 1
fiCOMPILER_TARGET="/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr"
SDK_DIR="../Hi3518E_SDK_V1.0.4.0"MTD_UTILS_FILE="mtd-utils-1.5.2.tar.bz2"
SQUASHFS_FILE="squashfs4.2.tar.bz2"
UTILS_FILE="util-linux-2.22-rc2.tar.bz2"#patch for pc tool build
if [ -z "`dpkg -l |grep -i libacl1-dev`" ];then
sudo apt-get install  libacl1-dev
fiif [ -z "`dpkg -l |grep -i zlib1g-dev`" ];then
sudo apt install zlib1g-dev
fiif [ -z "`dpkg -l |grep -i zlib1g-dev:i386`" ];then
sudo apt install zlib1g-dev:i386
fiif [ -z "`dpkg -l |grep -i libuuid`" ];then
sudo apt-get install uuid-dev
fiecho "patch of install done..."sudo cp packages/${MTD_UTILS_FILE} ${SDK_DIR}/osdrv/tools/board/mtd-utils/
sudo cp packages/${MTD_UTILS_FILE} ${SDK_DIR}/osdrv/tools/pc/jffs2_tool/
sudo cp packages/${SQUASHFS_FILE} ${SDK_DIR}/osdrv/tools/pc/squashfs4.2/
sudo cp packages/${UTILS_FILE} ${SDK_DIR}/osdrv/tools/pc/cramfs_tool/echo "patch of replace source file done..."sed -i "s/mtd-utils-1.5.0/mtd-utils-1.5.2/g" ${SDK_DIR}/osdrv/tools/board/mtd-utils/Makefile
sed -i "s/mtd-utils-1.5.0/mtd-utils-1.5.2/g" ${SDK_DIR}/osdrv/tools/pc/jffs2_tool/Makefile#Those two lines don't work well without [ nproc=$(nproc) ] when compile sdk, such as:
#"make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 nproc=$(($(nproc)-1)) all"
#if your cpu isn't one core signle thread, it's better to use '+' instead '-' .
sed -i "s/-j 20 /-j\$(nproc) /g" `grep "\-j 20 " -rl ${SDK_DIR}`
sed -i "s/-j 16 /-j\$(nproc) /g" `grep "\-j 16 " -rl ${SDK_DIR}`
echo "patch of adapt makefile done..."#patch for board
sudo cp -rf include/* ${COMPILER_TARGET}/include/echo "patch of add include done..."#notice: libs just for arm-hisiv300-linux, if you use another compiler,
#        make sure libs are useful at first.
sudo cp -d lib/* ${COMPILER_TARGET}/lib/echo "patch of add libs done..."echo "patch for ${SDK_DIR} done... Enjoy it"

运行该补丁后再编译即可。补丁内容不再赘述。
附:完整补丁包 https://download.csdn.net/download/qq_36160497/11217057
step2.4  再编译
    打完补丁后,运行 make OSDRV_CROSS=arm-hisiv300-linux CHIP=hi3518ev200 nproc=$(($(nproc)-1)) all,耐心等待几分钟后,提示编译成功

结尾:
    经过一顿疯狂的操作后,SDK编译成功,HI3518E的开发环境算是搭建成功啦,后续可以开启海思的基本学习了,如有问题或错漏,欢迎大家留言指出,同时补丁脚本中也包含联系方式?

HI3518EV200初体验相关推荐

  1. 苹果电脑安装python3密码_mac系统安装Python3初体验

    前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...

  2. MapReduce编程初体验

    需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...

  3. 小程序 缩放_缩放流星应用程序的初体验

    小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...

  4. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...

  5. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...

  6. Windows Embedded Standard开发初体验(二)

    支持Silverlight的Windows Embedded Standard 好了,完成安装之后,我们就可以来做Windows Embedded Standard的第一个操作系统镜像了.在开始菜单中 ...

  7. 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)

    2019独角兽企业重金招聘Python工程师标准>>> 本章零基础地介绍了如何快速体验超级账本搭建的区块链网络,我们先绕过了比较复杂的初始化配置,用官方提供的fabric-sampl ...

  8. Spring环境搭建,IoC容器初体验~

    由于最近的任务是关于IoC配置文件格式的转换,所以需要从Spring的IoC容器开始学起,今天根据网上的介绍搭建了Spring环境,并对其IoC容器进行了初体验.文章中涉及到的软件以及推荐的一本关于S ...

  9. 来自新手Banana Pi香蕉派初体验

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 一段时间来对有强大的技术支持和完善的社区的Raspberry Pi很感兴趣,本想入一片学习学习,但转念一想Raspb ...

  10. 《深入理解Spark:核心思想与源码分析》——1.2节Spark初体验

    本节书摘来自华章社区<深入理解Spark:核心思想与源码分析>一书中的第1章,第1.2节Spark初体验,作者耿嘉安,更多章节内容可以访问云栖社区"华章社区"公众号查看 ...

最新文章

  1. 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
  2. 小学生python入门-小学生Python入门基础知识有哪些
  3. Spring 学习总结 使用静态工厂创建Bean
  4. 启动多线程的两种情况比较
  5. 使用Volley StringRequest Get的方式进行发票查询操作
  6. 21天让你成为Horizon View高手—Day18:Windows操作系统优化
  7. c# 中通快递对接_快递共配是什么?行业前景怎么样?
  8. 漫步微积分十九——牛顿法解方程
  9. 基于Ajax提交formdata数据、错误信息展示和局部钩子、全局钩子的校验。
  10. Wpf ListBox数据绑定实例1--绑定字典集合
  11. rsync的自动脚本实现方案(非rsyncd服务)
  12. dcdc 国产 电源芯片电路方案 选型小体积大功率高性价比推荐 不定期更新中..
  13. opencv将RGB转成YIQ
  14. VMware 虚拟机开启Ip地址自动更换解决
  15. redis链接不上,报保护模式
  16. ssh隧道-能ssh就能http和tcp,通过ssh就能访问内网web页面和数据库
  17. 第三方yum源rpmforge
  18. python pyttsx3实现文字朗读
  19. 怎样提高团队管理能力3
  20. SPM空间金字塔模型

热门文章

  1. 冥王星P的编曲日志《我们就这样溺死在漩涡里》
  2. 我的Foobar2000定制版本
  3. 计算机语言运行速度排名,2019年的编程语言排行榜你知道吗
  4. 计算机输入设备和输出设备怎么区分,输入设备和输出设备的区别
  5. 【Kubernetes 015】pod调度之Affinity亲和性
  6. 2008年国外最漂亮的50个网站欣赏
  7. 折腾6年高龄笔记本-宏碁E5-572G-57MX-加固态-解决磁盘自检-坏道
  8. Navicat的常用的使用技巧
  9. Linux led_class子系统
  10. 五万字,快速读完《图解TCP/IP》核心内容!!!(建议收藏)