嵌入式Linux小项目之X210上QT5.6.2移植和开发环境搭建

QT·移植Qt到ARM平台及搭建Qt交叉编译环境 移植Qt到ARM平台及搭建Qt交叉编译环境 阅读详情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

原文链接:https://blog.youkuaiyun.com/weixin_45842280/article/details/121310055
本文根据自己的实际开发过程进行了修改

一、背景知识介绍

1、常见GUI系统

(1)Labview、Mac、Windows等
(2)GNOME(底层还是GTK图形界面库)、KDE(QT库)
(3)QT(适合不追求界面美观,只追求界面比较稳定,如工业领域)
(4)miniGUI、uCGUI(stemWin):主要单片机在用,例如stm32

2、QT的发展例程

(1)1991年由TrollTech(奇趣科技)开发

(2)2008年被Nokia收购,改名为QT Software,后又改为Qt Development Frameworks,引入QTCreator作为IDE。给开发者提供QT SDK(QT SDK = QT Framework + QTCreator)

(3)2012年被Digia收购并运营至今。

(4)2014.4发布QtCreator3.1.0,全面支持iOS、Android、WP(windows phone),做到真正的跨平台。

3、QT如何跨平台

(1)QT主体使用C++编写,应用开发也使用C++。

(2)QT跨平台的原理是:一次编写、到处编译(需安装支持不同系统的库)并运行,源码跨平台。(注意和Java的差别,java是可执行程序级别的,一个编译好的程序各个平台都可以运行)

(3)QT支持的平台:Windows(32/64),X11(linux/Unix)、Mac(MacOSX)、Embeded(linux fb)、Android/ioS/WP

4、QT相关的其他一些名字

(1)Qt/E,QT embeded,名称三次变更:QT/E -> Qtopia-core -> Qt-embedded-opensource,Qt4.5后大一统为:qt-everywhere-opensource-src

(2)Qtopia,SourceForge.net上的开源项目,全称Qt Palmtop Environment,基于QtE,为掌上电脑PDA等开发的专属桌面环境,已停止开发并入QT主线。

5、QT的网络资源

(1)QT官网:https://www.qt.io/
(2)QT 库下载地址:https://download.qt.io/new_archive/qt/5.6/5.6.2/single/
解压命令:tar -xvf 文件名 -C 指定的解压目录在这里插入图片描述
(3)QT creator下载地址:https://download.qt.io/new_archive/qt/5.6/5.6.2/
使用方法:./文件名在这里插入图片描述

二、QT的官网资源开发环境搭建

1、QT官网资源

(1)主流版本:QT4.8、QT5.x
  较高版本的QT支持的C++版本较高,而x210开发板的交叉编译链是2009年的,支持的C++版本较低,支持C++98,QT5.9支持的最少也是C++11,故而选择QT5.6。

2、QT的linuxfb介绍

参考阅读:
https://blog.youkuaiyun.com/wuu19/article/details/100097366
https://blog.youkuaiyun.com/weixin_45842280/article/details/120572842
https://blog.youkuaiyun.com/deggfg/article/details/81478056

linuxfb与framebuffer驱动有关,即其与控制屏幕画面的显示有关。

三、移植前的准备和确认工作

1、移植环境

(1)Windows10 64位+ Ubuntu 18.04 X64,共享文件夹bsp(在ubuntu中的目录为:/mnt/hgfs/bsp)

(2)开发板内核:linux2.6.35.7,支持nfs启动、fb(framebuffer)驱动与ts(触摸屏)驱动均正常工作

(3)移植QT版本:QT5.6.2

2、开发板状况确认

(1)已经烧录uboot,并设置环境变量bootcmd和bootargs从tftp、nfs启动

(2)zImage事先编译好的,文件夹形式的rootfs准备好,成功启动内核进入命令行。

(3)ts驱动源码确认添加、设备文件确认ok(/dev/input/event?)

3、测试确认ts驱动部分

(1)cat /proc/bus/input/devices 可知gslX680对应的设备文件是event1
打印的信息:

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="gslX680"
P: Phys=
S: Sysfs=/devices/platform/s3c2440-i2c.1/i2c-1/1-0040/input/input1
U: Uniq=
H: Handlers=mouse1 event1 
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003

(2)cat /dev/input/event1
  触摸开发板屏幕,看开发板系统终端命令行是否会打印信息,若打印则证明该触摸屏驱动可正常工作

四、tslib移植和测试

Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。tslib在各种硬件体系结构和操作系统上运行。

1、tslib移植

(1)源码下载
链接:https://pan.baidu.com/s/1jhkgr5rkaP7zn3z3b8cZQQ 
提取码:2wt3 
--来自百度网盘超级会员V5的分享
(2)解压		tar -xvf tslib-1.4.tar.gz
(3)配置
cd tslib
./autogen.sh  #检查环境是否完整、可用
echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache 
mkdir /opt/tslib  #创建一个安装目录,将编译好的tslib放在这个目录
./configure --prefix=/opt/tslib --host=arm-linux --cache-file=arm-linux.cache
(4)编译和安装
make
make install

2、问题及解决:

如果./autogen.sh时报错:./autogen.sh: 4: autoreconf: not found,是因为系统中没有安装autoconf工具.
  解决方法:先让ubuntu能上网,然后执行:

sudo apt-get install autoconf automake libtool

3、部署

(1)动态库文件so
这个步骤,我没做,我也成功进行了这次试验,我没看懂

mkdir /mnt/nfs/usr/lib -p #开发板nfs方式的根文件系统所在目录/mnt/nfs
cp *so* /mnt/nfs/usr/lib -rf

(2)修改(运行时)配置文件
/opt/tslib/etc/ts.conf,其中的配置项会影响tslib的运行。修改这个配置文件:

# Uncomment if you wish to use the linux input layer event interface
module_raw input//将这条语句放出来,不被隐去,负责执行测试程序会报错,无法找到模型

(3)bin目录文件

可一步到位将tslib整个文件夹复制到/mnt/nfs/下,然后去导出环境变量,tslib目录
下的include目录可删掉,因为该目录里的头文件在编译时有用,运行时用不到。tslib/lib
下的libts.la也可删掉,其是静态链接库,编译时用到,运行时不需要。

4、导出环境变量

定义tslib运行需要的环境变量

export TSLIB_TSDEVICE=/dev/input/event1 #触摸屏设备的驱动文件,不同开发板的目录有所区别

export TSLIB_CALIBFILE=/tslib14/etc/pointercal #这个目录/tslib14/etc改成与自己开发板相符的,可将
tslib文件夹名称修改为tslib14,pointercal校准时生成的校准文件

export TSLIB_CONFFILE=/tslib1.4/etc/ts.conf  #配置文件

export TSLIB_PLUGINDIR=/tslib1.4/lib/ts  #插件

export TSLIB_CONSOLEDEVICE=none  #不要控制台

export TSLIB_FBDEVICE=/dev/fb0  #确认一下自己的开发板framebuffer是不是fb0

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tslib1.4/lib  #共享库

export TS_INFO_FILE=/sys/class/input/input1/uevent   #自动安装驱动相关的

export是动态导出,每次开机都要导出一次,所以把这些命令添加到/etc/profile文件中开机自动运行,然后重启开发板。

5、运行和测试

tslib1.4中提供了测试程序如ts_test
(1)错误1:No raw modules loaded.
ts_config: No such file or directory

解决:在etc/ts.conf中打开module raw input这行的注释就行了。

(2)错误2:"selected device is not a touchscreen I understand"问题解决

可参考:https://www.cnblogs.com/053179hu/p/13866983.html
内核中EV_VERSION的值:#define EV_VERSION 0x010001

接着查看tslib库中使用的EV_VERSION宏的值,该宏值存放在编译器的目录中的input.h文件中 ,即在交叉编译链中的:
/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/usr/include/linux/
input.h:32:#define EV_VERSION 0x010000

将二者修改成一样即可解决问题。

./ts_calibrate执行后打印出的常量保存在/etc/pointercal,屏幕的校准参数。电容屏不做这一步也可以,也是准的。但用了tslib还是校准一下

五、QT5.6.2配置和交叉编译

1、源码下载和解压

(1)源码下载目录:自行放置到ubuntu中的一个目录即可
(2)创建工作目录,并解压
(3)创建安装目录 :/opt/qt5.6.2

2、配置

在这里插入图片描述

vim /home/bsp/qt-everywhere-opensource-src-5.6.2/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
#添加以下内容
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE   += -O2  -march=armv7-a    #根据芯片改正-march=  -O2是编译器的优化等级   
QMAKE_CXXFLAGS_RELEASE += -O2  -march=armv7-a

# modifications to g++.conf
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts -ldl
QMAKE_LINK = arm-linux-g++ -lts -ldl
QMAKE_LINK_SHLIB = arm-linux-g++ -lts -ldl

# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs 
QMAKE_OBJCOPY = arm-linux-objcopy 
QMAKE_NM = arm-linux-nm -P
QMAKE_STRIP = arm-linuxi-strip 

(2)编译前配置(可以参考./configure --help的提示来配置,没有直接提供makefile,由./config得到makefile

./configure :命令
-prefix:配置安装路径
'\' :连行符,续行符,要删空其后的空格,不然会出问题
-opensource:一种模式
-shared:配置成共享库
-c++std c++98:在整个编译过程中使用的C++标准,要和交叉编译链支持的c++标准相符合
linux-arm-gnueabi-g++:上面(1)所用的那个目录名
-qt-zlib、-qt-libjpeg:包含一些库,QT使用的
-no-sse2:-no不要的意思,-sse2库名
-I:编译时找的头文件的目录
-L:导出tslib的共享库,必须与之前移植tslib库的目录一致。
./configure  -prefix /opt/QT5.6.2  \
  -opensource  \
  -confirm-license \
  -release  \
  -shared  \
  -accessibility \
-c++std c++98 \
  -xplatform linux-arm-gnueabi-g++ \
-qpa linuxfb \
-linuxfb \
-qreal float \
-pch \
-qt-zlib \
  -qt-libjpeg \
          -qt-libpng \
-no-sse2 \
          -no-largefile \
          -no-qml-debug \
          -no-glib \
-no-gtkstyle \
  -no-opengl \
  -nomake tools \
  -nomake examples \
  -tslib \
  -skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland \
  -I /opt/tslib/include \
  -L /opt/tslib/lib

3、编译中的错误解决

(1)找不到dlopen(动态的打开动态链接库)或者dlsym(动态的去动态链接库加载某一个符号)。在上述qmake.conf文件中的arm-linux-g++未添加-ldl选项不会去链接dl库,在编译器后面加ldl即: arm-linux-g++ -ldl

(2)undefined reference t o `__sync_add_and_fetch_4’

参考 https://blog.youkuaiyun.com/wavemcu/article/details/43898117

把下载到的linux-atomic.c,放到qt-everywhere-opensource-src-5.6.2目录下,下载地址

链接:https://pan.baidu.com/s/1dhomI-MbCVxZKMVdAYvXnQ?pwd=8xtf 
提取码:8xtf 
--来自百度网盘超级会员V4的分享

然后执行脚本,脚本内容:

#!/bin/bash

AR="arm-linux-ar"
RANLIB="arm-linux-ranlib"
CC="arm-linux-gcc"

libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atmoic.lo linux-atomic.c
libtool --tag=CC --mode=link arm-linux-gcc -module -avoid-version -g -O2 -o liblinux-atmoic.la linux-atmoic.lo

脚本执行成功后,会生成一个静态链接库,把静态链接库拷贝到指定的目录待用

cp .libs/liblinux-atomic.a /opt/linux-automic	#注意/opt/linux-automic是自己事先创建的的一个文件夹

再去QT源码下修改:./qtscript/src/script/Makefile
在LIBS  = 的结尾添加 -L/opt/linux-automic -llinux-atomic

4、编译,下载

make
make install

六、linux下QT应用开发环境搭建

QT Creator 只是一个集成的编译器,用于将源代码编译成可执行程序。QT是跨平台C++图形用户界面应用程序开发框架,可以简单理解成是一个开发包。

1、ubuntu中本地QT开发环境搭建

(1)开发环境 = IDE(qtcreator) + QT库 = QT SDK

qt包下载地址:https://download.qt.io/new_archive/qt/
我们下载5.3.2版本进行开发,放在ubuntu中的某个目录进行安装,运行该安装包。
https://download.qt.io/new_archive/qt/5.6/5.6.2/
在这里插入图片描述
运行方法:./文件名

运行后会弹出一个图形界面来:
安装路径不用改,注意勾选一个选项,勾选之后的大小2G左右

2、ubuntu中QT交叉编译环境搭建

QtCreator中可以安装多个版本的qmake,每个qmake都可以单独使用来对同一套源码进行编译。我们只需要在安装好的本地qt sdk中手动添加上自己交叉编译的qt库的qmake,即可使用本地开发的qt sdk来进行交叉编译开发。

运行qtcreator:
在这里插入图片描述
创建一个程序,进行简单开发(可自行百多找个教程),然后编译,回头将编译好的程序复制到开发板目录执行测试。修改编译程序使用的编译链:下面图片来源:https://blog.youkuaiyun.com/m0_37182543/article/details/80287140
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拷贝使用arm-linux-gcc编译的qt程序到根文件系统下,整个build-xxx-arm-Debug,都拷贝过去
在这里插入图片描述

七、在开发板中运行QT应用实验

1、rootfs中部署QT库

(1)QT库复制
将《 五》 中在ubuntu交叉编译生成的QT库移植到开发板的根文件系统上

mkdir /mnt/nfs/qt5.6.2  #/mnt/nfs是我挂载的根文件系统
cp /opt/qt5.6.2/lib /mnt/nfs/qt5.6.2 -rf
cp /opt/qt5.6.2/plugins/ /mnt/nfs/qt5.6.2/ -rf

(2)导出环境变量

export LD_LIBRARY_PATH=/qt5.6.2/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=/qt5.6.2/plugins   
export QT_QPA_FONTDIR=/qt5.6.2/lib/fonts            
export QT_QPA_FB_TSLIB=1    
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1 #根据自己的修改          
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1024x600:mmSize=1024x600:offset=0x0:tty=/dev/tty1

添加到/etc/profile,重启开发板。

2、开发板中运行QT应用

(1)拷贝和执行

./可执行程序名

(2)问题解决和现象观察(若是遇到了某个问题我没有给出解决方法,说明我在移植过程中并未遇到,请自行解决)

问题1:找不到libQtxx			
解决:部署QT库等文件并导出环境变量

问题2:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决:C++库在交叉编译工具链中,复制进去即可。在交叉编译链所在目录搜索找到它:

find -name "libstdc++*"

cp libstdc++*so* /mnt/nfs/lib/ -rf

问题3:QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open
failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open
failed

解决:缺少一个运行时库preloadable_libiconv.so,交叉编译得到这个后放进去/lib目录下即可。
参考:http://blog.youkuaiyun.com/wangyuanfei555/article/details/47399771
 下载:http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz  
(错误的,不过先按这个操作)./configure -prefix=$PWD/_install -host=arm-linux-gnueabihf  
				make  
                make install
                把_install/lib 下的preloadable_libiconv.so 拷到系统的/lib 下,  
                export LD_PRELOAD=/lib/preloadable_libiconv.so



	移植libiconv中遇到的问题及解决:
	1、./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
	_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
	
	解决:找到那一行,注释掉。
	 find -name "stdio.h"
	 vi ./srclib/stdio.h

	2、编译好的库是intel80386架构的,不是ARM的,不能用,要交叉编译才行。
	解决:先看配置好的Makefile,找交叉编译工具链的全局变量。但是本项目的Makefile中没有CC等这些定义,像这种一般就是通过环境变量来设置的。

	交叉编译libiconv,参考:http://blog.youkuaiyun.com/wuyu92877/article/details/52472810
	编译libiconv错误提示gets相关的,参考:http://blog.youkuaiyun.com/ownfire/article/details/47276219

	./configure -prefix=$PWD/_install --host=arm-none-linux-gnueabi
	make CROSS_COMPILE=arm-linux-none-gnueabi- ARCH=arm
	make install

	把_install/lib 下的preloadable_libiconv.so 拷到开发板的/lib 下,
	开发板的操作:export LD_PRELOAD=/lib/preloadable_libiconv.so
	添加到/etc/profile

注:本资料大部分由朱老师物联网大讲堂课程笔记整理而来并且引用了部分他人博客的内容,如有侵权,联系删除!水平有限,如有错误,欢迎各位在评论区交流。

qt的移植 1、下载qt-everywhere-opensource-src-4.8.1.tar.gz, 下载连接地址如下:http://download.qt.io/archive/qt/4.8/4.8.1/编译时间大概1小时左右, 编译完成后在上一级的目录会有一个qt-4.8.1-powerpc 文件夹, 这个文件夹内的内容就是基于powerpc的qt库。编译完成后在上一级的目录会有一个qt-4.8.1-desktop 文件夹, 这个文件夹内的内容就是基x86 的qt库。把配置文件内的工具连换成自己系统的工具连。 阅读详情

相关推荐

理论知识:Qt 的 linuxFB KMS XCB Wayland

linuxFB 直接往FrameBuffer写数据 只支持软件渲染(software-rendered),所以没有gpu的片子选这个 某些配置会使显示性能受到抑制 命令行可使用命令QT_QPA_PLATFORM=linuxfb:fb=/dev/fb1 和 -platform linuxfb使qt程序运行在该plugin上 另外指定fb用fb=/dev/fbN,分配显示区大小size=<w...

archerLea 1万+

【嵌入式Qt开发入门】初识Qt——Linux下安装Qt

理论上我们选择 Qt 的版本越新越好,这是当然的,不过我们还是要确定一个版本是必须的, 因为日后写好的程序要长期运行在一个确定的版本里,避免随意升级带来其他兼容性问题,或者重复重复移植等工作。简单的来说,Qt 可以做很多东西,好比如 Windows 下的软件也有很多是 Qt 开发的,这里我很喜欢它的可移植性,一份代码可以无需任何修改或者小修改就可以在其他平台上运行。执行安装指令后,将会弹出 Qt 的安装界面,这与 Windows 下的 Qt 安装步骤一样,安装选择目录时,默认安装目录即可。

cj_lsk的博客 1万+

从零构建嵌入式Qt图形界面:Qt5.14.2 + OpenGL ES2 在Jetson Nano的完整移植实践

本文详细介绍了在Jetson Nano上从零构建嵌入式Qt图形界面的完整实践,重点讲解了Qt5.14.2与OpenGL ES2的交叉编译过程。通过系统镜像配置、Qt编译参数优化及环境部署等关键步骤,帮助开发者高效实现高性能嵌入式GUI开发,特别适合工业HMI、医疗影像等应用场景。

weixin_30732487的博客 326

Linux安装qt完整版教程

Linux安装qt完整版教程 一、获取Linux-qt版本 二、linux安装qt 三、配置qt环境变量 四、linux-qt相关的显示配置

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 7万+

win11系统ping另一台电脑上VMware虚拟机的IP

我是用了两台电脑,所以刚才遇到一个问题就是两台电脑的IP 在同一局域网内ping不通。于是就找了很多资料,经过坚强的绝望后终于解决了。 下开始解决问题: VMWare提供了三种工作模式:bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。 1. bridged(桥接模式)   在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立主机,它可以访问网内任何一台机器。在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚

qq_42817360的博客 3236

基于单片机的继电器参数测试系统设计

由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时继电器参数数据的同步控制;设计双极性反向比例输出电路,分别利用电极电阻对继电器两侧电压进行放大,实现继电器实时电压的检测。实验结果:以两组类型断电器为测试对象,分别连接示波器进行真实数据采集,在本文系统的应用下所得参数测试结果,与真实的数据相一致,具有实际应用效

weixin_45905610的博客 1438

X210v3S的BSP构建之uboot移植(一)

本篇博客记录将uboot,kernel,rootfs及QT4.8+openCV移植到x210v3s开发板全过程,持续更新中....... 博主信息 中文名:疯仔 英文名:Swann Kang 坐标:天津(Tianjing) 时间:2017/12/03(大三) Email:1159943540@qq.com 交流QQ:1159943540 淘宝店铺:疯仔嵌入式物联网科技 开

1426

华为C语言笔试题(附答案)

华为C语言笔试题(附答案)     1、局部变量能否和全局变量重名?   答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: "   局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。  

峰云四起 3031

将USB-WiFi网卡移植到X210开发板

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 2646

Linux下Catapro酶动力学预测工具保姆级安装指南(PyTorch+CUDA11.8适配版)

本文提供了Linux系统下Catapro酶动力学预测工具的详细安装指南,特别适配PyTorch+CUDA11.8环境。从环境准备、源码获取到虚拟环境创建、依赖包安装和模型配置,逐步指导用户完成安装流程,并包含常见问题排查和性能优化建议,帮助研究者快速部署这一高效酶动力学参数预测工具。

weixin_29278805的博客 211

权重衰减weight_decay参数从入门到精通

Weight Decay是一个正则化技术,作用是**抑制模型的过拟合**,以此来提高模型的泛化性。 目前网上对于Weight Decay的讲解都比较泛,都是短短的几句话,但对于其原理、实现方式大多就没有讲解清楚,本文将会逐步解释weight decay机制。

iioSnail的博客 4万+

x210开发板linux驱动开发,移植Qt与Tslib到X210开发板的体会

1、将QT移植到X210上,让X210开发板可以运行QT东西,需要几个东西。tslib QT源码编译后的lib库等(1)tslib移植:@1:下载tslib,官方上下就可以。@2:解压。比如解压到了/root/xin_210/下@3:选择固定的交叉编译工具连,内核,tslib,QT源码都要用这一个编译,我用的是arm-2009q3.这个工具链中的arm-none-linux-gnueabi/lib...

weixin_39976951的博客 201

故障诊断 | CNN-BiGRU-Attention故障诊断

故障诊断 | CNN-BiGRU-Attention故障诊断

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 673

Qt在嵌入式开发板上的移植

移植Qt就是移植Qt的库,这是移植之前我们得知道的 废话不多说,首先说一下我的开发环境 1、Qt下载地址 (1)QT官网:https://www.qt.io/ (2)QT源码及各种资源的下载主站:http://download.qt.io/archive/qt/ mingw:minst gcc for windows,在Windows中运行的gcc编译器,如果想把linux中的软件移植到w...

PT的博客 1182

CANoe之I/O功能采集电压

在进入ECU自动化测试中,有时会用到采集ECU电压,CANoe除了可以仿真、监听CAN、ETH、LIN等网络报文外,部分设备(如VN5650、VN1630等)上还有一个I/O口,这个I/O口就可以用来满足我们自动化测试中采集电压的需求。CANoe上的I/O功能用处还是特别大,比如网络管理测试、相关诊断都会用到。

测试领域技术分享 4824

Python 爬虫实战:爬取 B 站 UP 主投稿数据,分析更新频率与粉丝互动

摘要:本文基于Python技术实现B站UP主投稿数据的自动化爬取与分析。通过解析B站WBI签名机制和API接口,获取UP主视频的标题、播放量、点赞数等核心数据。采用时间序列分析统计更新频率,结合相关性分析挖掘内容特征与粉丝互动的关联。结果显示编程类视频播放量最高,10-20分钟时长的视频表现最佳,投币数与播放量相关性达0.92。文章详细介绍了接口分析、反爬应对等关键技术,为内容创作者优化策略提供数据支持,同时强调遵守平台规范的爬取原则。

2503_91057718的博客 1535

uboot的移植——移植uboot官方的uboot到x210开发板(2)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 1537

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

USB WIFI网卡在S5PV210的移植(1)

本篇文章是在开发板已有的根文件系统的基础上进行移植的,开发板的根文件系统中自带了wpa_supplicant工具,若是你的开发板没有,需要自己进行移植,具体操作可阅读该小项目的下一篇文章。,但是关闭的时候,ifdown ra0不可以用,ifconfig ra0 down可以用,我也是很奇怪,因为这样可以使DNS的配置生效,前者好像不行,自己去试一试。大家可以登录到自己的路由器管理界面,结合学习,登陆的账号、密码可以看看自己的路由器,上边会有标签写了相关内容。

forecasts的博客 1028

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

qt210 android 内核移植,FS210开发板上Qt4.7.0移植过程

FS210开发板上Qt4.7.0移植过程[复制链接]作者:冯老师,华清远见嵌入式学院讲师。1. 搭建Qt开发环境平台1、开发环境:ubuntu 12.042、交叉编译链:arm-cortex_a8-linux-gnueabi3、开发板:FS2102. Qt移植所需的工具首先,我们可以从官网下载Qt源码,1) qt-everywhere-opensource-src-4.7.0.tar.gz  QT...

weixin_36303807的博客 349

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Qt-5.3.2 在友善Smart210开发板的移植记录

使用FrendlyARM arm-toolchain-4.5.1交叉工具链,在

NewThinker_wei 的专栏 3万+

开源毕业设计:基于嵌入式ARM-Linux的应用OpenCV和QT实现的人脸识别系统(源码+论文)

毕业一载有余,把毕业设计作品分享一下,希望能帮助到有需要的同学们。 资源下载:链接见底部(源码+论文) 简介: 本设计基于linux操作系统,由客户端(门禁设备)和服务器(后台处理中心)组成,通过以太网形成组网,实现一个人脸识别门禁系统。客户端为嵌入式Linux设备,采用QT库显示界面,通过摄像头采集图像。服务器为PC上 Ubuntu系统,采用QT库显示界面,以OpenCV库为基础进行........................

曾哥哥的博客 2万+

Qt4.8.3移植总结

最近买了块天嵌的TQ210,对最新的Qt4.8.3进行了移植,现在做个总结,方便以后查看。 Qt是一个跨平台的C++应用程序开发框架,广泛用于开发GUI程序。使用Qt开发的软件,相同的代码可以在任何支持的平台上编译与运行,而不需要修改源代码。会自动依平台的不同,表现平台特有的图形界面风格。 Qt在嵌入式开发中有着广泛的应用,使用Qt只需编写一次应用程序和UI,无须重新编写源代码,便可跨不同的桌

wjs1033的专栏 1289

Linux毕业设计:基于OpenCV和QT库实现的人脸识别考勤/门禁系统(arm嵌入式ubuntu)

Linux上以opencv和qt库实现的人脸识别系统,可应用于考勤、门禁等场景,具有人脸录入、删除、人脸检测、识别、用户管理等完整功能。可运行于ARM嵌入式linux、ubuntu即纯软件、ARM+PC组合等多种方式,应用场景多样且易于移植各个平台。

曾哥哥的博客 1万+
下一篇: secureCRT配置
金银588
博客等级 码龄7年 1210粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值