- Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口
- Hi3516开发笔记(三):Hi3516虚拟机基础环境搭建之交叉
- Hi3516开发笔记(七):Hi3516虚拟机交叉开发环境搭建之
- Hi3516开发笔记(八):Hi3516虚拟机交叉开发环境搭建之
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编
- Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储
- Hi3516开发笔记(四):Hi3516虚拟机编译uboot、k
- 华为海思HI3516ADMEB核心板(迈威设计)PCB文件
- Hi3516开发笔记(一):海思HI3516DV300芯片介绍,
- 大数据环境安装之虚拟机安装配置
前言
前面进行了可以传输,那么写一个简单的C程序来交叉编译并传入运行。
上一篇搭建的虚拟机环境,包含了sftp传递文件,网络能ping通,基于上一篇的虚拟机继续搭建。
查看开发板提供的引导文档,先搭建ubuntu的基础软件软件,然后再解压交叉编译器搭建交叉编译的环境。
Ubuntu一般默认为使用dash,我们要使用bash,所以如下:
sudo dpkg-reconfigure dash
弹出界面如下,我们选择“no”,不使用dash:
![](https://img.haomeiwen.com/i22295287/07ed68c3d60212fd.png)
直接复制命令行安装即可
sudo apt-get install make libc6:i386 lib32z1 lib32stdc++6zlib1g-dev libncurses5-devsudo apt-get install ncurses-term libncursesw5-dev g++u-boot-tools:i386 texinfosudo apt-get install texlive gawk libssl-dev openssl bc uuid-dev
安装完成后即可。
拿到开发板海思资料中的交叉编译器,如下图:
有点大,如下图:
![](https://img.haomeiwen.com/i22295287/a9476fa421cb311e.png)
专门在虚拟机新建work/tools目录存放,work为存放所有代码,源码,交叉编译环境等的库地址。
传递完成:
![](https://img.haomeiwen.com/i22295287/3d3fada7bd202f5a.png)
开发板厂家已经帮我们弄好了,所以解压,跑脚本即可。
开发板提供的安装脚本arm-himix200-linux.install的内容如下:
#!/bin/bashTOP_DIR=/opt/hisi-linux/x86-armif[-n"$1"]then[-d"$1"]&&TOP_DIR=$1fiTOOL_DIR=$TOP_DIR/arm-himix200-linuxTAR_BIN_DIR=$TOOL_DIR/binTOOLS_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-rfelsemkdir-pv $TOOL_DIRfiecho"Extract cross tools ...">&2tar-xf $TOOLS_PKG-C $TOP_DIR#creatlinksed-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 PATHexportPATH="$TAR_BIN_DIR:\$PATH"#EOFsource/etc/profileelseecho"skip export toolchains path">&2fitar-xzf $RUNTIME_LIB_PKG-C $TOOL_DIR根据自己的习惯,先备份,然后修改如下,主要修改的几个点如下:TOP_DIR:为工作目录TOOL_DIR:之前tool,新建一个tools存放解压安装的#!/bin/bash#TOP_DIR=/opt/hisi-linux/x86-armTOP_DIR=/home/yang/work/toolsif[-n"$1"]then[-d"$1"]&&TOP_DIR=$1fi#TOOL_DIR=$TOP_DIR/arm-himix200-linuxTOOL_DIR=$TOP_DIR/arm-himix200-linuxTAR_BIN_DIR=$TOOL_DIR/binTOOLS_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-rfelsemkdir-pv $TOOL_DIRfiecho"Extract cross tools ...">&2tar-xf $TOOLS_PKG-C $TOP_DIR#creatlinksed-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 PATHexportPATH="$TAR_BIN_DIR:\$PATH"#EOFsource/etc/profileelseecho"skip export toolchains path">&2fitar-xzf $RUNTIME_LIB_PKG-C $TOOL_DIR
根据自己的习惯,先备份,然后修改如下,主要修改的几个点如下:
TOP_DIR:为工作目录
TOOL_DIR:之前tool,新建一个tools存放解压安装的
#!/bin/bash#TOP_DIR=/opt/hisi-linux/x86-armTOP_DIR=/home/yang/work/toolsif[-n"$1"]then[-d"$1"]&&TOP_DIR=$1fi#TOOL_DIR=$TOP_DIR/arm-himix200-linuxTOOL_DIR=$TOP_DIR/arm-himix200-linuxTAR_BIN_DIR=$TOOL_DIR/binTOOLS_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-rfelsemkdir-pv $TOOL_DIRfiecho"Extract cross tools ...">&2tar-xf $TOOLS_PKG-C $TOP_DIR#creatlinksed-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 PATHexportPATH="$TAR_BIN_DIR:\$PATH"#EOFsource/etc/profileelseecho"skip export toolchains path">&2fitar-xzf $RUNTIME_LIB_PKG-C $TOOL_DIR
然后命令行安装,如下图:
![](https://img.haomeiwen.com/i22295287/59ef7b92870e9b84.png)
然后相当漫长的等待,可以看看,此处我们打发下时间,可以先继续往下看。
![](https://img.haomeiwen.com/i22295287/b666bf1f3426960e.png)
Ok了,解压完成。
交叉编译器全局引入之后,应该能调用到,实际发现arm-linux然后tab无法迁出,查看/etc/profile脚本,引入了tools/bin目录,bin目录下有对应的执行文件指向host_bin目录下,发现引入tools/arm-himix200-linux/bin无法提示出编译器,只好尝试强制引入host_bin试试,结果是可以的,如下图:
所以c++编译器好了。
将a.out使用sftp传入Hi3516:
然后使用命令运行查看结果:
查看开机启动应用,一般linux下的开机启动初始化都会放在/etc/init.d目录下,然后有一个rcS脚本,循环从S00到S99顺序执行,定位到目录查看如下:
![](https://img.haomeiwen.com/i22295287/b47a61f46706288e.png)
S00dev:看名称就知道是设备(不深究)
S01udev:看名称是设备管理器,即管理设备树(不深究)
S41dhcpcd:根据名称应该是dhcp服务(不深究)
S50sshd:是sftp,ssh等一些服务(不深究)
S80network:网络配置,配置动态地址,静态地址可以改这个脚本(不深究)
rcS:主要运行的脚本,脚本中可以做一些操作,并轮询S??*系列初始化。
改脚本只是引入了一些qt的环境变量。
![](https://img.haomeiwen.com/i22295287/95b26c2a7dd03896.png)
补充:以下是另外一个环境的qt环境变量(关于显示和触摸是和具体的驱动程序相关)
查看/usr/script/hi3516dv300.sh脚本
该基本,基本是做测试用的,定位到启动开机应用:
mount/dev/mmcblk0p4/userdata./userdata/user.conf#eth0ethernet interface configif[X$ETH0_CFG==Xstatic];then ifconfig eth0 $BOARD_IP netmask $NETMASK broadcast $BROADCASTelif[X$ETH0_CFG==Xdhcp];then:elseifconfig eth0192.168.1.120netmask255.255.255.0broadcast192.168.1.255fi#telnetdstartif[X$RUN_TELNETD==Xyes];then telnetd&fi#opensshconfigif[X$SSHD_EN!=Xyes];thenif[-e/etc/init.d/S50sshd];then mv/etc/init.d/S50sshd/etc/init.d/backup/fielseif[-e/etc/init.d/backup/S50sshd];then mv/etc/init.d/backup/S50sshd/etc/init.d/fifish/userdata/user-script.sh#mountuser partitionif[-e/dev/mmcblk0p5];then mount/dev/mmcblk0p5/userif[$?!=0];then mkfs.ext4/dev/mmcblk0p5 mount/dev/mmcblk0p5/user fifi#start_wificd/lib/ln-s libnl-genl.so.2.0.0libnl-genl.so.2ln-s libnl.so.2.0.0libnl.so.2#load3516dv300cd/usr/ko/./load3516dv300-i-sensor0 $SNS0-sensor1 $SNS1insmod/usr/ko/cfg80211.koinsmod/usr/ko/8189fs.ko#insmodtouchscreen driverif[[-n $TOUCHSCREEN]];then insmod/usr/ko/$TOUCHSCREEN lcd=$LCD debug=$TP_DEBUGfi#audioenablesh/usr/script/audio-gpio.sh#cameraenableandresetsh/usr/script/camera-gpio.sh1#lcdenableandresetsh/usr/script/lcd-gpio.sh1#lcdbacklight enable#sh/usr/script/lcd-pwm.sh1#enablecamera led#sh/usr/script/ir-led.sh1#sh/usr/script/bl-led.sh1#camerapreviewcd/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_ROTEelsecd/usr/sample/ExpertCode//usr/sample/ExpertCode/ExpertCode_Main-l $LCD-t $SNS0_TYPE-T $SNS1_TYPE&fi#disablecamera lcd backlight #sh/usr/script/camera-gpio.sh0#sh/usr/script/lcd-gpio.sh0#sh/usr/script/lcd-pwm.sh0#disablecamera led#sh/usr/script/ir-led.sh0#sh/usr/script/bl-led.sh0echo"end of hi3516dv300.sh"
开启应用如下图:
![](https://img.haomeiwen.com/i22295287/4c2b7963983f110c.png)
我们注释这一部分,重启看结果:
![](https://img.haomeiwen.com/i22295287/597e2f2f8ff57679.png)
开机后,确实没有显示。
我们打印出来,看看这句话,获取到自己跑改应用需要的一些参数,如LCD配置,-t,-T等一些参数(注意双引号)。
![](https://img.haomeiwen.com/i22295287/e619e0cb059d9fbd.png)
使用top和kill -9杀掉ExpertCode_Main进程,然后手动启动,如下图:
![](https://img.haomeiwen.com/i22295287/1ed88107b4d9c354.png)
成功跑起来应用。
上一篇:《Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输》
下一篇:《Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表》敬请期待…
网友评论