zoukankan      html  css  js  c++  java
  • FL2440 Linux-3.0内核触摸屏的支持

     ------------------------------------------------------------------------------------------------------------------------------

    交叉编译器:arm-linux-gcc-4.5.4

    Linux内核版本:Linux-3.0 

    主机操作系统:Centos 6.5

    开发板:FL2440 

    ------------------------------------------------------------------------------------------------------------------------------

    参考博客:

    http://www.qtcn.org/bbs/read.php?tid=10373

    http://blog.csdn.net/huangan_xixi/article/details/49430807

    所需源码:

    tslib-1.4.gz.bz2  http://vdisk.weibo.com/s/AcUHxOERV2k0

     

    Qt,Qt/E,Qtopia Core,Qtopia的区别:

    Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。

    Qt/E(Qt/Embedded)是用于嵌入式Linux系统的Qt版本。Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中。

    Qtopia是一个构建于Qt/E之上的类似桌面系统的应用环境。相比之下,Qt/E是基础类库。

    Qtopia Core:就是原来的Qt/E,大概从Qt 4开始改名,把Qtopia Core并到Qtopia的产品线中去了。但实际上Qtopia Core就相当于原来的Qt/E,仍然作为基础类库。

     

    一、编译内核使其支持触摸屏

    Linux-3.0已经有了触摸屏的驱动,只需要修改内核代码为其添加触摸屏的支持就可以了。只需修改一下使其支持s3c2440就可以了。

    1、修改内核源代码:

    (1)#vim arch/arm/mach-s3c2440/mach-smdk2440.c

    添加头文件:

    #include <plat/ts.h>

    找个合适的位置添加以下结构体:

    static struct s3c2410_ts_mach_info smdk2440_ts_cfg __initdata = {

            .delay = 10000,
            .presc = 49,
            .oversampling_shift = 2,
    };

    修改结构体:

    static struct platform_device *smdk2440_devices[] __initdata = {

         &s3c_device_ohci,
         &s3c_device_lcd,
         &s3c_device_wdt,
         &s3c_device_i2c0,
         &s3c_device_iis,
         &s3c_device_dm9000,
         &s3c_device_adc,    
         &s3c_device_ts,    
    };

    static void __init smdk2440_machine_init(void)
     {
         s3c24xx_fb_set_platdata(&smdk2440_fb_info);
         s3c24xx_ts_set_platdata(&smdk2440_ts_cfg);    /* add toucg screen info by */
         s3c_i2c0_set_platdata(NULL);
         platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
         smdk_machine_init();
    }

    (2)#vim  drivers/input/touchscreen/s3c2410_ts.c

    添加代码:

    input_report_key(ts.input, BTN_TOUCH, 1);
    input_report_abs(ts.input, ABS_PRESSURE, 1);
    input_sync(ts.input);

     

    input_report_key(ts.input, BTN_TOUCH, 0);
    input_report_abs(ts.input, ABS_PRESSURE, 0);
    input_sync(ts.input);

     

    ts.input = input_dev;
    ts.input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS)   //将这句删除
    ts.input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) | BIT(EV_SYN);   //添加这句
    ts.input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
    input_set_abs_params(ts.input, ABS_X, 0, 0x3FF, 0, 0);
    input_set_abs_params(ts.input, ABS_Y, 0, 0x3FF, 0, 0);
    input_set_abs_params(ts.input, ABS_PRESSURE, 0, 1, 0, 0); /*add */
     
    2、修改make menuconfig
    #make menuconfig
    Device Drivers  --->
      Input device support  ---> 
        [*]   Touchscreens  ---> 
          <*>   Samsung S3C2410/generic touchscreen input driver
     
    3、重新编译内核并烧录到开发板上面,查看是否修改成功:

    ~ >: ls dev/event0
    dev/event0

    在dev/目录下有event0说明移植成功。

    二、移植tslib库到开发板上
     
    大概步骤:编译tslib生成bin,etc,include,lib等文件打包放到自己的开发板上面-->修改开发板上面的环境变量到生成的库函数
     
    下载tslib-1.4.gz.bz2并解压缩,进入到tslib目录下
     
    执行./autogen.sh命令生成.configure文件
     
    若出现autoreconf:command not found 这个问题,则需要下载automake:
    #yum install -y automake
     
    还有其他情况可能需要下载libtool:
    #yum install -y libtool
     
    执行./configure命令
    #./configure --prefix=(你自己的安装目录) --host=arm-linux ac_cv_func_malloc_0_nonnull=yes  CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
    #make
    #make install
     
    进入到自己的安装目录,将目录下的bin,etc,include,lib四个文件打包放到自己的开发板上面,我的放在/apps/etc/qt/下。
     
    下面是在自己的开发板上面做的:
     
    修改环境变量:
    #vi /etc/profile

    # /etc/profile: system-wide .profile file for the Bourne shells.
    export TSLIB_ROOT=/apps/tslib   (解压出四个文件夹所在的目录)
    export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf (tslib模块配置文件)
    export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal (告诉QTOPIA,pointercal文件在哪里)
    export TSLIB_TSDEVICE=/dev/input/event0 (触摸屏设备节点文件)
    export TSLIB_CONSOLEDEVICE=none(tslib运行需要的控制台,这里是LCD屏幕,设定的控制台设备为none,默认为/dev/tty)
    export TSLIB_FBDEVICE=/dev/fb0 (framebuffer设备文件)
    export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts(tslib插件库目录)

    export LD_LIBRARY_PATH=/lib:/usr/lib:/apps/tslib/lib(设置你tslib下lib的路径,让系统能够找到)

    #source /etc/profile  使能环境变量

    #vi /apps/etc/qt/etc/ts.conf  将#module_raw input 前面的#号给删了,不然后面执行校检程序的时候不能校检会出现以下错误:

    No raw modules loaded.
    ts_config: No such file or directory

    #./apps/etc/qt/bin/ts_calibrate

    若没有错误则屏幕上面会依次出现四个校验点,手指点中校验即可。若出现错误则参考一下链接:

    http://blog.csdn.net/xiaoyangger/article/details/5369961

    到此开发板就已经支持触屏了。
  • 相关阅读:
    数据访问层之Repository
    IIS执行原理
    异常分析
    Logger
    JSTL
    Kubernetes
    NET Core WordPress
    net平台的rabbitmq
    MySQL can’t specify target table for update in FROM clause
    EqualsBuilder和HashCodeBuilder
  • 原文地址:https://www.cnblogs.com/xiaohexiansheng/p/5730512.html
Copyright © 2011-2022 走看看