【北京迅为】iTOP-4412全能版使用手册-第九十七章 QtE4.7应用开发

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、陀螺仪、CAN总线、RS485总线、500万摄像头等模块,稳定运行Android 4.0.3/Android 4.4操作,系统通用Linux-3.0.15+Qt操作系统(QT支持5.7版本),Ubuntu版本:12.04,接口智能分配 方便好用。

【交流群2】258811263(获取开源资料)

【迅为B站】北京迅为电子的个人空间-北京迅为电子个人主页-哔哩哔哩视频


第十部分 Qt开发专题

第九十七章 QtE4.7应用开发

97.1 QtE4鼠标和触摸修改

如下图,打开“etc/init.d/rcS”文件,将最后一行修改为“/bin/qt4.shell &”,这样在开机之后系统会运行 qt4.shell 程序。修改完成之后,保存退出。

 

然后使用命令“#cp -r bin/qt4 bin/qt4.shell”将“bin/qt4”文件拷贝生成“bin/qt4.shell”文件,如下图所示。 

然后打开“bin/qt4.shell”文件,如下图所示。

代码“export TSLIB_ROOT=/usr/local/tslib”等调用了触摸和鼠标驱动。

代码“export QTDIR=/opt/qt-4.7.1/”调用了 QtE 的库。

如下图所示,这一段关于鼠标的驱动已经被注释掉了。

 

将上图中与触摸鼠标相关代码修改为下面的代码。 

if [! -c /dev/input/event2 ]; then
export QWS_MOUSE_PROTO='Tslib:/dev/input/event2'
#if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then 
if [ -e /etc/pointercal ] ; then
fsize=$(/bin/ls -al /etc/pointercal | cut -d' ' -f 23) 
echo $fsize
#if [ -s /etc/pointercal ]; then 
if [ $fsize -ge "1" ]; then
echo "/etc/pointercal is exit"
else
echo "/etc/pointercal is empty"
rm /etc/pointercal
/usr/local/tslib/bin/ts_calibrate
fi
else
echo "/etc/pointercal not found"
/usr/local/tslib/bin/ts_calibrate 
fi
else
export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice" 
#>/etc/pointercal
fi

#export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE}"
#/usr/local/tslib/bin/ts_calibrate

上面代码第一行,有“!”则支持鼠标;触摸应该不能正常使用。

如果去掉“!”则支持触摸。需要先校准,使用上面这段代码只用校准一次即可,不用每次都校验。

另外如果用户在第一次校准的时候,没有依次点击“十字框”,则触摸文件可能有问题, 那么可以删除掉“/etc/point*”文件,重启开发板再次校准。

修改这段代码之后,最好删除一下“/etc/point*”文件。例如,如果用户刚开始使用的是触摸,然后改成鼠标控制,因为已经存在“/etc/point*”文件,所以会让人感觉鼠标可以使用,触摸能够使用但是有问题,这个时候删除“/etc/point*”文件重启即可。

97.2 字体大小控制

打开开发板文件系统的bin/qt4,如下图所示,接着找到控制字体的参数。

如上图,将下面三行删除,避免字体太大导致显示不正常。

*)

export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"

;;

97.3 支持中文字体

文档全称是“iTOP-4412-QtE 系统源码-支持中文字体”,文档介绍了 QtE4.7 系统对中文字体的支持。

Qt4.7.1 默认没有中文字体库,迅为给用户提供“文泉驿”字体和配置方法。用一个简单测试程序说明“文泉驿”字体的配置方法。

在 Qt Creater 新建工程“nihao”,“nihao.ui”中输入中文字体如下图。

 

在主函数“main.cpp”添加如下代码。 

编译成功后拷贝到开发板待用。

将文件“wenquanyi_160_75.qpf”拷贝到开发板“/opt/qt-4.7.1/lib/fonts”,如下图。

 

输入命令“nihao -qws”效果如下图。 

160 代表 16 号字体,75 代表粗体。若需要其它字号可自行设置原理同上。也可以使用第二种方法:

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")) ;

app.setFont(QFont("wenquanyi", 12));

97.4 删除QtE4.7默认启动程序

如下图所示,打开开发板文件系统的bin/qt4,找到最后一行,红色框里的命令默认会启动 QtE 自带的例程,删除红色框中的代码即可删掉默认启动程序。

 

97.5 QtE4.7屏幕翻转

如下图,打开开发板文件系统的bin/qt4,找到控制屏幕翻转角度的参数

 

export QWS_DISPLAY=Transformed:Rot0

修改为:

export QWS_DISPLAY=Transformed:Rot90

然后重新启动开发板,开发板起来后会发现屏幕产生了 90 度旋转。

 

97.6 下载Qt Creator

这一节不会涉及到代码,从 Qt 和 Qt Creator 的下载与安装介绍,开始学习 Qt。迅为电子通过提供给用户的开发平台是 Ubuntu12.04.2,所以下面主要讲解 Ubuntu 版本的 Qt Creator。

为了避免由于开发环境的版本差异导致的不必要的问题,推荐用户下载和使用手册中安装的相同版本“qtcreator-3.2.2”。用户有两种方式可以下载。这里需要注意的是,如果用户想要在上位机上调试,则需要下载对应环境的插件。我们网盘提供的是“qt-opensource-linux- x64-android-5.3.2.run”,里面包含了在 Ubuntu 中运行的插件,也就是编译出来的应用程序,可以在 Ubuntu12.04.2 中运行。然后经过简单的移植,就可以在开发板上运行。

网盘下载

一种方法,在百度网盘“iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412 开发板搭建编译环境所需要的工具包以及补丁包\07-Qt_Creator”中下载文件夹“QtE_IDE3.2.2”。该文件夹中有“qt-opensource- linux-x64-android-5.3.2.zip”,经过测试,可以在 Ubuntu12.04.2 中正常运行。

官网下载

另外一种方法,去官网下载。下载载地址“http://qt-project.org/downloads#qt- creator”。下面先介绍一下,如何使用官网链接下载。使用 Ubuntu 的浏览器登录上面的下载地址

 进入如下图所示页面,选择在线自动安装。也可以选择 Qt Offline Installers,把安装软件下载后,就和网盘下载的安装方法一模一样了。

 如下图,下载完毕,查看下载后文件存储的路径。

 如下图,在目录“topeet/Downloads”下。如果离线安装,软件的大小应该不止22MB。

 

97.7 安装Qt Creator

下面介绍一下 Qt Creator 的安装。

这里需要注意的是,本小节介绍的是离线安装的方法。由于外网不太稳定,不推荐在线安装。

如下图,打开终端,进入“/home/topeet/Downloads”目录。注意,这里是以笔者的系统为例,把“qt-opensource-linux-x64-android-5.3.2.run”放在“/home/topeet/Downloads”目录了。

修改该文件的权限“chmod 777 qt-opensource-linux-x64-android-5.3.2.run”。 

运行该程序“./qt-opensource-linux-x64-android-5.3.2.run”。

 出现安装向导,单击“Next”,继续。

 如下图,安装目录,选择默认“/opt/Qt5.3.2”即可。单击“Next”,继续。

 如下图,安装了 Qt5.3 的插件和 Qt Creator,单击“Next”,继续。需要注意的是,我们在这里安装了 Qt5.3 的插件,仅仅是能够支持后面的应用程序在 PC 机上运行,而不是在开发板上运行。在开发板上运行的 Qt 版本是 Qt/E4.7.1,这里大家要注意区分。

 如下图,接收安装协议。单击“Next”,继续安装。

 如下图,单击“Install”,继续安装。

如下图,安装中。 

 如下图,单击“Finish”,安装完成。

 如下图,会弹出警告和报错,直接忽略。使用“Ctrl+d”退出。

 然后进入“/opt/Qt5.3.2”目录,如下图。

 如下图,避免麻烦,直接使用命令“chmod 777 *”改权限。

 如下图,使用命令“cd Tools/QtCreator/bin/”,可以看到“Qt Creator”软件。

 如下图,运行编译软件,使用命令“./qtcreator”。

 如下图所示,弹出编译环境。

 如下图,打开终端,可以看到报错和警告。一个错误是因为,作者使用了“root”用户,从这一点看来,“诺基亚”的软件也是很严谨的,如果使用一般用户运行软件,就没有问题;还有一个错误,是某个守护进程没有打开,也是不用管的。

 接着,回到 Qt Creator,配置编译器等,打开菜单“Tools”→“Options”,如下图所示。

 

如上图,迅为电子提供的安装包已经子自带了 Ubuntu 的 Kits,只需要开发环境处于默认的状态,编译出来的应用程序,就可以在 Ubuntu 上运行。

97.8 在PC机的Ubuntu上运行Qt程序

本小节介绍一下如何在 Ubuntu 运行 helloworld 例程。

如下图,新建一个 helloworld 工程。

如下图所示。 

如下图所示,工程命名为“helloworld”,重新定义了工程存储目录(用户根据个人习惯设置工程目录)。然后单击“Next”,继续。 

 如下图,选择支持 Ubuntu 的 GCC 64 位编译器。单击“Next”,继续。

 如下图,默认即可。单击“Next”,继续。

 如下图,默认即可。单击“Finish”,结束。

 如下图,新建工程完成。

 如下图,单击窗口左边的“Design”。

 如下图,使用 Label,给 Qt 的应用的图形添加 helloworld 显示。然后保存工程。

 选择左边菜单“Edit”,选择“helloworld”,如下图。

 如下图,编译调试运行。在上方的菜单有“Build”,里面有“Build All”“Run”等, 用户也可以使用左下角的“三角”按钮进行编译运行。

 如下图,进入终端,查看一下在 Ubuntu 上运行的 Qt 应用程序。

 如下图,运行 Qt 应用 helloworld。使用命令“./helloworld”运行。

97.9 在iTOP-4412上运行QT程序

QtE 的应用移植所使用的 qmake,必须是先前编译 QtE源码生成的,参考前面第十五章。

接上一小节,如下图,有两个文件夹,一个是直接在 PC 上运行的代码以及应用程序,另外一个是源码。现在进入源码文件夹。

 

进行下面几步,就容易理解“为什么 Qt 跨平台非常方便”。这个‘helloworld’应用相当于已经在 PC 机上调试通过了,现在我们只需要做简单的几步就可以将其移植到开发板 4412 平台上。

交叉编译:

 

如下图,在第七章中我们编译生成了“/opt/qt-4.7.1/”,这个文件夹包含了移植所需要的最重要的工具 qmake。进入“/opt/qt-4.7.1/bin”,可以看到 qmake 文件。 

查看了 Qt/E4.7.1 的 qmake 之后,再进入 helloworld 的源码文件夹,如下图所示。 

 

然后,在该文件夹中运行 qmake “/opt/qt-4.7.1/bin/qmake”,如下图所示。 

 

如下图,多了一个 Makefile 文件。 

 

然后,执行编译命令“make”,如下图所示。 

 

生成了“helloworld”。 

 

然后,使用 file 命令测试一下。如下图,“#file helloworld”,可以看到 helloworld 应用文件的基本信息,它是属于 ARM 平台的。 

 

然后,测试一下 X86 上位机平台的文件,如下图所示,可以观察到明显的不同。 

 

安装运行:

下面介绍一下如何在开发板上运行‘helloworld’。

这里我们需要用到 U 盘或者 TF 卡来上传文件。在开发板运行了 Linux-QT 系统之后(就是烧写运行了光盘“04_镜像_QT 文件系统”中的镜像),在超级终端中完成以下步骤。

U 盘挂载,如果使用的是 U 盘,可以新建一个目录。使用靠近 tf 卡座的 USB 接口。在

/mnt 目录中,新建目录"/usb1"。然后使用挂载命令“mount /dev/udisk /mnt/usb1/” tf 卡挂载。tf 卡插入后,可以发现“/dev”目录下,多了“mmcblk1p1”,挂载命令“mount /dev/mmcblk1p1 /mnt/disk/”。

挂载完成后,以 TF 卡为例,在超级终端中,进入“/mnt/disk”目录,如下图红色框中的内容,下图中其它部分和本小节无关,是作者的 TF 卡中的其它文件,直接无视。

 

然后,如下图所示,在超级终端中,先修改权限“chmod 777 helloworld”,然后再运行“./helloworld -qws”。 

 

97.10 Qt creator直接编译ARM架构程序

除了通过命令行的操作来编译在 iTOP-4412 开发板上运行的程序,还可以直接在 qtcreator 上设置,然后每次编译的程序都可以在开发板上运行。

如下图所示,打开 qtcreater 如下图操作。

 

添加 GCC 编译器,如下图所示。 

添加编译器路径,点击 apply 如下图。 

 

选择 Qt 版本,如下图。 

 

选择 qt4.7.1 的 qmake 路径点击 apply,如下图。 

 

选择构建套件,如下图。 

 

配置 QT4.7.1 信息,如下图。 

 

到此配置完成,下面举例。新建工程,如下图选择 Qt4.7.1。 

 

编译若提示 Failed to start program. Path or permissions wrong?,忽略即可 

 

点击界面上的 Run 开始编译,生成的可执行文件为 ARM 架构可直接拷贝到开发板运行。

97.11 QtE4.7测试例程

QtE 测试程序在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)/QtE4.7 测试程序”目录下。

注意:本小节只是列出了其中部分测试程序,剩余部分测试方法类似。另外,部分测试程序需要驱动的支持,请注意下载的测试包中是否有内核驱动的源码,如果有则可能需要按照里面的文档添加对应驱动。

本节没有列出的测试程序还有:

iTOP-4412-QtE4.7-计算器_V1.0.zip”、

iTOP-4412-QtE4.7-日历_V1.0.zip”、

iTOP-4412-QtE4.7-时钟_V1.0.zip”、

iTOP-4412-QtE4.7-文本_V1.0.zip”、

iTOP-4412-QtE4.7-相册_V1.0.zip”、

iTOP-4412-QtE4.7-游戏_V1.0.zip

iTOP-4412-QtE4.7-rtc 实时时钟测试例程_V1.0.zip”等等,这部分可以直接在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)/QtE4.7 测试程序”目录下找到,测试方法与下面章节介绍的测试方法类似。

测试程序源码可通过“Qt Creator”软件加载调试,使用此软件可能会遇到两个问题请参考本章前几小节。

97.11.1 测试例程的编译和运行

本节所有的测试程序都是在迅为提供的 QT 版本 4.7.1 环境下编译并运行的。如果用户的QT 非此版本,程序移植请参考 90.4 小节。

97.11.2 Led灯的测试

配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-LED小灯_V1.0.zip”目录下。

在超级终端输入命令“vi etc/init.d/rcS”切换成 qtopia 启动,如下图。

 

重新启动之后,在超级终端中使用命令“mknod /dev/sda1 b 8 1”创建 U 盘的设备节点。 

 

如下图,使用命令“mount /dev/sda1 /mnt/udisk/”挂载 U 盘。 

 

如下图,修改测试程序的权限。在超级终端中,输入修改权限命令“chmod 777 leds” 

 

在超级终端中,输入运行命令“leds -qws”,如下图。 

 

运行结果如下图,通过 LED1、LED2 可控制开发板 led 灯的亮灭。

97.11.3 Buzzer蜂鸣器的测试

配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-buzzer蜂鸣器_V1.0.zip”目录下。

如下图,修改测试程序的权限。在超级终端中,输入修改权限命令“chmod 777 buzzer”,输入运行命令“buzzer -qws”。

 

运行结果如下图,通过 BUZZER 可控制开发板的蜂鸣器开和关。 

 

97.11.4 ADC数模转换的测试

配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-AD模数转换_V1.0.zip”目录下。

如下图,修改测试程序的权限。在超级终端中,输入修改权限命令“chmod 777 adc”, 输入运行命令“adc -qws”。

 

测试结果如下图:取到滑动变阻器的数值为 3463 欧姆。旋转滑动变阻器电阻值会随之改变。 

 

97.11.5 串口的测试

在网盘“iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7测试程序\iTOP-4412-QtE4.7-UART串口测试例程_V1.0.zip” 目录下可找到配套资料。

修改测试程序的权限。在超级终端中,输入修改权限命令“chmod 777 uart”,输入运行命令“uart -qws”。打开串口调试软件 sscom4.2,设置串口号、波特率如下图。

 

点击发送,开发板会接收到发来的信息如下图。开发板上传信息同理。

 

97.11.6 Qt Creator编译注意事项

用“Qt Creator3.2.2”打开“qt4.7.1”环境下的工程文件可能会提示版本太旧、环境不匹配导致程序无法编译,解决办法:建立新的工程把测试程序代码粘贴上去即可(界面需要自己添加)。

在编译部分测试程序如“uart”时,点击左下角 Run 会报错,如下图。

 

而 build 编译会显示成功,如下图。 

 

在 ubuntu 环境下没有串口端口,也没有这个设备节点,所以程序编译成功,而运行会报错。可忽略此报错,直接进行下一步程序移植。

97.11.7 RS485测试程序

配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-485测试程序_V1.0.zip”目录下。

485 模块测试需要发送端和接收端。

485 测试例程界面如下所示。

 

97.11.8 QtE的USB键盘支持

配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-USB键盘支持_V1.0.zip”目录下。

下面给大家简单介绍一下 QtE 支持 USB 键盘的库文件配置。 如下图,进入 QtE4.7 的库文件源码目录。

 

使用“vim build-all”命令打开“build-all”文件,在“./configure”后面的配置中加上“-qt-kbd-linuxinput”,位置如下图所示。 

 

保存退出,然后参考 14.2 小节编译生成 system.img 烧写到开发板。打开启动脚本“vim /etc/init.d/rcS”,将启动方式修改为“/bin/qt4 &”如下图。 

 

打开“bin/qt4”文件,将 KEYBOARD 这一行修改为“export QWS_KEYBOARD= "USB:/dev/input/event4"”如下图。(或者 event3 等,具体情况看自己开发板) 

 

保存退出,重启开发板。

若需要自己编译的程序支持 USB 键盘,需要修改“/bin/qt4”脚本,最后两行,如下图。cd 进入程序目录,./ -qws 运行程序。保存退出,重启开发板,开机会自启动该程序。

 

97.11.9 PWM蜂鸣器

QtE PWM 例程需要先将驱动替换,然后运行例程。本小节用到的源码全称是“iTOP- 4412-QtE4.7-PWM 蜂鸣器_V1.0.zip”。配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-PWM蜂鸣器_V1.0.zip”目录下。

97.11.10 定时器测试程序

本小节用到的源码全称是“iTOP-4412-QtE4.7-定时器_V1.0.rar”。配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-定时器_V1.0.zip”目录下。

 

97.11.11 看门狗测试程序

QtE 看门狗例程需要更新驱动,然后运行例程。

本小节用到的驱动以及应用源码全称是“iTOP-4412-QtE4.7-看门狗_V1.0.zip”。请注意参考独立文“iTOP-4412-QtE-看门狗 watchdog 测试例程_V1.1”。配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-看门狗_V1.0.zip”目录下。

97.11.12 QtE TcpSocket通信

配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-TCPsocket通信_V1.0.zip”目录下。

Socket 通信首先要确保通信的两端网络能够通过 Ping 测试。

Socket 通信应用源码请参考“iTOP-4412-QtE4.7-TCPsocket 通信_V1.0.zip”。

测试方法一:两块开发板通信

测试程序是基于 TCP 的 socket 通信程序,该测试程序用两块 iTop-4412 开发板进行通信,也可以用 Ubuntu 和开发板进行通信,操作步骤和原理同上。

使用命令“vi etc/eth0-setting”可以将两块开发板的 IP 地址改为“192.168.0.30”和“192.168.0.31”.用一根网线将两块 4412 开发板连起来。

IP 地址为“192.168.0.31”作为服务器,运行 QT socket 通信测试程序“NetworkTcp”,点击启动服务器,如下图所示。

 

另一块开发板同样运行测试程序“NetworkTcp”,输入端口号和对方 IP 地址,点击连接服务器,如下图所示。 

 

作为服务器端的开发板点击发送按钮,客户端就会收到来自服务端的打印信息,如下图。 

 

方法二:开发板和 PC 机通信,基于 wifi(或者以太网)的 socket 通信。

PC 端的 Ubuntu 运行“build-NetworkTcp-Desktop_Qt_5_3_GCC_64bit-Debug”下的测试程序,如下图。

 

下面步骤同方法一。 

97.11.13 热拔插

一、添加对热插拔事件响应,实现 U 盘自动挂载与卸载

(1)创建 mdev.conf 文件:

vi /etc/mdev.conf

在最后一行写入(注意有空格):

sd[a-z][0-9] 	0:0 666 	@/etc/hotplug/usb/udisk_insert
sd[a-z] 		0:0 666 	$/etc/hotplug/usb/udisk_remove

并注释掉下图中的内容

 

(2)创建 udisk_insert 文件

mkdir -p /etc/hotplug/usb

vi /etc/hotplug/usb/udisk_insert

写入:

#!/bin/sh

echo "usbdisk insert!" > /dev/console
if [ -e "/dev/$MDEV" ] ; then
mkdir -p /mnt/usbdisk/$MDEV
mount /dev/$MDEV /mnt/usbdisk/$MDEV
fi

(3)创建 udisk_remove 文件

vi /etc/hotplug/usb/udisk_remove

写入:

#!/bin/sh
echo "usbdisk remove!" > /dev/console
umount -l /mnt/usbdisk/sd*
rm -rf /mnt/usbdisk/sd*

(4)修改脚本权限

chmod 755 /etc/hotplug/usb/*

如下图所示插上 U 盘,此时就可以看到/mnt 目录下多了个 usbdisk 文件夹.

 

进入到 usbdisk 文件夹,看到 sda1 文件夹。说明我们已经成功将 U 盘挂载到开发板的/mnt/usbdisk 下的 sda1 目录。拔掉 U 盘就可以看到 sda1 目录消失。 

 

二、实现 SD/TF 卡的自动挂载

(1)在 mdev.conf 添加如下内容:

vi /etc/mdev.conf

写入:

mmcblk1p[0-9]  0:0 666  @/etc/hotplug/sd/sd_insert

mmcblk1    0:0 666  $/etc/hotplug/sd/sd_remove

(2)创建 sd_insert 文件

mkdir -p /etc/hotplug/sd

vi /etc/hotplug/sd/sd_insert

写入:

#!/bin/sh
echo "sd card insert!" > /dev/console
if [ -e "/dev/$MDEV" ]; then
mkdir -p /mnt/sdcard/sd
mount -rw /dev/$MDEV /mnt/sdcard/sd
fi

(3)创建 sd_remove 文件

vi /etc/hotplug/sd/sd_remove

写入:

#!/bin/sh
echo "sd card remove!" > /dev/console
umount -l /mnt/sdcard/sd*
rm -rf /mnt/sdcard/sd*

(5)修改脚本权限

chmod 755 /etc/hotplug/sd/*

如下图所示,插上 TF/SD 卡,此时就可以看到/mnt 目录下多了个 sdcard 文件夹。

 

进入到 sdcard 文件夹,可以看到 sda1 目录。说明我们已经成功将 TF 卡挂载到开发板的/mnt/sdcard 下的 sda1 目录。退出当前目录,拔掉 TF 卡就可以看目录消失(不退出当前目录就拔掉 TF 卡可能会造成系统重启)。

97.11.14 智能网关

文档全称是“iTOP-4412-QtE-智能网关测试使用文档”,文档介绍了 QtE4.7 系统下智能网关的使用。

配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE-智能网关测试使用文档.zip”目录下。

97.11.15 文件系统保存文件

文档全称是“iTOP-开发板-Qt 和 mini 文件系统无法保存文件的解决办法”,文档介绍了QtE4.7 和最小 linux 系统无法保存文件的解决方法。

97.12 UVC摄像头(USB摄像头)

文档全称是“iTOP-4412-QtE4.7-UVC 摄像头使用例程_V1.0”,文档介绍了 QtE4.7 系统下,如何使用 UVC 摄像头(即 USB 摄像头)。配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7 测试程序\iTOP-4412-QtE4.7-UVC 摄像头使用例程_V1.0.zip”目录下。

97.13 QtE4.7下RFID测试方法

本章介绍的是在 QT 系统环境下 iTOP-4412 RFID 实验调试步骤。给用户提供了“iTOP-4412-QtE4.7-RFID_V1.0.rar”压缩包,即 RFID 实验 Qt 源码。

RFID(Radio Frequency Identification)射频识别技术,又称无线射频识别,是一种通信技术,俗称电子标签。可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。目前 RFID 技术应用很广,如:图书馆,门禁系统,食品安全溯源等。

97.13.1 硬件连接

作者测试 RFID 模块,使用的是 iTOP-4412 精英版开发板。将 RFID 模块连接到开发板的“GPIO/CAN/485”排针一端,如下图所示。

 

97.13.2 配置内核

RC522 驱动需要 SPI 总线支持,开发板的 RFID 与 CAN 复用一路 SPI,提供的内核源码默认支持 RFID,如果用户使用过 CAN,则需重新配置内核驱动,步骤如下:

配置 rc522 驱动

先配置好对应的缺省文件,然后使用命令“make menuconfig”进入 menuconfig,如下图所示。

 

选择并进入“Device Drivers”,如下图所示。 

 

选择并进入“SPI support”,如下图所示。 

 

如下图所示,选择“SPI_RC522”,如下图所示。 

 

到这一步,RC522 的驱动就配置好了。由于 can 和 rc522 复用一路 SPI,所以要去掉can配置。

2)、去掉 can 驱动

本节介绍如何去掉 can 驱动,can 驱动关键词是“ CAN_MCP251X” 配置 can 的驱动,先返回 menuconfig 的打开界面,如下图所示。

 

选择并进入“Networking support”,如下图所示。 

 

选择并进入“ CAN bus subsystem support”,如下图所示。 

 

选择并进入“CAN Device Drivers ”,如下图所示。 

 

找到“Platform CAN drivers with Netlink support”选项,去掉其中的“Microchip MCP251x SPI CAN controllers ”配置,如下图所示。 

 

退出保存,编译。重新生成的内核就是支持 RFID 的内核了。 

97.13.3 测试

将“iTOP-4412-QtE4.7-rc522_V1.0”中“rc522”目录下可执行文件“rc522”拷贝到U 盘上,如下图所示。

 

然后使用命令“mount /dev/udisk /mnt/disk/”将 u 盘挂载到开发板上,使用命令“cp -r /mnt/disk/rc522 /topeet/” 将可执行文件拷贝到“/topeet”目录下, 使用命令“umount /dev/udisk”解除挂载,如下图所示。 

 

使用命令“ cd /topeet” 进入“/topeet” 目录下, 我们可以使用命令“ ls” 查看到“rc522”,如下图所示。 

 

使用命令“./rc522 -qws &”,如下图所示。 

 

如下图所示,当芯片放置到感应区后,界面将会显示芯片信息。 

 

97.14 QtE4.7下CAN总线的使用

本文档介绍的是在 QT 系统环境下 iTOP-4412 CAN 实验调试步骤。我们提供了“can_libs.rar”、“can_tools.zip”和“iTOP-4412-QtE4.7-CAN_V1.0.rar”压缩包,分别是 can 工具需要的库文件、can 工具二进制文件以及 can 实验 Qt 源码。配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\QtE4.7测试程序\iTOP-4412-QtECAN测试使用文档”。

CAN 是 Controller Area Network 的缩写,是 ISO 国际标准化的串行通信协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。

97.14.1 硬件连接

作者测试 can,使用的是两块 iTOP-4412 开发板。需要两个 CAN 总线模块,排母一段接开发板“GPIO/CAN/485”,can 模块的+连接+,-连接-,如下图所示。

 

97.14.2 CAN config工具配置

首先配置工具和库文件,将压缩包“can_libs.rar”和“can_tools.zip”解压得到“can_tools”和“can_libs”,拷贝解压出来的文件到 tf 卡或者 u 盘,如下图所示。

 

然后将 tf 卡或者 u 盘挂载到开发板上(参考使用手册 15.3.3 小节),如下图所示。 

 

拷贝工具软件到/bin 目录下,使用命令“ cp -r can_tools/* /bin/”,如下图所示。 

 

使用命令“cp -r can_libs/* /lib/”拷贝库文件到/lib 目录下,如下图所示。 

 

97.14.3 测试软件的使用

将“iTOP-4412-QtE4.7-CAN_V1.0”解压后“cantest”目录下可执行文件“cantest” 拷贝到 U 盘上,如下图所示。

 

然后使用命令“mknod /dev/sda1 b 8 1”“mount /dev/sda1 /mnt”将 u 盘挂载到开发板上,使用命令

cp /mnt/cantest /

将可执行文件拷贝到根目录下。

 

 

以同样的方式将可执行文件拷贝到另一个开发板上,使用命令“cd /”进入根目录下,我们可以使用命令“ls | grep cantest”查看到“cantest”,如下图所示。 

 

在两块开发板上,分别使用命令“./cantest -qws && pkill -f qws”,如下图所示。 

 

如下图所示,开发板接入鼠标,点击发送。 

 

另一个开发板会接收到发来的信息,如下图。 

 

97.15 OpenCV在iTOP-4412 开发板上的移植

OpenCV 是目前开源项目中最著名的基于机器视觉方向的图像处理的开发包,目前已经有被移植到嵌入式Linux 环境上。本文介绍了OpenCV 交叉编译的基本步骤。

注:也有用户反映用本节方法构建OpenCV 不如下一节buildroot 的方法顺利,您也可以尝试使用下一节的方法来进行,毕竟buildroot 作为一个完整的软件包集成度更高,这里仅作为参考。

编译环境及库文件Linux 环境:

ubuntu12.04 交叉编译:4.3.2

arm 开发平台:iTOP4412 开发板

OpenCV 需要依赖以下库支持:

libz:

libjpeg:

libpng:

libyasm:

opencv:

libx264:

libxvid:

lffmpeg:

cmake:

97.15.1 交叉编译libz 

./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/zlib- install --shared

修 改 makefile 文 件 :

CC=arm-linux-gcc 
AR=arm-linux-ar 
RANLIB=arm-linux-ranlib
CDSHARED=arm-linux-gcc -shared -wl, -soname,libz.so.1,--version- script,zl lib.map 

(不一样没关系只改前面编译器)

然后编译 :

make 

安装:

make install

97.15.2 交叉编译libjpeg

#./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none- linux-gnueabi/libjpeg-install --enable-shared --enable-static

#make 

#make install

97.15.3 交叉编译libpng

./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none- linux-gnueabi/libpng-install --enable-shared --enable-static

make

make install

 

97.15.4 交叉编译yasm 

./configure --host=arm-linux --prefix=/usr/local/arm/4.3.2/arm-none- linux-gnueabi/yasm-install --enable-shared --enable-static

#make 

#make install

97.15.5 交叉编译libx264

#CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux -- disable-asm --prefix=/usr/local/arm/4.3.2/arm-none-linux- gnueabi/libx264-install

#make 

#make install

97.15.6 交叉编译libxvid

#cd build/generic

#./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux- gnueabi/libxvid-install --host=arm-linux --disable-assembly 

#make

#make install

97.15.7 交叉编译ffmpeg

./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux- gnueabi/ffmpeg-install --enable-shared --disable-static --enable-gpl -- enable-cross-compile --arch=arm --disable-stripping --target-os=linux -- enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale 

#make

#make install

************************************************************************** 到此所有依赖库编译安装完成

安装目录在:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/ 每个库有各自的-install 文件夹

新建文件夹:

#mkdir /usr/local/arm/4.3.2/arm-none-linux-gnueabi/opencv-depend/ 然后拷贝所有-install 下的lib 下的文件到opencv-depend 目录下

***************************************************************************

97.15.8 cmake-gui安装(自己下载)

到官网上下载已经编译好的cmake-2.8.8-Linux-i386.tar,gz,解压就可以了

97.15.9 交叉编译opencv2.4.9

用到的主要目录说明:

交叉编译工具链所在目录 /usr/local/arm/4.3.2/

安装opencv 的目录 /usr/local/arm/opencv-install opencv

源码所在目录  /usr/local/arm/opencv2.4.9

编译好的opencv 库所在目录 /usr/local/arm/opencv-2.4.2/build

配置cmake

(这一步的目的是配置编译器并让cmake-gui 找到所有共享库不然cmake-gui 会少很多选项因为没有发现依赖库,例如你直接cmake-gui 就没有v4l 选项,直接导致移植成功后无法打开摄像头!

#cd opencv-2.4.9 #mkdir build

#cd build

#vim toolchain.cmake 

内容如下:

###########user defined############# set( CMAKE_SYSTEM_NAME Linux )

set( CMAKE_SYSTEM_PROCESSOR arm )

set( CMAKE_C_COMPILER arm-none-linux-gnueabi-gcc )

set( CMAKE_CXX_COMPILER arm-none-linux-gnueabi-g++ )

###########user defined#############

set( CMAKE_FIND_ROOT_PATH" /usr/local/arm/4.3.2/arm-none-linux- gnueabi/opencv-depend/ " )

set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

然后执行这一步

#cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../

配置cmake-gui

#cmake-gui

 

 

选择源代码目录/usr/local/arm/opencv-2.4.9/

选择Build 目录:/usr/local/arm/opencv-2.4.2/build

点击Configure,保持generator 为Unix Makefiles(不用改),选择 Specify options for cross-compiling(最后一个选项),点击Next,

Operating System 填写arm-linux

C Compilers 填 写 /usr/local/arm/4.3.2/bin/arm-linux-gcc

 

C++ Compilers 填写/usr/local/arm/4.3.2/bin/arm-linux-g++

程序库的Target Root 填写/usr/local/arm/4.3.2/

然后点击Finish。

默认安装目录为/usr/local,改为/usr/local/arm/opencv-install(因为之前安装了x86 的opencv 在usr/local 为了避免弄混了)

CMAKE_INSTALL_PREFIX /usr/local/arm/opencv-install

修改选项(如果不改make 会出现很多错误因为找不到库)

去掉WITH_CUDA

去掉 WITH_GTK

去掉WITH_1394

去掉WITH_GSTREAMER

去掉WITH_LIBV4L(后边有v4l 这个没用不要选)

去掉WITH_TIFF

去掉BUILD_OPENEXR

去掉WITH_OPENEXR

去掉BUILD_opencv_ocl

去掉WITH_OPENCL

完成后Generate

修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS 原来为空,加上- lpthread -lrt,

点击Generate 生成Makefile。(203 行附近有小引号可以带着像这样'-lpthread -lrt')

#make(出现错误一般是选多了或者前面做错了make clean) #make install

最后还有一步特别关键 ,需要把/usr/local/arm/opencv-install/lib 下所有的动态链接库 拷贝到交叉编译下/usr/local/arm/4.3.2/arm-non-linux-gnueabi/lib 下

97.15.10 测试

测试程序:(qt 设置)

 

 

 

拷贝到开发板运行

  1. 将/usr/local/arm/opencv-install/lib/下的库拷贝到开发板/lib/下
  2. #mkdir /usr/local/arm/opencv-install/lib/

并拷贝上述库到mkdir /usr/local/arm/opencv-install/lib/

  1. 拷贝opencv-depend 下库到开发板/lib/下
  2. 拷贝测试程序到开发板/bin/目录下赋予可执行权限chmod 777 CamaraGet
  3. cd /bin/

./ CamaraGet –qws &

(如果提示库找不到原因是你编译的库建立了类似快捷方式的东西而你拷贝的库 没有拷贝快捷方式所以程序连接的时候找不到快捷方式,可以将你的库改名成提示缺少的库名(快捷方式名)基本上就是去掉版本后缀,例如:

( mv libopencv_core.so.2.4.9 libopencv_core.so.2.4 )

以下是文件目录示例

 

 

说明

开 发 板 USB 摄 像 头 预 览 节 点 是 /dev/video4 opencv 调 cam = cvCreateCameraCapture(204); 这个函数的意思是打开video4 网上很多讨论

 

 

 

 

 

 

 

 

97.16在QtE环境下UVC摄像头的OpenCV功能测试

本文档介绍的是在 QtE 系统环境下 iTOP4412 UVC 摄像头 opencv 程序实验调试步骤。我们使用的是 4412 开发板,提供 opencv 源码“opencv-2.4.9.zip”,uvc 摄像头 qt 源码“camera_opencv.tar.gz”以及 opencv 编译好的库文件“opencv-2.4.9_arm.tar.gz”。配套资料在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412开发板系统开发资料\UVC摄像头opencv-2.4.9使用文档”

97.16.1 移植openCV

我们将文件中提供的“opencv-2.4.9.zip”即 opencv 源码包解压,并将其通过 ssh 软件移至 ubuntu 下,作者将该文件放入了“/home/work2/cwork/opencv”下,如下图所示

 

OpenCV 2.2 以后版本需要使用 Cmake 生成 makefile 文件,因此需要先安装 cmake。ubuntu 下安装 cmake 比较简单,使用命令“apt-get install cmake”,如下图所示。 

 

使用命令“cmake --version”查看版本,测试是否安装成功。如下图所示。 

 

我们使用命令“cd opencv-2.4.9/”进入源码目录。如下图示。 

 

使用命令“cmake-gui”打开 cmake 的 gui 界面,开始进行配置。如下图示所示。 

 

我们在“where is the source code”中填入电脑中 opencv 源码的位置,“where to build the binaries”填入生成 make 编译文件的位置,然后点击 configure 按钮。如下图所示。 

 

选择最后一项,然后点击 next,如下图所示。 

 

Operating System 选择目标系统“Linux”,Compilers 中选择交叉编译器的 gcc 和g++,“/usr/local/arm/4.4.1/bin/arm-none-linux-gnueabi-gcc” “/usr/local/arm/4.4.1/bin/arm-none-linux-gnueabi-g++”,Target Root 选择交叉编译器的路径“/usr/local/arm/4.4.1”,include Mode 选择“search only in target root”。点击 finish。如下图所示。 

 

此时主界面如下图所示,这时 Cmake 会读取程序的一些配置信息,可以再下图红框中对每一个编译选项进行修改,将 CMAKE_INSTALL_PREFIX 改成你想要的路径,作者改成了“/usr/local/opencv-2.4.9”,这里去掉 WITH_TIFF,WITH_CUDA 及 WITH_GTK。如下图所示。 

 

 

最后点 Generate,在编译路径/opt/opencv_arm 下就生成了 Makefile。关闭后我们使用“cd /opt/opencv-arm/”命令进入“/opt/opencv_arm”,在执行 Makefile 之前需要修改 CMakeCache.txt 文件的 194 行。使用命令“vi CMakeCache.txt”编辑文本。如下图所示。 

 

跳转至 194 行。将“CMAKE_EXE_LINKER_FLAGS:STRING=' '”改为“CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt -ldl”如下图所示。 

 

保存退出后,使用“make”编译。编译部分截图如下所示。 

 

编译完成之后。使用指令“make install”,部分截图如下所示。 

 

我们可以在“/usr/local/opencv-2.4.9/”目录下看到编译生成的库文件。至此,移植工作基本完成。 

 

97.16.2 UVC程序编译

我们把文件夹中带的例程源码“camera_opencv.tar.gz”通过 ssh 拷贝到 ubuntu 下, 如下图所示。

 

使用命令“tar -xvf camera_opencv.tar.gz”解压程序源码。如下图所示。 

 

使用命令“cd camera_opencv/”进入。然后使用命令“/opt/qt-4.7.1/bin/qmake” “make”编译程序,编译完成即可看到程序,如下图所示。 

 

97.16.3 生成文件系统

我们使用命令“ cd /home/topeet/Linux+QT/root/”进入 qt 文件系统目录。如下图所示。

 

使用命令“cp -r /usr/local/opencv-2.4.9/ ./usr/local/”将 opencv 库文件拷贝到 qt 文件系统中,使用命令“cp -r /home/work2/cwork/opencv/camera_opencv/camera_opencv topeet/”将程序拷贝到文件系统中,使用命令“ cp -r /opt/opencv-arm/lib/* ./lib/”动态库拷贝到开发板中。如下图所示。 

 

我们使用命令“cd lib/”进入“lib”文件夹。使用命令

cp -r /usr/local/arm/4.4.1/arm-none-linux-gnueabi/libc/usr/lib/libstdc++.so.6.0.12 ./

将“libstdc++.so.6.0.12”拷贝到当前目录(自带的 libstdc++.so.6.0.10 不支持GLIBCXX_3.4.11,运行程序会报错),使用命令“”删除旧连接文件,使用命令“ln -s libstdc++.so.6.0.12 libstdc++.so.6”创建链接。如下图所示。

 

使用命令“cd ../../”返回上一级目录。使用命令“make_ext4fs -s -l 314572800 -a root -L linux system.img root”生成文件系统镜像。如下图所示。 

 

然后将文件系统烧写到开发板上(QT 系统)。

97.16.4 程序测试

开发板上电启动后,使用命令“ps”查看当前进程,并 kill fluidlauncher。如下图所示。

 使用命令“cd /topeet/”进入程序存放目录。使用命令“./camera_opencv -qws &” 即可运行程序,此时屏幕显示 uvc 摄像头浏览画面。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值