首页 > 代码库 > TQ2440实现触摸屏和qt图形 解决segmentation fault
TQ2440实现触摸屏和qt图形 解决segmentation fault
使用触摸屏,首先安装触摸屏矫正程序。
下载并解压tslib-1.4,进入主目录,执行:
1 [root@localhost ~]#./autogen.sh 2 [root@localhost ~]#echo "ac_cv_func_malloc_0_nonnull=yes" >arm-none-linux-gnueabi.cache 3 [root@localhost ~]#./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=/安装目录 4 [root@localhost ~]#make 5 [root@localhost ~]#make install暂且搁置一边。现在开始编译安装qt-embedded-linux-opensource-src-4.5.3
解压后进入目录,首先使用configure配置并生成makefile文件,开始我是在挂载到ntfs分区中执行到,但是不成功,也有可能是目录中有中文到原因,后来直接拷贝到Centos家目录,执行成功
[root@localhost ~]#./configure -prefix (想要将qte安装到哪)-embedded arm -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -qt-mouse-tslib -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb -qt-mouse-linuxtp -I/(tslib的安装目录) /tslib/include -L/(tslib的安装目录)/tslib/lib
然后执行make&make install安装成功。这里的安装目录,必须和制作根文件系统中存放fonts库到目录一致。
拷贝tslib的安装文件夹到自己文件系统 的usr/local中。修改tslib/etc/ts.conf文件,删除module_raw input前面到#,并删除所有注释行,保证每一行都定格,否则会出现错误。
拷贝tslib/bin中的ts_calibrate触摸屏矫正程序到文件系统的usr/bin目录下。
在文件系统中根据刚才安装qt-embedded目录建立相同到目录,比如我安装在/usr/local/qtembed/目录,则在文件系统中:
mkdir -p usr/local/qtembed/lib/fonts将安装目录中到所有字体拷贝到此目录中。
在文件系统到usr目录中新建一个lib目录,将qt-embed/lib中到库文件拷贝到此目录
[root@localhost lib]# cp /usr/local/qtembed/lib/libQtCore.* libQtGui.so* libQtNetwork.so* ./
删除.al后缀和.prl后缀到文件。
编译一个qt实例。进入解压的qt-embedded-linux-opensource-src-4.5.3源码目录的examples/widgets/wiggly目录,使用编译生成的
qmake工具生成makefile文件:/usr/local/qtembed/bin/qmake
然后make生成arm平台的可执行程序,拷贝到文件系统的usr/bin目录下。
最后配置环境变量,采用到方式是直接在etc/profile文件中添加:
export QTLIB=/usr/lib export TSLIB_ROOT=/usr/local/tslib export TSLIB_TSDEVICE=/dev/event0 export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts export TSLIB_CALIBFILE=/etc/pointercal export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_TSEVENTTYPE=H3600 export LD_LIBRARY_PATH=$QTLIB:/usr/local/lib:$LD_LIBRARY_PATH export QWS_SIZE=480*272 export QWS_MOUSE_PROTO=TSLIB:/dev/event0 export QWS_DISPLAY="LinuxFb;mmWidth35;mmHeight45:0" if [ -f "$TSLIB_CALIBFILE" ];then wiggly -qws& else ts_calibrate wiggly -qws& fi
最后到if判断是用来判断etc目录下是否已经生成触摸屏矫正程序,若没有,则执行触摸矫正,若生成则直接运行wiggly程序。
执行mkyaffs2image制作bin文件.
附常见错误:segmentation fault
烧写到开发板后有时候qt程序并不能运行,而是出现如上错误。
其实这种错误原因很多如:
1)、界面是否出超出开发板的屏幕大小
2)、这个是编译器问题,在qtcenter上有说到4.3的优化太厉害,解决方法有3种:
a、把工程的makefile的cflag选项的O2降为O1,我直接降为-g,不过编译的程序就比较大了
b、换成4.1以下的编译器
c、修改qt的文件
我到开发板是由于开始我的分辨率没有设置对,导致。
所以出现错误要耐心排查。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。