若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/121458516
长期持续项目技术分享,Shang业Ding制Zi询博主,QQ:21497936,WX:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

海思开发专栏

上一篇:《Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输》
下一篇:《Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表》

前言

  前面进行了可以传输,那么写一个简单的C程序来交叉编译并传入运行。

虚拟机

  上一篇搭建的虚拟机环境,包含了sftp传递文件,网络能ping通,基于上一篇的虚拟机继续搭建。

海思交叉编译虚拟机搭建

  查看开发板提供的引导文档,先搭建ubuntu的基础软件软件,然后再解压交叉编译器搭建交叉编译的环境。

安装本机软件包

dash改为bash

  Ubuntu一般默认为使用dash,我们要使用bash,所以如下:

sudo dpkg-reconfigure dash

  弹出界面如下,我们选择“no”,不使用dash:
  

安装依赖包

  直接复制命令行安装即可

sudo apt-get install make libc6:i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev
sudo apt-get install ncurses-term libncursesw5-dev g++ u-boot-tools:i386 texinfo
sudo apt-get install texlive gawk libssl-dev openssl bc uuid-dev

  安装完成后即可。

安装交叉编译工具(交叉编译器)

拷贝编译工具

  拿到开发板海思资料中的交叉编译器,如下图:
  
  有点大,如下图:
  
  专门在虚拟机新建work/tools目录存放,work为存放所有代码,源码,交叉编译环境等的库地址。
  

  传递完成:
  

解压安装

  开发板厂家已经帮我们弄好了,所以解压,跑脚本即可。
  
  开发板提供的安装脚本arm-himix200-linux.install的内容如下:

#!/bin/bashTOP_DIR=/opt/hisi-linux/x86-arm
if [ -n "$1" ]
then[ -d "$1" ] && TOP_DIR=$1
fiTOOL_DIR=$TOP_DIR/arm-himix200-linux
TAR_BIN_DIR=$TOOL_DIR/bin
TOOLS_PKG="$PWD/arm-himix200-linux.tar.bz2"
RUNTIME_LIB_PKG="$PWD/runtime_glibc.tgz"set +eecho "Installing HuaWei LiteOS Linux at $TOP_DIR"mkdir -pv $TOP_DIRif [ -d $TOOL_DIR ]
thenecho "Delete exist directory..." >&2rm $TOOL_DIR -rf
elsemkdir -pv $TOOL_DIR
fiecho "Extract cross tools ..." >&2
tar -xf $TOOLS_PKG -C $TOP_DIR# creat linksed -i  '/\/arm-hisiv610-liteOS\//d' /etc/profileif [ -z "`grep "$TAR_BIN_DIR" < /etc/profile`" ] ;
thenecho "export path $TAR_BIN_DIR" >&2cat >> /etc/profile << EOF# `date`
# HuaWei LiteOS Linux, Cross-Toolchain PATH
export PATH="$TAR_BIN_DIR:\$PATH"
# EOFsource /etc/profile
elseecho "skip export toolchains path" >&2
fi
tar -xzf $RUNTIME_LIB_PKG -C $TOOL_DIR根据自己的习惯,先备份,然后修改如下,主要修改的几个点如下:
   TOP_DIR:为工作目录
   TOOL_DIR:之前tool,新建一个tools存放解压安装的
#!/bin/bash#TOP_DIR=/opt/hisi-linux/x86-arm
TOP_DIR=/home/yang/work/tools
if [ -n "$1" ]
then[ -d "$1" ] && TOP_DIR=$1
fi#TOOL_DIR=$TOP_DIR/arm-himix200-linux
TOOL_DIR=$TOP_DIR/arm-himix200-linux
TAR_BIN_DIR=$TOOL_DIR/bin
TOOLS_PKG="$PWD/arm-himix200-linux.tar.bz2"
RUNTIME_LIB_PKG="$PWD/runtime_glibc.tgz"set +eecho "Installing HuaWei LiteOS Linux at $TOP_DIR"mkdir -pv $TOP_DIRif [ -d $TOOL_DIR ]
thenecho "Delete exist directory..." >&2rm $TOOL_DIR -rf
elsemkdir -pv $TOOL_DIR
fiecho "Extract cross tools ..." >&2
tar -xf $TOOLS_PKG -C $TOP_DIR# creat linksed -i  '/\/arm-hisiv610-liteOS\//d' /etc/profileif [ -z "`grep "$TAR_BIN_DIR" < /etc/profile`" ] ;
thenecho "export path $TAR_BIN_DIR" >&2cat >> /etc/profile << EOF# `date`
# HuaWei LiteOS Linux, Cross-Toolchain PATH
export PATH="$TAR_BIN_DIR:\$PATH"
# EOFsource /etc/profile
elseecho "skip export toolchains path" >&2
fi
tar -xzf $RUNTIME_LIB_PKG -C $TOOL_DIR

  根据自己的习惯,先备份,然后修改如下,主要修改的几个点如下:

  • TOP_DIR:为工作目录
  • TOOL_DIR:之前tool,新建一个tools存放解压安装的
#!/bin/bash#TOP_DIR=/opt/hisi-linux/x86-arm
TOP_DIR=/home/yang/work/tools
if [ -n "$1" ]
then[ -d "$1" ] && TOP_DIR=$1
fi#TOOL_DIR=$TOP_DIR/arm-himix200-linux
TOOL_DIR=$TOP_DIR/arm-himix200-linux
TAR_BIN_DIR=$TOOL_DIR/bin
TOOLS_PKG="$PWD/arm-himix200-linux.tar.bz2"
RUNTIME_LIB_PKG="$PWD/runtime_glibc.tgz"set +eecho "Installing HuaWei LiteOS Linux at $TOP_DIR"mkdir -pv $TOP_DIRif [ -d $TOOL_DIR ]
thenecho "Delete exist directory..." >&2rm $TOOL_DIR -rf
elsemkdir -pv $TOOL_DIR
fiecho "Extract cross tools ..." >&2
tar -xf $TOOLS_PKG -C $TOP_DIR# creat linksed -i  '/\/arm-hisiv610-liteOS\//d' /etc/profileif [ -z "`grep "$TAR_BIN_DIR" < /etc/profile`" ] ;
thenecho "export path $TAR_BIN_DIR" >&2cat >> /etc/profile << EOF# `date`
# HuaWei LiteOS Linux, Cross-Toolchain PATH
export PATH="$TAR_BIN_DIR:\$PATH"
# EOFsource /etc/profile
elseecho "skip export toolchains path" >&2
fitar -xzf $RUNTIME_LIB_PKG -C $TOOL_DIR    

  然后命令行安装,如下图:
  
  然后相当漫长的等待,可以看看,此处我们打发下时间,可以先继续往下看。
  
  Ok了,解压完成。

测试交叉编译器

  交叉编译器全局引入之后,应该能调用到,实际发现arm-linux然后tab无法迁出,查看/etc/profile脚本,引入了tools/bin目录,bin目录下有对应的执行文件指向host_bin目录下,发现引入tools/arm-himix200-linux/bin无法提示出编译器,只好尝试强制引入host_bin试试,结果是可以的,如下图:
  

  所以c++编译器好了。

测试Demo

  
  
  将a.out使用sftp传入Hi3516:
  
然后使用命令运行查看结果:
  

定位开机启动文件

启动文件分布

  查看开机启动应用,一般linux下的开机启动初始化都会放在/etc/init.d目录下,然后有一个rcS脚本,循环从S00到S99顺序执行,定位到目录查看如下:
  

  • S00dev:看名称就知道是设备(不深究)
      
  • S01udev:看名称是设备管理器,即管理设备树(不深究)
      
  • S41dhcpcd:根据名称应该是dhcp服务(不深究)
      
  • S50sshd:是sftp,ssh等一些服务(不深究)
      
  • S80network:网络配置,配置动态地址,静态地址可以改这个脚本(不深究)
      
  • rcS:主要运行的脚本,脚本中可以做一些操作,并轮询S??*系列初始化。
      

查看/user/qt5.12/qt-env.sh

  改脚本只是引入了一些qt的环境变量。
  

补充:以下是另外一个环境的qt环境变量(关于显示和触摸是和具体的驱动程序相关)

  

查看/usr/script/hi3516dv300.sh脚本

  该基本,基本是做测试用的,定位到启动开机应用:

mount /dev/mmcblk0p4 /userdata
. /userdata/user.conf# eth0 ethernet interface config
if [ X$ETH0_CFG == Xstatic ]; thenifconfig eth0 $BOARD_IP netmask $NETMASK broadcast $BROADCAST
elif [ X$ETH0_CFG == Xdhcp ]; then:
elseifconfig eth0 192.168.1.120 netmask 255.255.255.0 broadcast 192.168.1.255
fi# telnetd start
if [ X$RUN_TELNETD == Xyes ]; thentelnetd &
fi# openssh config
if [ X$SSHD_EN != Xyes ]; thenif [ -e /etc/init.d/S50sshd ]; thenmv /etc/init.d/S50sshd /etc/init.d/backup/fi
elseif [ -e /etc/init.d/backup/S50sshd ]; thenmv /etc/init.d/backup/S50sshd /etc/init.d/fi
fish /userdata/user-script.sh# mount user partition
if [ -e /dev/mmcblk0p5 ]; thenmount /dev/mmcblk0p5 /userif [ $? != 0 ]; thenmkfs.ext4 /dev/mmcblk0p5mount /dev/mmcblk0p5 /userfi
fi# start_wifi
cd /lib/
ln -s libnl-genl.so.2.0.0 libnl-genl.so.2
ln -s libnl.so.2.0.0 libnl.so.2# load3516dv300
cd /usr/ko/
./load3516dv300 -i -sensor0 $SNS0 -sensor1 $SNS1insmod /usr/ko/cfg80211.ko
insmod /usr/ko/8189fs.ko# insmod touchscreen driver
if [[ -n $TOUCHSCREEN ]]; theninsmod /usr/ko/$TOUCHSCREEN lcd=$LCD debug=$TP_DEBUG
fi# audio enable
sh /usr/script/audio-gpio.sh
# camera enable and reset
sh /usr/script/camera-gpio.sh 1
# lcd enable and reset
sh /usr/script/lcd-gpio.sh 1
# lcd backlight enable
#sh /usr/script/lcd-pwm.sh 1# enable camera led
#sh /usr/script/ir-led.sh 1
#sh /usr/script/bl-led.sh 1# camera preview
cd /usr/sample/vio/
#if [ X$DISPLAY == X10 ] || [ X$DISPLAY == X12 ]; then
#       ./sample_vio -f $DISPLAY -t $SNS0_TYPE -T $SNS1_TYPE -l $LCD -s $SATURATION -r $SNS0_ROTATE -R $SNS1E
#elif [ X$DISPLAY == X9 ] || [ X$DISPLAY == X11 ]; then
#       ./sample_vio -f $DISPLAY -t $SNS0_TYPE -l $LCD -s $SATURATION -r $SNS0_ROTATE
#       ./sample_vio -f $DISPLAY -t $SNS0_TYPE -T $SNS1_TYPE -l $LCD -s $SATURATION -r $SNS0_ROTATE -R $SNS1E
#else
#       ./sample_vio -f $DISPLAY -t $SNS0_TYPE
#fiif [ X$DISPLAY == X11 ] || [ X$DISPLAY == X12 ]; then./sample_vio -f $DISPLAY -t $SNS0_TYPE -T $SNS1_TYPE -l $LCD -s $SATURATION -r $SNS0_ROTATE -R $SNS1_ROTE
elsecd /usr/sample/ExpertCode//usr/sample/ExpertCode/ExpertCode_Main -l $LCD -t $SNS0_TYPE -T $SNS1_TYPE &
fi# disable camera lcd backlight
#sh /usr/script/camera-gpio.sh 0
#sh /usr/script/lcd-gpio.sh 0
#sh /usr/script/lcd-pwm.sh 0# disable camera led
#sh /usr/script/ir-led.sh 0
#sh /usr/script/bl-led.sh 0echo "end of hi3516dv300.sh"

  开启应用如下图:
  

  我们注释这一部分,重启看结果:
  

  开机后,确实没有显示。
  我们打印出来,看看这句话,获取到自己跑改应用需要的一些参数,如LCD配置,-t,-T等一些参数(注意双引号)。
  
  使用top和kill -9杀掉ExpertCode_Main进程,然后手动启动,如下图:
  
  成功跑起来应用。

上一篇:《Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输》
下一篇:《Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表》

Hi3516开发笔记(三):Hi3516虚拟机基础环境搭建之交叉编译环境境搭建以及开机启动脚本分析相关推荐

  1. Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/121314575 长期持续项目技术分享,Shang业Di ...

  2. Hi3516开发笔记(一):海思HI3516DV300芯片介绍,入手开发板以及Demo测试

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/121314575 长期持续项目技术分享,Shang业Di ...

  3. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/123536470 红胖子(红模仿)的博文大全:开发技术集 ...

  4. Hi3516开发笔记(十一):通过HiTools使用网口将uboot、kernel、roofts烧写进eMMC

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128425000 红胖子(红模仿)的博文大全:开发技术集 ...

  5. JNI开发笔记(三)--JNI工程的框架分析

    JNI工程的框架分析 引 1. JNI工程的组成部分 2. 各个部分之间的关系 引 JNI开发笔记(一)–Android Studio安装与环境搭建 JNI开发笔记(二)–创建JNI基础工程并运行 1 ...

  6. (硅谷课堂项目)Java开发笔记4:前端基础知识(二)

    文章目录 (硅谷课堂项目)Java开发笔记4:前端基础知识(二) 一.NPM 1.NPM简介 1.1.什么是NPM 1.2.NPM工具的安装位置 2.使用npm管理项目 2.1.创建文件夹npm 2. ...

  7. JNI开发笔记(二)--创建JNI基础工程并运行

    创建JNI基础工程并运行 引 1. 创建JNI工程 2. 添加虚拟手机设备 3. 运行JNI基础工程 引 JNI开发笔记(一)–Android Studio安装与环境搭建 1. 创建JNI工程 And ...

  8. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  9. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己 索引缓存的故事

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

最新文章

  1. Knative 实战:如何在 Knative 中配置自定义域名及路由规则
  2. Geospark加载PostgreSQL数据库
  3. 对CSS了解-overflow:hidden
  4. router vue 动态改变url_vue动态路由
  5. 苏宁大数据怎么运营_数据驱动经营 苏宁大数据用户标签入选2019TOP100全球软件案例...
  6. linux time
  7. iview -- vue modal 显示到最顶层 层级
  8. Java 获取命令行输入数据(命令行输入,Scanner类)
  9. Python自己写模块提供调用
  10. java面向服务编程_设计面向领取驱动(DDD)的微服务
  11. 中文分词与马尔科夫模型之二:隐马尔科夫模型与维特比
  12. js 连mysql 延后_javascript – 异步并等待节点js中的MySQL调用
  13. nfine框架连接oracle,NFine快速开发框架(无后门)
  14. 现代科技概论_现代科技概论课程:科学技术史2
  15. 利用Tukey方法识别离群值
  16. 软件设计师-3.数据结构与算法基础
  17. Accelio 代码笔记
  18. linux 安装 pcre
  19. Ubuntu 22.4网易云音乐启动失败处理方法
  20. python opencv2 将两张图片合并为一张

热门文章

  1. 蓝牙模块HC-05 AT指令使用以及两个蓝牙模块的配对
  2. 在WeChat上搭建ChatGpt机器人
  3. 【北邮国院大三上】互联网协议_Internet Protocol_PART A
  4. Android ViewFliper
  5. Win7解决telnet不是内部或外部命令的方法
  6. java毕业设计_短视频分享网站
  7. java jsf_eclipse搭建JSF简单示例的教程(亲测)
  8. python pandas 在现有excel中插入新数据
  9. 代码加密:加密Java源代码,保护自己的版权!
  10. 浅谈 SIM-OTA