minigui+tslib编译全过程(3)

minigui+tslib编译全过程(1)  主要文档都是fp完成的,我只是在他的基础上修改了一些文章中的小错误。第一部分:minigui-1.3.3移植到SEP4020EVB详解在这里只讲怎样将minigui-1.3.3移植到开发板EVB-SEP4020上去,在pc上安装minigui-1.3.3不用讲,这里我用到的交叉编译器是arm-linux-gcc3.4.1MiniGUI 的编译需要一些库文件,缺省我们的 gcc 基本上 阅读详情

第三部分:tslib和minigui的链接

完成了对 tslib 的交叉编译之后,
下一步的事情就是改写 MiniGUI 的 IAL 引擎。MiniGUI自带的 IAL 输入引擎中,有一个叫做 dummy.c。为了尽可能简单,在这里为简单起见就在其基础上稍作修改,使之符合我们的要求即可。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>


#include "common.h"
#include "tslib.h"


#ifdef _DUMMY_IAL


#include <sys/ioctl.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/kd.h>


#include "ial.h"
#include "dummy.h"


#ifndef _DEBUG
#define _DEBUG                    // for debugging
#endif


/* for storing data reading from /dev/touchScreen/0raw */
typedef struct {
       unsigned short pressure;
       unsigned short x;
       unsigned short y;
       unsigned short pad;
} TS_EVENT;


static unsigned char state [NR_KEYS];
static int mousex = 0;
static int mousey = 0;
static TS_EVENT ts_event;
static struct tsdev *ts;


/************************ Low Level Input Operations **********************/
/*
* Mouse operations -- Event
*/
static int mouse_update(void)
{
        return 1;
}


static void mouse_getxy(int *x, int* y)
{
        if (mousex < 0) mousex = 0;
        if (mousey < 0) mousey = 0;
        if (mousex > 639) mousex = 639;
        if (mousey > 479) mousey = 479;


#ifdef _DEBUG
       // printf ("mousex = %d, mousey = %d/n", mousex, mousey);
#endif


       *x = mousex;
       *y = mousey;
}


static int mouse_getbutton(void)
{
        return ts_event.pressure;
}


#ifdef _LITE_VERSION
static int wait_event (int which, int maxfd, fd_set *in, fd_set *out, fd_set *except,
                        struct timeval *timeout)
#else
static int wait_event (int which, fd_set *in, fd_set *out, fd_set *except,
                        struct timeval *timeout)
#endif
{
        struct ts_sample sample;
        int ret = 0;
        int fd;
        fd_set rfds;
        int e;


       if (!in) {
              in = &rfds;
              FD_ZERO (in);
       }


fd = ts_fd(ts);


       if ((which & IAL_MOUSEEVENT) && fd >= 0) {
              FD_SET (fd, in);
#ifdef _LITE_VERSION
              if (fd > maxfd) maxfd = fd;
#endif
        }
#ifdef _LITE_VERSION
       e = select (maxfd + 1, in, out, except, timeout) ;
#else
      e = select (FD_SETSIZE, in, out, except, timeout) ;
#endif


       if (e > 0) {


            // input events is coming
             if (fd > 0 && FD_ISSET (fd, in)) {
                   FD_CLR (fd, in);
                   ts_event.x=0;
                  ts_event.y=0;


                  ret = ts_read(ts, &sample, 1);
                  if (ret < 0) {
                        perror("ts_read()");
                        exit(-1);
                  }


                  ts_event.x = sample.x;
                  ts_event.y = sample.y;
                  ts_event.pressure = (sample.pressure > 0 ? 4:0);


               //   if (ts_event.pressure > 0 &&
                     if((ts_event.x >= 0 && ts_event.x <= 639) &&
                        (ts_event.y >= 0 && ts_event.y <= 479)) {
                        mousex = ts_event.x;
                         mousey = ts_event.y;
                   // printf("ts_event.x is %d, ts_event.y is %d------------------------------------->/n",ts_event.x ,ts_event.y);

                   }


//#ifdef _DEBUG
              //    if (ts_event.pressure > 0) {
        //  printf ("mouse down: ts_event.x = %d, ts_event.y = %d,ts_event.pressure = %d/n",ts_event.x,ts_event.y,ts_event.pressure);
               //   }
//#endif
                   ret |= IAL_MOUSEEVENT;


                  return (ret);
             }


      }
       else if (e < 0) {
             return -1;
      }


       return (ret);
}BOOL InitDummyInput(INPUT* input, const char* mdev, const char* mtype)
{
      char *ts_device = NULL;


       if ((ts_device = getenv("TSLIB_TSDEVICE")) != NULL) {


            // open touch screen event device in blocking mode
            ts = ts_open(ts_device, 0);
      } else {
#ifdef USE_INPUT_API
             ts = ts_open("/dev/input/0raw", 0);
#else
             ts = ts_open("/dev/touchscreen/ucb1x00", 0);
#endif
      }
#ifdef _DEBUG
        printf ("TSLIB_TSDEVICE is open!!!!!!!!!!!/n");
#endif
       if (!ts) {
           perror("ts_open()");
             exit(-1);
       }


      if (ts_config(ts)) {
            perror("ts_config()");
            exit(-1);
       }


      input->update_mouse = mouse_update;
      input->get_mouse_xy = mouse_getxy;
      input->set_mouse_xy = NULL;
      input->get_mouse_button = mouse_getbutton;
      input->set_mouse_range = NULL;


      input->wait_event = wait_event;
      mousex = 0;
      mousey = 0;
      ts_event.x = ts_event.y = ts_event.pressure = 0;


       return TRUE;
}


void TermDummyInput(void)
{
      if (ts)
            ts_close(ts);
}


#endif /* _DUMMY_IAL */

修改好minigui的引擎文件后就可以对minigui进行重新编译了,因为用到了 tslib 库,所以必须在编译的时候告诉 MiniGUI 到哪里去找到 tslib 相关的头文件和共享库文件。具体做法如下所示:
   [root
@root]# cd /root/cross/libminigui-1.3.3
   [root@libminigui-1.3.3]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux --disable-galqvfb --disable-galecoslcd --
disable-vbfsupport --prefix=/usr/local/arm/3.4.1/arm-linux CFLAGS="-I/usr/local/arm/3.4.1/arm-linux/include -L/usr/local/arm/3.4.1/arm-linux/lib -lts"

 

如果在fedora下编译的话只需要 make menuconfig,并在下面添加这么一句哈:


   [root@ libminigui-1.3.3]# make
   [root@ libminigui-1.3.3]# make install
   
这里说一下为什么要指定 CFLAGS 标志。其实,通过指定这个标志,告诉编译器应该到哪里去找 tslib 有关的头文件和共享文件, -lts则告诉链接器最后生成的 MiniGUI 的共享库文件最后要和 ts 库(ts 是 touchscreen 的缩写)链接。

按照在minigui编译中所说的文件复制方式将需要的文件复制到文件系统中。

如下:
●库文件
把 /usr/local/arm/3.4.1/arm-linux/lib 中相应的库拷到 /home/fp/nfs/lib 目录下去
下面是我拷的库文件:

libjpeg.a libmgext-1.3.so.3 libminigui.a libpng.so.2 libttf.a libz.so
libjpeg.la libmgext-1.3.so.3.0.0 libminigui.la libpng.so.2.1.0.10rc1 libttf.so libz.so.1
libjpeg.so libmgext.a libminigui.so libpopt.a libvcongui-1.3.so.3 libz.so.1.2.3
libjpeg.so.62 libmgext.la libm.so libpopt.la libvcongui-1.3.so.3.0.0 minigui
libjpeg.so.62.0.0 libmgext.so libm.so.6 libpopt.so libvcongui.a shared
libm-2.2.3.so libminigui-1.3.so.3 libpng.a libpopt.so.0 libvcongui.la
libm.a libminigui-1.3.so.3.0.0 libpng.so libpopt.so.0.0.0 libvcongui.so

其中一些 .a 的静态库是不需要拷过去的,另外要运行c程序还需要拷一些libc标准库进去,我图方便,直接将整个/usr/local/arm/3.4.1/arm-linux/lib考到/home/fp/nfs下面,呵,懒人的做法

OK
,库文件准备完毕


●资源文件
下面把资源文件也拷过来,还记得吗,在前面 搭建 PC 环境中讲过安装资源文件,它被装在了 /usr/local/lib 目录下,一个叫 minigui 的目录,我们要做的就是把它拷过来

[Root]# cp –r –a /usr/local/lib/minigui /home/fp/nfs/lib/minigui
连目录一起拷过来,目录结构和主机一样

●配置文件
把配置文件也拷过来

[Root]# cp /usr/local/arm/3.4.1/arm-linux/etc/MiniGUI.cfg /home/fp/nfs/usr/local/etc/
记住,保持目录结构的一致

修改 MiniGUI.cfg ,如下

[system]
# IAL engine
ial_engine=dummy //
这里修改,我用的是触摸屏,所以就用dummy肯定不会错

mdev=/dev/tp       //
解摸屏
mtype=none

[fbcon]
defaultmode=240x320-16bpp //
根据你的LCD大小自己设置,设置错误minigui 就启动不了

还有一点就是要将文件中的所有/usr/local/替换为/  。

 

编译好了libminigui-1.3.3还需要重新编译综合实例mde-1.3.0
   [root
@root]# cd /root/cross/mde-1.3.0

   [root@mde-1.3.0]#  ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux  CFLAGS="-I/usr/local/arm/3.4.1/arm-linux/include -L/usr/local/arm/3.4.1/arm-linux/lib -lts"
   [root@ mde-1.3.0]# make
   [root@ mde-1.3.0]# make install


编译完这两个,再把/usr/local/arm/3.4.1/arm-linux 下的lib文件夹复制到/nfs/下面,将/root/cross/mde-1.3.0下的实例文件夹复制到/nfs/demo/下面

重新上电,跑demo下的各种综合程序,这时tslib就已经能够为minigui服务了

 

用tslib为MiniGUI提供触摸屏IAL引擎.rar 用tslib为MiniGUI提供触摸屏IAL引擎,描述了在linux下移植2410的MiniGui的触摸屏的IAL层。 立即下载

相关推荐

GuiLite移植之星空效果展示

GuiLite移植之星空效果展示,平台:STM32L4R9,640K RAM,2048K FLASH RTOS:FreeRTOS UI:GuiLite,https://gitee.com/idea4good/GuiLite.git 屏幕:ST7789

移植MiniGUI的调试记录

将minigui移植到目标上:1,复制libc,ld等工具到/lib中;2,复制库文件将库文件拷贝到/lib下,资源文件到/lib/minigui下,修改/usr/local/etc/Minigui.cfg将所有/usr/local/lib 替换成/lib3,建立mknod fb c 29 0/dev/input下建mknod mice c 13 63Tslib交叉编译环境问题心得  Q1:在

2466

基于minigui的触摸屏软键盘设计

基于minigui的触摸屏软键盘设计,用于嵌入式系统设计

minigui增加tslib触摸屏响应

1、修改minigui库中IAL的输入引擎,增加对触摸屏的操作         定义: static struct tsdev *ts;          打开:              ts = ts_open ("/dev/input/event0", 0);              ts_config(ts);          关闭:               ts_cl

zcg1041的专栏 2857

Benchmark系列——基本概念和分类

本文主要介绍了Benchmark的基本概念和分类情况。

Bluetangos的博客 8437

利用wolcmd.exe批处理执行远程唤醒

代码如下: @echo off cls :check if exist wolcmd.exe goto targetmac echo 缺少wolcmd.exe echo. goto end :targetmac cls echo -------------------------------------------------------- echo 目标主机PC-01地址:40235678A...

Chriseo的博客 6947

minigui+tslib编译全过程

上次移植minigui,这次继续上次的移植,往4020上移植tslib 。大概方法是通过 tslib 来构建 MiniGUI 的输入引擎。tslib 是 一个用于触摸屏设备的函数库。通过这样一个函数库,可以将编程者从繁琐的数据处理中解脱出来。为什么会出现这样的情况呢?因为触摸屏的坐标和液晶显示屏之 间的坐标并不是一一对应的,所以,要让从触摸屏上得到的坐标正确转换为液晶显示屏上的坐标,需要经过一个...

weixin_33991418的博客 163

医学图像配准实战:用Python实现MIND特征提取(附完整代码)

本文详细介绍了MIND(模态无关邻域描述符)在医学图像配准中的应用。通过Python和PyTorch实战,从原理到代码逐步解析了如何提取MIND特征,并利用其对结构而非灰度的感知能力,有效解决CT、MRI等多模态图像的对齐难题,为病灶追踪、手术导航等高级应用提供鲁棒性基础。

263

minigui+tslib编译全过程(触摸屏)转

<br /><br />上次移植minigui,这次继续上次的移植,往4020上移植tslib 。大概方法是通过 tslib 来构建 MiniGUI 的输入引擎。tslib 是 一个用于触摸屏设备的函数库。通过这样一个函数库,可以将编程者从繁琐的数据处理中解脱出来。为什么会出现这样的情况呢?因为触摸屏的坐标和液晶显示屏之 间的坐标并不是一一对应的,所以,要让从触摸屏上得到的坐标正确转换为液晶显示屏上的坐标,需要经过一个转换过程。除此之外,tslib 还以插件的形式提供了一些附加的功能,比如去除点击触摸屏时的

兰尘墨世 1027

AES攻击方法 :差分密码分析 boomerang attack飞去来器攻击

AES具有123比特的分组长度,三种可选的密钥长度(128,192,256) AES是一个迭代型密码,轮数依赖于密钥长度。如果密钥长度为128比特,则轮数为10;如果密钥长度为192比特,则轮数为12;如果密钥长度为256比特,则轮数为14; 混淆(Confusion) 混淆是为了让密钥与密文的统计信息之间的关系变得复杂,从而增加通过统计方法进行攻击的难度。混淆可以通过各种代换算法实现,如S盒、乘法(加)与异或等运算组合,为非线性部件。 扩散(Diffusion) 扩散是为了让明文的单个比特影像到

m0_67105022的博客 3491

在Modelsim中手动添加仿真库

缘由:在使用rom ip核的时候发现仿真需要altera_mf库的支持,而我的ModelSim没有这个库,所以想写一篇手动添加仿真库的文章方便自己以后使用:首先新建一个库,名字叫做altera_mf:然后编译对应的库文件:这里altera_mf.v文件是在quartus安装路径下quartus\eda\sim_lib文件夹下,点击编译后退出:最后在modelsim->example文件夹下可以找到编译好的库文件:

欢迎一起交流问题! 3402

minigui+tslib编译全过程(2)

 第二部分:tslib-1.3.3移植到SEP4020  上次移植minigui,这次继续上次的移植,往4020上移植tslib 。大概方法是通过 tslib 来构建 MiniGUI 的输入引擎。tslib 是一个用于触摸屏设备的函数库。通过这样一个函数库,可以将编程者从繁琐的数据处理中解脱出来。为什么会出现这样的情况呢?因为触摸屏的坐标和液晶显示屏之间的坐标并不是一一对应的,所以,要让从

技术点亮人生,成功通向卓越 2813

Grok 3国内怎么用?超详细使用指南+实用指令模板

主要是用于快速分析学术论文,提取关键信息,总结研究成果。Analyze the following research paper: [粘贴或上传论文内容]1. Extract key findings, methodologies, and conclusions. (提取主要发现、方法和结论。2. Identify statistical significance and data points. (识别统计显著性和数据点。

Survivor_sl的博客 1万+

minigui 1.6.10 + tslib 触摸屏较正方案

移植tslib1.3 tslib和minigui的链接 测试 说明:因为最近做PDA,要实现摄像头功能,而我的开发板mini2440,只有一个USB,而我的摄像头是USB的,鼠标没办法用了,只能用触摸笔,而触摸坐标非常不准,首先想到了qt下用的tslib,网上找了一下,还真有minigui+tslib的触摸屏较正方案。经过几天的实验,我在V1.6.0上用tslib加SM

futurepeter的专栏 2047

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

电子技术设计——16×16点阵汉字显示设计

同时,设计还应注重提升显示品质,以保证汉字的稳定展示和观感舒适。本设计的目的是构建一个能够准确在LED点阵上展示汉字的系统,并允许用户通过输入设备来选择所需的汉字,我们将验证设计方案的实际操作性和效果,以确保其满足设计目标。在LED点阵显示和汉字信息处理技术的结合下,研究者们着手研究如何在LED点阵上有效地显示汉字,并提出了一系列显示算法和优化策略,旨在实现清晰且易于阅读的汉字显示效果。首先,你需要准备16×16的LED点阵面板,通常这些点阵是8×8点阵的两倍,因此可以由两个8×8的点阵组合而成。

weixin_68094467的博客 1533

利用tslib为MiniGui提供触摸屏的IAL引擎(6)----改写IAL引擎

 改写 IAL 引擎    完成了对 tslib 的交叉编译之后,    下一步的事情就是改写 MiniGUI 的 IAL 引擎。MiniGUI自带的 IAL 输入引擎中,有一个叫做 SMDK2410。为了尽可能简单,作者决定在其基础上稍作修改,使之符合我们的要求即可。修改后得到的文件全貌如下(libminigui-1.3.3/src/ial/2410.c) :25 #include 26 #in

1076

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

移植MiniGUI到JZ2440

优快云仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。 尝试将MiniGUI到JZ2440上。 移植所需文件: 文件包名 作用 libminigui-1.6.10.tar.gz MiniGUI开发库 minigui-res-1.6.10.tar.gz MiniGUI资源文件 mg-samples-1.6.10.tar.gz...

hceng_linux 607

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

利用tslib为MiniGui提供触摸屏的IAL引擎(3)----tslib的交叉编译

 tslib的交叉编译Tslib的官方下载地址为一个CVS服务器,下载方法为:[root@localhost]#export CVSROOT=:pserver:cvs@pubcvs.arm.linux.org.uk:/mnt/src/cvsroot[root@localhost]#cvs login[root@localhost]#cvs co tslib获得Tslib的源

666

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

9G45平台MiniGUI3.0.12移植总结

以前接触MiniGUI近2年的时间,也没有做过MiniGUI的移植工作,近日利用d

yzlworld的专栏 2183

minigui V1.6.10 + tslib 触摸屏较正完美解决方案

作者:黄思华   地址:华侨大学信息学院 说明:因为最近做PDA,要实现摄像头功能,而我的开发板mini2440,只有一个USB,而我的摄像头是USB的,鼠标没办法用了,只能用触摸笔,而触摸坐标非常不准,首先想到了qt下用的tslib,网上找了一下,还真有minigui+tslib的触摸屏较正方案。经过几天的实验,我在V1.6.0上用tslib加SMDK2410实现了触摸屏较正,也在V1.6.

huangsihua的专栏 6339

MiniGui核心库编译配置选项

MiniGui的具体选项基本上都是基于–disable-FEATURE和–enable-FEATURE实现的。–disable-FEATURE选项禁止某项特性,也就是在函数库中将不支持该特性。–enable-FEATURE选项打开某项特性,也就是在函数库中支持该项特性。另外MiniGui还提供–with选项,该选项可用来从多个选项中指定某一个选项。

逐梦的博客 2091
上一篇: minigui+tslib编译全过程(2)
下一篇: 关于4020和深圳
myleeming
博客等级 码龄18年 75粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值