首页 > 代码库 > 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的文件

我到开发板是由于开始我的分辨率没有设置对,导致。

所以出现错误要耐心排查。