热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

qt程序自启动

QT下载:http:qt.nokia.comdownloads其中QtSDKforOpenSourceC++developmentonLinuxX1132-

 

QT下载:http://qt.nokia.com/downloads

其中Qt SDK for Open Source C++ development on Linux/X11 32-bit 是PC上的SDK,包含了QTCreator。

Qt for Open Source C++ development on Embedded Linux是嵌入式版本的开发库。

 

这里只叙述arm版的安装。

1:编译tslib库

天嵌提供的tslib1.41版本下载:http://download.csdn.net/source/2661205

注意配置要正确,否则触摸屏可能出现只能移动鼠标而不能点击的情况。

view plaincopy to clipboardprint?
  1. ./configure --host=arm-linux -disable-hp3600 --disable-arctic2 --disable-mk712 --disable-collie --disable-corgi --disable-ucb1x00 --disable-linear-h2200 --with-gnu-ld --prefix=/opt/QT/tslib ac_cv_func_malloc_0_nOnnull=yes  

配置完后make,make install。这里将tslib安装在/opt/QT/tslib下。

 

2:编译qt-embedded-arm,安装在/opt/QT/qt-embedded-4.6.3-arm下。这里新建一config.sh文件保存配置,然后运行./config.sh。内容如下:

view plaincopy to clipboardprint?
  1. ./configure -prefix /opt/QT/qt-embedded-4.6.3-arm -release -opensource -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-libjpeg -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I/opt/QT/tslib/include -L/opt/QT/tslib/lib  

不过就这么编译,移植到开发板上会出现Segmentation Fault的错误(虽然运行两次还是可以启动QT程序),此错误其实是图形缓冲区linuxfb的问题,可以修改qt-everywhere-opensource-src-4.6.3/src/gui/embedded/qscreenlinuxfb_qws.cpp源码:

424行左右的地方:

view plaincopy to clipboardprint?
  1. /*            //EmbedSky_del start 20091208 
  2.     canaccel = useOffscreen(); 
  3.     if(canaccel) 
  4.         setupOffScreen(); 
  5. */            //EmbedSky_del end 20091208  
  6.     canaccel = false;  

726行左右的地方:

view plaincopy to clipboardprint?
  1. /*                //EmbedSky_del start 20091208 
  2.     if (canaccel) { 
  3.         *entryp=0; 
  4.         *lowest = mapsize; 
  5.         insert_entry(*entryp, *lowest, *lowest);  // dummy entry to mark start 
  6.     } 
  7. */                //EmbedSky_del end 20091208  
  8.     canaccel = false;  

除此之外,在./configure中如果没有去掉一些不必要或硬件不支持的选项也可能引发Segmentation Fault问题,对于S3C2440开发板可以参考上面的配置。

修改之后make,make install

 

3:将tslib/lib下所有so文件复制到qt-embedded-4.6.3-arm/lib下(不复制的话则第4步编译程序时找不到某些库)。ts和pkgconfig文件夹可以不复制。

 

4:将qt-embedded-4.6.3-arm下的lib和plugins文件夹复制到开发板文件系统的/opt/QT4.6.3下。然后删除.so以外的文件并只保留需要的字体。

5:复制tslib/etc/ts.conf文件到开发板文件系统的/etc下,去掉第二行前的#号

view plaincopy to clipboardprint?
  1. # Uncomment if you wish to use the linux input layer event interface  
  2. module_raw input  

6:加载QT运行环境变量,修改开发版文件系统的/etc/profile文件

view plaincopy to clipboardprint?
  1. # Ash profile    
  2. # vim: syntax=sh   
  3. # No core files by default  
  4. #ulimit -S -c 0 > /dev/null 2>&1  
  5. ############## QT start #################  
  6. export set QTDIR=/opt/QT4.6.3  
  7. export set QWS_DISPLAY="LinuxFB:/dev/fb0"  
  8. export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"  
  9. export set QWS_KEYBOARD="TTY:/dev/tty1"  
  10. if [ -f /sys/class/input/input0/uevent ] ; then  
  11. export set TSLIB_TSDEVICE=/dev/event0  
  12. export set TSLIB_CALIBFILE=/etc/pointercal  
  13. export set TSLIB_COnFFILE=/etc/ts.conf  
  14. export set TSLIB_PLUGINDIR=$QTDIR/lib/ts  
  15. export set QWS_MOUSE_PROTO="TSLIB:/dev/event0"  
  16. fi  
  17. export set QT_QWS_FOnTDIR=$QTDIR/lib/fonts/  
  18. export set PATH=$QTDIR/bin:$PATH  
  19. export set LD_LIBRARY_PATH=$QTDIR/lib:$QTDIR/plugins/imageformats:$LD_LIBRARY_PATH  
  20. ############## QT end #####################  
  21. USER="`id -un`"  
  22. LOGNAME=$USER  
  23. PS1='[/u@/h /W]# '  
  24. PATH=$PATH  
  25. HOSTNAME=`/bin/hostname`  
  26. export USER LOGNAME PS1 PATH  

到这里就可以在开发板上运行QT程序了。

7:实现开机运行QT程序

由于开机启动程序是在/etc/init.d/rcS中加载的,然而运行QT程序首先必须设置运行QT的环境变量,可/etc/profile是在/etc/init.d/rcS后加载的,所以为了实现开机运行程序,必须先设置环境。这里我们可以把设置环境和启动程序用一个脚本完成。新建一文件QT4,放入bin或是sbin中,设置其权限为可执行。其内容如下: (这里启动我自己编写的一个QTbeep程序)

view plaincopy to clipboardprint?
  1. #!/bin/sh   
  2. echo Start QT4.6.3 > /dev/tq2440_serial0  
  3. export set QTDIR=/opt/QT4.6.3  
  4. export set QWS_DISPLAY="LinuxFB:/dev/fb0"  
  5. export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"  
  6. export set QWS_KEYBOARD="TTY:/dev/tty1"  
  7. if [ -f /sys/class/input/input0/uevent ] ; then  
  8. export set TSLIB_TSDEVICE=/dev/event0  
  9. export set TSLIB_CALIBFILE=/etc/pointercal  
  10. export set TSLIB_COnFFILE=/etc/ts.conf  
  11. export set TSLIB_PLUGINDIR=$QTDIR/lib/ts  
  12. export set QWS_MOUSE_PROTO="TSLIB:/dev/event0"  
  13. fi  
  14. export set QT_QWS_FOnTDIR=$QTDIR/lib/fonts/  
  15. export set PATH=$QTDIR/bin:$PATH  
  16. export set LD_LIBRARY_PATH=$QTDIR/lib:$QTDIR/plugins/imageformats:$LD_LIBRARY_PATH  
  17. if [ -f /etc/pointercal ] ; then  
  18. $QTDIR/bin/QTbeep -qws 1>/dev/null 2>/dev/null  
  19. else  
  20. $QTDIR/bin/ts_calibrate  
  21. $QTDIR/bin/QTbeep -qws 1>/dev/null 2>/dev/null  
  22. fi  

这样我们就可以直接在/etc/init.d/rcS中加入QT4&便可。

(注:此环境变量只影响QT4中启动的程序,进入系统后的环境变量依赖于/etc/profile)


推荐阅读
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文探讨了如何使用pg-promise库在PostgreSQL中高效地批量插入多条记录,包括通过事务和单一查询两种方法。 ... [详细]
  • 配置PHPStudy环境并使用DVWA进行Web安全测试
    本文详细介绍了如何在PHPStudy环境下配置DVWA( Damn Vulnerable Web Application ),并利用该平台进行SQL注入和XSS攻击的练习。通过此过程,读者可以熟悉常见的Web漏洞及其利用方法。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 在项目中使用 Redis 时,了解其不同架构模式(如单节点、主从复制、哨兵模式和集群)对于确保系统的高可用性和扩展性至关重要。本文将详细探讨这些模式的特点和应用场景。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文详细介绍如何通过设置SSH密钥来获取连接GitHub远程仓库的权限,包括生成密钥、添加到GitHub账户以及验证连接等步骤。 ... [详细]
  • 性能测试工具的选择与应用
    本文探讨了性能测试工具的重要性及其在软件测试中的作用,重点介绍了选择合适性能测试工具的考量因素,并对几种常用的性能测试工具进行了对比分析。 ... [详细]
  • 使用ASP.NET与jQuery实现TextBox内容复制到剪贴板
    本文将介绍如何利用ASP.NET结合jQuery插件,实现将多行文本框(TextBox)中的内容复制到用户的本地剪贴板上。该方法主要适用于Internet Explorer浏览器。 ... [详细]
  • 本文详细介绍了如何在Spring Boot项目中配置Maven的pom.xml文件,包括项目的基本信息、依赖管理及构建插件的设置。 ... [详细]
  • Spring Boot + MyBatis Plus 实现SQL语句打印的两种方法
    本文详细介绍了如何在Spring Boot和MyBatis Plus环境中实现SQL语句打印的两种方法,包括配置文件设置和多数据源环境下的动态配置。适合开发者在日常开发和调试过程中参考。 ... [详细]
author-avatar
阿芙2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有