linux嵌入式贪吃蛇

目标:用游戏手柄控制贪吃蛇

硬件平台:imax6q

版本信息: arm-none-linux-gnueabi-gcc-4.8.3、 qt5.7.1、linux3.0.1

一、交叉编译tslib1.4

由于 imax6q是 armv7-a 构架,所以以后的编译我们都应编译出 armv7 平台的文件

编译参数:

echo ‘ac_cv_func_malloc_0_nonnull=yes’ > arm-linux.cache

CFLAGS=-march=armv7-a ./configure -host=arm-linux -cache-file=arm-linux.cache -prefix=/usr/local/tslib_v7

编译成功后 我们验证下

验证

二、编译qt4.7.1

安装依赖

apt-get install libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev libxcb-xinerama0-dev xorg-dev zlib1g-dev

修改qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

#
# qmake configuration for building with arm-linux-gnueabi-g++
#MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublibQT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-ainclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)# modifications to g++.conf
QMAKE_CC                = arm-none-linux-gnueabi-gcc
QMAKE_CXX               = arm-none-linux-gnueabi-g++
QMAKE_LINK              = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy
QMAKE_NM                = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP             = arm-none-linux-gnueabi-strip
load(qt_config)

下面是我的配置脚本

#!/bin/sh./configure \-v \
    -prefix /opt/armv7_qt-5.7.0 \
    -release \
    -opensource \
    -make libs \
    -xplatform linux-arm-gnueabi-g++ \
    -optimized-qmake \
    -pch \
    -qt-sql-sqlite \
    -qt-libjpeg \
    -qt-zlib \
    -no-opengl \
    -skip qt3d \
    -skip qtcanvas3d \
    -skip qtpurchasing \
    -no-sse2 \
    -no-openssl \
    -no-nis \
    -no-cups \
    -no-glib \
    -no-iconv \
    -nomake examples \
    -nomake tools \
    -skip qtvirtualkeyboard \
    -I/usr/local/tslib_v7/include \
    -L/usr/local/tslib_v7/lib

exit

这是我的arm环境变量

export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt-5.7.0   
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=input         
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts    
export TSLIB_CONSOLEDEVICE=none                
export TSLIB_FBDEVICE=/dev/fb0             
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins    #很重要                                          
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0                                                      
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts           
export QT_QPA_GENERIC_PLUGINS=tslib
export QWS_USB_KEYBOARD=/dev/input/event4     #键盘支持

具体编译过程我就不再细说,网上教程很多

http://blog.csdn.net/u012175418/article/details/52704734

完了后在主机配置QT

这里写图片描述

主要是要指定 交叉编译器的gcc、g++,和qt的qmake

  1. 驱动移植

对于驱动想法我是 用 内核的usbmouse.c 为模版,进行修改,由于前期在做游戏手柄驱动时遇到技术问题,我暂时改用 鼠标模拟键盘, 左键、右键、中键、pid 键 分别对应 A、D、W、S。用的典型的 usb + input 系统。

主要修改 中断函数

static void usb_mouse_irq(struct urb *urb)
{struct usb_mouse *mouse = urb->context;signed char *data = mouse->data;struct input_dev *dev = mouse->dev;int status;static unsigned char pre_val;char flag = 255;switch (urb->status) {case 0:         /* success */break;case -ECONNRESET:   /* unlink */case -ENOENT:case -ESHUTDOWN:return;/* -EPIPE:  should clear the halt */default:        /* error */goto resubmit;}if ((pre_val & (1<<0)) != (data[0] & (1<<0))){/* 左键发生了变化 */printk("L KEY \n");input_event(dev, EV_KEY, KEY_A, (data[0] & (1<<0)) ? 1 : 0);input_sync(dev);}if ((pre_val & (1<<1)) != (data[0] & (1<<1))){/* 右键发生了变化 */input_event(dev, EV_KEY, KEY_D, (data[0] & (1<<1)) ? 1 : 0);input_sync(dev);}if (data[2] == 0x15){/* 中键发生了变化 */input_event(dev, EV_KEY, KEY_W, 1);input_event(dev, EV_KEY, KEY_W, 0);input_sync(dev);}pre_val = data[0];if (data[2] == 0x1f ){//printk("orange down");//pre_val = 0x1f;flag = 's';input_event(dev, EV_KEY, KEY_S, 1);input_event(dev, EV_KEY, KEY_S, 0);input_sync(dev);}

input 的初始化也得改

input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);/*input_dev->keybit[BIT_WORD(KEY_W)] = BIT_MASK(KEY_A) |BIT_MASK(KEY_D) | BIT_MASK(KEY_S);input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) |BIT_MASK(BTN_EXTRA);input_dev->relbit[0] |= BIT_MASK(REL_WHEEL);*///set_bit(KEY_A, input_dev->keybit);for (i = 0; i < 255; i++)set_bit(usb_kbd_keycode[i], input_dev->keybit);

这里的usb_kbd_key_code 是借用usb键盘的代码。

附上测试视屏 (在文章底部,这是我的另一个博客)

欢迎大家留言提问交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.联邦模式配置---扩容,负载均衡

原理图 两个集群---目的&#xff1a;扩容 HA联邦模式解决了单纯HA模式的性能瓶颈&#xff08;主要指Namenode、ResourceManager&#xff09;&#xff0c;将整个HA集群划分为两个以上的集群&#xff0c;不同的集群之间通过Federation进行连接&#xff0c;使得HA集群拥有了横向扩…

树莓派交叉编译(PS交叉编译链下载安装、配置永久环境变量、带WiringPi库交叉编译、软链接)

目录一、本章概述二、交叉编译工具链的下载安装下载安装交叉编译链临时有效交叉编译链永久有效三、交叉编译的使用对比gcc与armgccPC端交叉编译发送到树莓派运行四、带WiringPi库的交叉编译如何处理复制树莓派上的WiringPi库到主机软硬链接交叉编译一、本章概述 下面将详细介绍…

海量数据处理分析(部分)

2019独角兽企业重金招聘Python工程师标准>>> 1. 海量数据处理分析 原文地址&#xff1a; http://blog.csdn.net/DaiZiLiang/archive/2006/12/06/1432193.aspx 笔者在实际工作中&#xff0c;有幸接触到海量的数据处理问题&#xff0c;对其进行处理是一项艰巨而复…

android p wifi一直在扫描_在Android上的每次WiFi扫描之间我应该使用什么时间间隔?...

我需要定期执行Wifi扫描.当时间间隔设置为1-2秒时,我遇到了问题.好像我没有得到任何ScanResult.是否有最短的时间设置,以便WifiManager能够执行成功的WiFi扫描&#xff1f;这是代码.我正在使用服务进行Wifi扫描&#xff1a;public class WifiScanning extends Service{private …

uboot2015–启动流程分析 imx6q

最近项目原因&#xff0c;要在uboot中增加内核验校和内核损坏修复功能&#xff0c;所以需要回头看看uboot。这次选择了uboot2015来进行分析 uboot是明远睿智提供的。 下载地址 链接&#xff1a;https://pan.baidu.com/s/13SuRii3WTqvFTNIsSS9GAg 密码&#xff1a;65zz 环境&…

树莓派内核开发准备(内核源码获取、启动过程、源码目录树)

目录1.交叉编译工具的安装2.内核源码获取3.嵌入式设备带操作系统的启动过程扫盲4.Linux内核源码树扫盲1.内核源码简介2.Linux内核源代码目录树结构tree指令查看内核源码目录树1.交叉编译工具的安装 参照我之前的笔记 2.内核源码获取 下载哪个版本取决于树莓派的版本&#xf…

linux修改文件句柄数生效_修改Linux的open files参数是,立即生效,无需重启

通过命令ulimit -a查看的open files参数的修改&#xff1a;core file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (…

柯乐义猜数字游戏

游戏规则&#xff1a;柯乐义请您玩猜数字游戏。后台已经随机生成了一个100到999之间的数字。如果您能在10次之内猜出这个数字&#xff0c;则游戏成功&#xff0c;否则失败。请开始吧。 SilverLight 猜数字游戏&#xff1a;http://keleyi.com/keleyi/phtml/silverlight/ 一次猜数…

fsdisk 分区

芯片主控&#xff1a;imx6q http://lornyin.top/?p545 昨天在做一个linux嵌入式项目时要修改板子的分区&#xff0c;查看了ucl2.xml &#xff08;mfgtool&#xff09;文件后&#xff0c;找到了他的分区脚本 #!/bin/sh# partition size in MB BOOT_ROM_SIZE10# call sfdisk …

树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核

目录一、树莓派Linux源码配置(适合树莓派)总体概述配置的三种方式1.照搬厂家的配置&#xff08;使用这种方式&#xff09;2.参考厂家的配置&#xff08;感受一下&#xff09;3.完全自主配置&#xff08;需要一定工作经验&#xff09;二、树莓派Linux内核编译三、树莓派挂载新内…

xshell连接linux出现乱码

今天用Xshell连接linux&#xff0c;查看一个脚本&#xff0c;里面有中文写的注解&#xff0c;出现了乱码&#xff0c;所以记录一下&#xff0c;以便下次用到&#xff0c;也可以帮助遇到同样问题的小伙伴。 以下是乱码的截图&#xff1a; 我们可以照着下面的方式更改编码&#x…

阡陌路-车行天下之汽车基础知识

汽车基础知识 1、什么是ABS   ABS是Anti-LockBrakeSystem的英文缩写&#xff0c;翻译过来可以叫做“刹车防抱死系统”。在没有ABS时&#xff0c;如果紧急刹车一般会使轮胎 抱死&#xff0c;由于抱死之后轮胎与地面是滑动摩擦&#xff0c;所以刹车的距离会变长。如果前轮锁死…

java版本号分段比较_Java实现比较版本号

涉及到客户端的系统中经常需要用到比较版本号的功能&#xff0c;但是比较版本号又不能完全按照字符串比较的方式去用compareTo之类的方法&#xff1b;这就需要我们总结版本号的通用规则&#xff0c;设计一个比较算法并封装成通用方法来使用&#xff1a;通常版本号如&#xff1a…

win10 重置串口

最近想起了玩玩51单片机&#xff0c;回味下&#xff0c;发现以前板子送人了&#xff0c;于是随便捡了一个下载器来给AT89S52下程序&#xff0c;下载器是通过串口和电脑通讯的, 可是要求串口端口号不能大于10&#xff0c;我的串口号都特别大&#xff0c;于是尝试到设备管理器里修…

ios 视频知识补充---分解LFLiveKit

视频&#xff1a;泛指将一系列的静态影像以电信号的方式捕捉、记录、处理、储存、传送、重现的各种技术。连续的静态图像变化每秒超过24帧&#xff08;frame&#xff09;以上时&#xff0c;由于视觉残留&#xff0c;人眼无法识别单独的静态图片&#xff0c;此时看上去就是平滑且…

快速排序详解以及java实现

快速排序作为一种高效的排序算法被广泛应用&#xff0c;SUN的JDK中的Arrays.sort 方法用的就是快排。 快排采用了经典的分治思想&#xff08;divide and conquer&#xff09;&#xff1a; Divide&#xff1a;选取一个基元X&#xff08;一般选取数组第一个元素&#xff09;&…

机票预订系统活动图_软件工程(第五版)--习题及答案技术总结.docx

PAGE \* MERGEFORMAT43《软件工程》(第五版)习题参考答案第1章 一、判断题1、()软件的维护与硬件维护本质上是相同的。 2、(√)软件在运行和使用中也存在退化问题。 3、()软件危机的产生主要是因为程序设计人员使用了不适当的程序设计语言。 4、(√)软件同其他事物一样&#xf…

android jni ——Field Method -- Accessing Field

现在我们知道了怎样使用native code访问简单的数据类型和引用参考类型&#xff08;string&#xff0c;array&#xff09;&#xff0c;下面我们来介绍怎样让jni代码去访问java中的成员变量和成员函数&#xff0c;然后可以再jni中回调java中的方法。 ---------------------------…

树状数组的建树 单点修改 单点查询 区间修改 区间查询

单点修改 单点查询 用普通数组就能写出来 单点修改 区间查询 用线段树 树状数组&#xff1b; 区间修改 区间查询 用线段树 树状数组&#xff1b; 区间修改 单点查询 用线段树 树状数组&#xff1b; 建树 #include<bits/stdc.h> using namespace std; …

bert 中文 代码 谷歌_如何用最强模型BERT做NLP迁移学习?

作者 | 台湾大学网红教授李宏毅的三名爱徒来源 | 井森堡&#xff0c;不定期更新机器学习技术文并附上质量佳且可读性高的代码。编辑 | Jane谷歌此前发布的NLP模型BERT&#xff0c;在知乎、Reddit上都引起了轰动。其模型效果极好&#xff0c;BERT论文的作者在论文里做的几个实验…