前言

  前面进行了可以传输,那么写一个简单的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/bash

TOP_DIR=/opt/hisi-linux/x86-arm
if [ -n "$1" ]
then
[ -d "$1" ] && TOP_DIR=$1
fi 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 +e echo "Installing HuaWei LiteOS Linux at $TOP_DIR" mkdir -pv $TOP_DIR if [ -d $TOOL_DIR ]
then
echo "Delete exist directory..." >&2
rm $TOOL_DIR -rf
else
mkdir -pv $TOOL_DIR
fi echo "Extract cross tools ..." >&2
tar -xf $TOOLS_PKG -C $TOP_DIR # creat link sed -i '/\/arm-hisiv610-liteOS\//d' /etc/profile if [ -z "`grep "$TAR_BIN_DIR" < /etc/profile`" ] ;
then
echo "export path $TAR_BIN_DIR" >&2
cat >> /etc/profile << EOF # `date`
# HuaWei LiteOS Linux, Cross-Toolchain PATH
export PATH="$TAR_BIN_DIR:\$PATH"
# EOF
source /etc/profile
else
echo "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 +e echo "Installing HuaWei LiteOS Linux at $TOP_DIR" mkdir -pv $TOP_DIR if [ -d $TOOL_DIR ]
then
echo "Delete exist directory..." >&2
rm $TOOL_DIR -rf
else
mkdir -pv $TOOL_DIR
fi echo "Extract cross tools ..." >&2
tar -xf $TOOLS_PKG -C $TOP_DIR # creat link sed -i '/\/arm-hisiv610-liteOS\//d' /etc/profile if [ -z "`grep "$TAR_BIN_DIR" < /etc/profile`" ] ;
then
echo "export path $TAR_BIN_DIR" >&2
cat >> /etc/profile << EOF # `date`
# HuaWei LiteOS Linux, Cross-Toolchain PATH
export PATH="$TAR_BIN_DIR:\$PATH"
# EOF
source /etc/profile
else
echo "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 +e echo "Installing HuaWei LiteOS Linux at $TOP_DIR" mkdir -pv $TOP_DIR if [ -d $TOOL_DIR ]
then
echo "Delete exist directory..." >&2
rm $TOOL_DIR -rf
else
mkdir -pv $TOOL_DIR
fi echo "Extract cross tools ..." >&2
tar -xf $TOOLS_PKG -C $TOP_DIR # creat link sed -i '/\/arm-hisiv610-liteOS\//d' /etc/profile if [ -z "`grep "$TAR_BIN_DIR" < /etc/profile`" ] ;
then
echo "export path $TAR_BIN_DIR" >&2
cat >> /etc/profile << EOF # `date`
# HuaWei LiteOS Linux, Cross-Toolchain PATH
export PATH="$TAR_BIN_DIR:\$PATH"
# EOF
source /etc/profile
else
echo "skip export toolchains path" >&2
fi tar -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 ]; then
ifconfig eth0 $BOARD_IP netmask $NETMASK broadcast $BROADCAST
elif [ X$ETH0_CFG == Xdhcp ]; then
:
else
ifconfig eth0 192.168.1.120 netmask 255.255.255.0 broadcast 192.168.1.255
fi # telnetd start
if [ X$RUN_TELNETD == Xyes ]; then
telnetd &
fi # openssh config
if [ X$SSHD_EN != Xyes ]; then
if [ -e /etc/init.d/S50sshd ]; then
mv /etc/init.d/S50sshd /etc/init.d/backup/
fi
else
if [ -e /etc/init.d/backup/S50sshd ]; then
mv /etc/init.d/backup/S50sshd /etc/init.d/
fi
fi sh /userdata/user-script.sh # mount user partition
if [ -e /dev/mmcblk0p5 ]; then
mount /dev/mmcblk0p5 /user
if [ $? != 0 ]; then
mkfs.ext4 /dev/mmcblk0p5
mount /dev/mmcblk0p5 /user
fi
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 $SNS1 insmod /usr/ko/cfg80211.ko
insmod /usr/ko/8189fs.ko # insmod touchscreen driver
if [[ -n $TOUCHSCREEN ]]; then
insmod /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
#fi if [ 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
else
cd /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 0 echo "end of hi3516dv300.sh"

  开启应用如下图:
  

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

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

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

  1. Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表

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

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

    前言   搭建Hi3516的基础虚拟机,为交叉编译环境搭建前期工作.后续会编译一个基本的C语言程序Demo,在HI3516上跑.   虚拟机   开发本对虚拟机做了一些基本要求,如下图:    其实重 ...

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

    前言   目前主流国产芯片为RV11XX.RK33XX.Hi35XX系列,本系列开启Hi3516系列的开发教程.   Hi3516DV300芯片介绍   Hi3516DV300为专业行Smart IP ...

  4. Hi3516开发笔记(六):通过HiTools使用USB/串口将uboot、kernel、roofts和userdata按照分区表烧写镜像

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

  5. Django开发笔记三

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.基于类的方式重写登录:views.py: from ...

  6. 【转】64位Ubuntu 16.04搭建嵌入式交叉编译环境arm-linux-gcc过程图解

    64位Ubuntu 16.04搭建嵌入式交叉编译环境arm-linux-gcc过程图解,开发裸机环境之前需要先搭建其开发环境,毕竟工欲善其事必先利其器嘛.  安装步骤 1.准备工具安装目录 下载 ar ...

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

    前言   上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤.   受限制   因为直接配置sample的vi比较麻烦 ...

  8. SDL开发笔记(二):音频基础介绍、使用SDL播放音频

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境

    搭建前须要下载的软件包(默认已搭建好cocos2d-x而且可在VS上执行,本人VS版本号为2013): 1:java 下载地址:http://www.java.com/zh_CN/download/m ...

随机推荐

  1. Azure Tips 第一期: Azure 中的安全监视工具,数据存储, 动态数据屏蔽以及资源部署

    # 1 Azure 中的安全监视工具 微软 Azure 云提供以下监控工具,可用于观察操作和检测异常行为. Azure 安全中心 Azure 安全中心是一个统一的基础结构安全管理系统,可以增强数据中心 ...

  2. CF992E Nastya and King-Shamans(线段树二分+思维)

    这是一道卡常好题 从160s卡到36s qwq 由于题目设计到原数组的单点修改,那么就对应着前缀和数组上的区间加. 很显然能想到用线段树来维护这么个东西. 那么该如果求题目要求的位置呢 我们来看这个题 ...

  3. 2021年1月-第02阶段-前端基础-HTML+CSS进阶-VS Code 软件

    软件安装 VSCode软件 能够安装 VS Code 能够熟练使用 VS Code 软件 能够安装 VS Code 最常用的插件 1. VS Code简介 1.1 VS Code 简介 Visual ...

  4. SpringBoot 01 hello world 01

    hello world项目结构: pom中配置的依赖相当于spring boot的可安装插件,需要下载的依赖直接在里边配置. 目前用到的每个注解: 1.主程序中 @SpringBootApplicat ...

  5. C/C++ 数据类型 表示最大 最小数值 探讨

    C/C++中存储数字格式有整型和浮点型 字符型数据本质上也是以整型存储 整型 对于整型数据,最大值最小值很好计算 先确定对应数据型在本地所占用的字节数,同一数据型由于系统或者编译器的不同,所占字节不同 ...

  6. Coursera Deep Learning笔记 序列模型(三)Sequence models & Attention mechanism(序列模型和注意力机制)

    参考 1. 基础模型(Basic Model) Sequence to sequence模型(Seq2Seq) 从机器翻译到语音识别方面都有着广泛的应用. 举例: 该机器翻译问题,可以使用" ...

  7. Scrum Meeting 0503

    零.说明 日期:2021-5-3 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成登录.后端管理 ...

  8. Beta阶段第六次会议

    第六次会议 时间:2020.5.22 完成工作 姓名 任务 难度 完成度 xyq 1.编写技术博客 中 90% ltx 1.编写小程序2.添加全局变量之后页面无法加载的bug 中 90% lm(迟到) ...

  9. Python课程笔记(三)

    1.python定义类.创建对象 class Myclass: # 定义Myclass类 def sum(self,x,y): self.x = x self.y = y return self.x+ ...

  10. 一文带你掌握【TCP拥塞窗口】原理

    ❝ 关注公众号:高性能架构探索.后台回复[资料],可以免费领取 ❞ 学过网络相关课程的,都知道TCP中,有两个窗口: 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小 ...