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

基于beagleboardxm的触摸屏移植和Qt4.6.2移植

本文均属自己阅读源码的点滴总结,转账请注明出处谢谢。欢迎和大家交流。qq:1037701636email:gzzaigcn2009163.com,gz

本文均属自己阅读源码的点滴总结,转账请注明出处谢谢。

欢迎和大家交流。qq:1037701636 email: gzzaigcn2009@163.com,gzzaigcn2012@gmail.com

 

 

过去的一周,大概不到5天由于项目的部分需求暂时需要使用到触摸屏,所以暂时停下来做了一下bb-xm的触摸屏移植和Qt的支持。

学是必须的,写代码是必须的,看代码是必须的,整理文档也是必须的。

下面就简单和大家分享过去一周的成果。

1.先是简单介绍Qt4.6.2的移植部分,其实移植早做好了,只是现在想增加触摸屏对qt的支持,所以给出如下qt的编译配置:

./configure -prefix /home/Qt/lib_arm -opensource -confirm-license -release -shared -embedded arm -xplatform qws/linux-arm-g++ -depths 8,16,24,32 -fast -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -little-endian -host-little-endian -no-qt3support -no-libtiff -no-libmng -no-opengl -no-mmx -no-sse -no-sse2 -no-3dnow -no-openssl -no-webkit -no-phonon -no-nis -no-opengl -no-cups -no-glib -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -nomake examples -nomake tools -nomake docs -qt-mouse-tslib -I /home/Qt/tslib/include -L /home/Qt/tslib/lib -verbose

-qt-mouse-tslib -I /home/Qt/tslib/include -L /home/Qt/tslib/lib这部分是Qt支持触摸屏的关键,-I和-L分别制定了tslib所在的库和头文件,说道这里tslib的编译简单如下:

步骤:
./autogen.sh
export CC=/opt/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc
export PATH=/opt/CodeSourcery/Sourcery_G++_Lite/bin/:$PATH
./configure --prefix=/home/Qt/tslib --host=arm-linux --cache-file=arm-linux.cache
make
make install
出现错误:
Can't exec "libtoolize": No such file or directory at /usr/bin/autoreconf line 196.
Use of uninitialized value in pattern match (m//) at /usr/bin/autoreconf line 196.
configure.ac:25: error: possibly undefined macro: AC_DISABLE_STATIC
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
configure.ac:26: error: possibly undefined macro: AC_ENABLE_SHARED
configure.ac:27: error: possibly undefined macro: AC_LIBTOOL_DLOPEN
configure.ac:28: error: possibly undefined macro: AC_PROG_LIBTOOL
autoreconf: /usr/bin/autoconf failed with exit status: 1
执行apt-get install libtool即可解决;
接上面的内容:其实Qt的配置蕴含了很多关键点,通过以上配置完成Qt库的交叉编译,生成库文件,在编译qt程序时只需要将qmake路径指定就可以,qmake生成makefile等会将原先配置的编译器以及额外需要的链接库加入进去。现在对整个Linux世界的编译有了很深入的了解,基本到达了汇编级别。嘿嘿。
完成了以上内容哦就是库拷贝到系统的文件系统中去,至于放在哪里,取决于你自己的环境变量设置。当然,如果对Linux系统整个启动过程有很好的了解的话,可以很好的来实现程序的启动。
对于触摸屏的Qt,由于程序默认编译好后就链接了libtslib....的库,所以在运行时肯定会去找这个库,需要设置Qt的环境变量,这里不再多说。
注意点:
No raw modules loaded.
Couldnt load module input
No raw modules loaded.
QWSTslibMouseHandlerPrivate: ts_config() failed with error: 'No such file or directory'
Please check your tslib installation!:
需要有环境变量export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts,需要修改ts,conf的文件选择module_raw,不能有空格否则会出现sgualment 错误。
如果需要Qt永久不出现鼠标的图像:配置时添加-no-feature-CURSOR;
下面把beagleboard-xm部分移植触摸屏介绍一下,这方面好像很多只能在国外的论坛上见到,我这里也是简单的移植,毕竟和内核打交道我知道难度的所在,如果要完全弄懂一个月都够我消化的。
TSC2046和ADS7846两个处理器完全一样,包括引脚和工作原理,考虑到DM3730不具备现成的触摸屏控制器,所以才会外接触摸屏驱动控制器;控制触摸屏ADS7846采用MCSPI多通道串口来完成对采样到的数据的读取。MCSPI3工作在模式0的状态。
在beagleboard中涉及到ads7846核心驱动部分的代码主要位于:
/arch/arm/mach_omap2.c下面,这里要做的其实就是在系统在未Init_module的时候,先在内核注册相关的设备,整对bb-xm是通过mcspi与ads7846进行交互的,所以需要在噶源码初添加对ads7846的支持,代码如下:

//by gzz
#ifdef CONFIG_TOUCHSCREEN_ADS7846#define OMAP3_BEAGLE_TS_GPIO 162 /* gpio_133 for v1.0 */#include
#include
#include //for ads7864 touchscreen static struct omap2_mcspi_device_config ads7846_mcspi_config = {.turbo_mode = 0,.single_channel = 1, /* 0: slave, 1: master */
};static int ads7846_get_pendown_state(void)
{return !gpio_get_value(OMAP3_BEAGLE_TS_GPIO);
}struct ads7846_platform_data ads7846_config = {.x_max = 0x0fff,.y_max = 0x0fff,.x_plate_ohms = 180,.pressure_max = 255,.debounce_max = 10,.debounce_tol = 3,.debounce_rep = 1,.get_pendown_state = ads7846_get_pendown_state,.keep_vref_on = 1,.settle_delay_usecs = 150,.wakeup = true,
};struct spi_board_info omap3beagle_spi_board_info[] = {[0] = {.modalias = "ads7846",.bus_num = 3,.chip_select = 0,.max_speed_hz = 1500000,.controller_data = &ads7846_mcspi_config,.irq = OMAP_GPIO_IRQ(OMAP3_BEAGLE_TS_GPIO),.platform_data = &ads7846_config,},
};static void ads7846_dev_init(void)
{printk("Initialize ads7846 touch screen controller\n");if (gpio_request(OMAP3_BEAGLE_TS_GPIO, "ADS7846 pendown") <0)printk(KERN_ERR "can&#39;t get ads7846 pen down GPIO\n");gpio_direction_input(OMAP3_BEAGLE_TS_GPIO);omap_set_gpio_debounce(OMAP3_BEAGLE_TS_GPIO, 1);omap_set_gpio_debounce_time(OMAP3_BEAGLE_TS_GPIO, 0xa);
}#else
static inline void __init ads7846_dev_init(void) { return; }
#endif
加入该部分代码后再在该模块初始化函数omap3_beagle_init中

&#43;&#xff1a;spi_register_board_info(omap3beagle_spi_board_info, ARRAY_SIZE(omap3beagle_spi_board_info));//by gzz
&#43;&#xff1a;ads7846_dev_init();//bg gzz
对以上两部分代码昨晚添加工作后&#xff0c;其实整个核心的移植已经完成&#xff0c;因为内核很好的完成了mcspi和ads7846的架构和代码&#xff08;开源的世界就是博大&#xff09;&#xff0c;无论是spi数据的收发&#xff0c;都安装合理的架构完成&#xff0c;
核心的是spi_transfer和spi_message,前者表示一个命令字和数据&#xff0c;通常一次对ads的操作&#xff0c;包括2个spi_transfer&#xff0c;一个spi_message,将spi_message写如对于 spi_master完成数据的发送以及接受。
在完成代码的modify后&#xff0c;就需要配置内核的.config文件&#xff0c;通过图形或者收到添加对触摸屏的驱动支持&#xff0c;这里不再多说。。
以上部分的整个流程下去&#xff0c;系统就可以正常使用触摸屏了。自己再配置一下触摸屏矫正程序&#xff0c;整个简单的触摸屏以及qt的移植就完成了&#xff0c;继续努力&#xff0c;感觉自己压力很大很大&#xff0c;加油吧&#xff0c;你不是一个人在奋斗。加油、、、

 


推荐阅读
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文深入探讨了MDK链接脚本的应用与优化技巧。首先,文章介绍了链接脚本的基本概念及其在嵌入式系统开发中的重要性。接着,通过具体实例详细分析了链接脚本的结构和功能,特别是在程序在FLASH中运行时,如何优化链接脚本以提高系统性能。此外,文章还讨论了无需将程序加载到SRAM中的技术细节,为开发者提供了实用的参考和指导。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
author-avatar
121lzg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有