开发环境:

开发板:FL2440(nandflash:K9F1G08 128M)

内核版本:linux-3.0
编译器:arm-linux-gcc 4.3.2

因为内核linux-3.0已经有支持触摸屏的驱动,我们只需要将略做修改使其支持s3c-2440就行了,具体步骤如下:(注意:红色为添加内容)

1 vim arch/arm/mach-s3c2440/mach-smdk2440.c

添加头文件:

#include <plat/ts.h>

适当位置添加如下代码:

/* Touch Screen driver info add by liuchengdeng 2014.08.24 */
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_rtc,
    &s3c_device_dm9000,
    &s3c_device_adc,    /*  modify by liuchengdeng */
    &s3c_device_ts,    /*   modify by liuchengdeng  */
    &uda1340_codec,    /*   modify by liuchengdeng  */
    &s3c24xx_uda134x,  /*   modify by liuchengdeng */
    &samsung_asoc_dma, /*   modify by liuchengdeng  */
};

static void __init smdk2440_machine_init(void)
{
    s3c24xx_fb_set_platdata(&smdk2440_fb_info);
    s3c_i2c0_set_platdata(NULL);
    s3c24xx_ts_set_platdata(&smdk2440_ts_cfg); /* Add Touch Screen info by liuchengdeng */
    platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
    smdk_machine_init();
}

2vim drivers/input/touchscreen/s3c2410_ts.c

修改如下:

129行左右添加:

input_report_key(ts.input, BTN_TOUCH, 1);
 input_report_abs(ts.input, ABS_PRESSURE, 1); /*  Add by liuchengdeng */
input_sync(ts.input);

143行左右添加:

input_report_key(ts.input, BTN_TOUCH, 0);
input_report_abs(ts.input, ABS_PRESSURE, 0); /*  Add by liuchengdeng  */
input_sync(ts.input);

318行左右修改如下:

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); /*  Modify by      liuchengdeng */

ts.input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);

323行左右添加:

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 by liuchengdeng */

ts.input->name = "S3C24XX TouchScreen";

3配置内核:

make menuconfig

Device Drivers  --->

Input device support  --->

[*]   Touchscreens  --->

<*>   Samsung S3C2410/generic touchscreen input driver

4编译内核下载到开发板:

可以看到内核打印有如下信息:

pl2303: Prolific PL2303 USB to serial adaptor driver
mousedev: PS/2 mouse device common for all mice
usbcore: registered new interface driver usbtouchscreen
samsung-ts s3c2440-ts: driver attached, registering input device
input: S3C24XX TouchScreen as /devices/virtual/input/input0
S3C24XX RTC, (c) 2004,2006 Simtec Electronics

[root@root /]# cd dev
[root@root /dev]# ls
audio               ptyq3               tty10               ttyq5
autofs              ptyq4               tty11               ttyq6
console             ptyq5               tty12               ttyq7
controlC0           ptyq6               tty13               ttyq8
cpu_dma_latency     ptyq7               tty14               ttyq9
discover            ptyq8               tty15               ttyqa
dsp                 ptyq9               tty16               ttyqb
err                 ptyqa               tty17               ttyqc
event0              ptyqb               tty18               ttyqd(多出了event0     设备)
fb0                 ptyqc               tty19               ttyqe
flush               ptyqd               tty2                ttyqf

说明已经移植成功了:

5编写测试程序test.c(程序附在后面),测试:

/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-gcc test.c -o test

将编译好的test下载了开发板上运行:

root@root /]# ls
apps          etc           jbs.mp3       proc          test         var
bin           event_button  lib           root          tmp           vim_conf.bin
data          info          linuxrc       sbin          tslib         yw.mp3
dev           init          mnt           sys           usr
[root@root /]# ./test 
begin handle_event0...(触摸屏幕就会有如下打印)
event(0):type:3; code:  0; value:591; realx:591; realy:  0
event(1):type:3; code:  1; value:397; realx:591; realy:397
event(2):type:1; code:330; value:  1; realx:591; realy:397
event(3):type:3; code: 24; value:  1; realx:591; realy:397
event(4):type:0; code:  0; value:  0; realx:591; realy:397
end handle_event0...
begin handle_event0...
event(0):type:3; code:  0; value:578; realx:578; realy:  0
event(1):type:3; code:  1; value:402; realx:578; realy:402
event(2):type:0; code:  0; value:  0; realx:578; realy:402
end handle_event0...

至此已经结束!

如下是测试程序:

#include <stdio.h>
#include <linux/input.h>

static int event0_fd = -1;
struct input_event ev0[64];

static int handle_event0()
{
    int button = 0, realx=0, realy=0, i, rd;
    rd = read(event0_fd, ev0, sizeof(struct input_event)* 64);
    if(rd < sizeof(struct input_event)) return 0;
    for(i=0;i<rd/sizeof(struct input_event); i++)
    {
        if(EV_ABS == ev0[i].type)
        {
            if(ev0[i].code == 0) {
                realx = ev0[i].value;
            } else if(ev0[i].code == 1) {
                realy = ev0[i].value;
            }
        }
        printf("event(%d):type:%d; code:%3d; value:%3d; realx:%3d; realy:%3d\n",i,ev0[i].type,ev0[i].
code,ev0[i].value,realx,realy);

}

return 1;
}

int main(void)
{
    int done = 1;
    event0_fd = open("/dev/event0",02);
    if(event0_fd <0) {
        printf("open input device error\n");
        return -1;
    }
    while (done)
    {
        printf("begin handle_event0...\n");
        done = handle_event0();
        printf("end handle_event0...\n");
    }
    if(event0_fd > 0)
    {
        close(event0_fd);
        event0_fd = -1;
    }
    return 0;
}

基于fl2440内核linux-3.0移植----触摸屏移植相关推荐

  1. 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)网购链接

    <Linux设备驱动开发详解:基于最新的Linux 4.0内核> china-pub   天猫     dangdang   京东 China-pub 8月新书销售榜 推荐序一 技术日新月 ...

  2. Linux内核源码分析:基于最新的Linux 4.0内核(学习路线总结)

    今天给大家分享的是基于最新的Linux 4.0内核学习路线总结,本文由8个专题组成,文末附上学习路线思维导图. 一.进程管理专题 1.进程原理 1.1 进程生命周期 1.2 task_struct结构 ...

  3. 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)进展同步更新

    本博实时更新<Linux设备驱动开发详解(第3版)>的最新进展. 目前已经完成稿件. 2015年8月9日,china-pub开始上线预售: http://product.china-pub ...

  4. linux 3.15.2 触摸屏移植之selected device is not a touchscreen I understand

    移植触摸屏驱动,和2.6版本的基本一致,只需配置一下,可参考本博客以前的文章. 编译后运行tslib终端打印出"selected device is not a touchscreen I ...

  5. Linux设备驱动开发详解 第3版 (即 Linux设备驱动开发详解 基于最新的Linux 4 0内核 )前言

    Linux从未停歇脚步.Linus Torvalds,世界上最伟大的程序员之一,Linux内核的创始人,Git的缔造者,仍然在没日没夜的合并补丁,升级内核.做技术,从来没有终南捷径,拼的就是坐冷板凳的 ...

  6. 基于Cortex-A53内核Linux系统gec6818开发板的电子自助点餐设计

    由于是多文件下编译,涉及的文件很多,还有链接库,发源代码读者也不能编译运行,因此不将源代码下发打印.将所有的文件压缩成包,放到百度网盘上,话不多说上链接,有简陋功能展示视频.(可直接扫描二维码). 链 ...

  7. 基于MDK开发的TencentOS-Tiny软件包,快速移植物联网操作系统到Keil中!

    基于MDK开发的TencentOS-Tiny Software Pack 2021腾讯犀牛鸟开源人才培养计划 2021/9/24 项目导师:TencentOS tiny核心架构师 汪礼超 项目学员:东 ...

  8. [转载]基于ARM的linux内核裁剪与移植

    基于ARM的linux内核裁剪与移植 http://bbs.elecfans.com/forum.php?mod=viewthread&tid=185020  wutaimin( 楼主 ) 2 ...

  9. grub2引导linux内核,一种基于grub2的linux系统启动bootloader的制作方法与流程

    技术领域 本发明涉及服务器应用技术领域,具体涉及一种基于grub2的linux系统启动bootloader的制作方法. 背景技术: 当前linux系统的内核版本已经升级至4.0以上,最新的linux系 ...

最新文章

  1. 闲鱼异地多活架构设计与实现
  2. 排列(permutation)2_6
  3. CLR 4.0 有哪些新东西? -- 类型等价
  4. 在游戏中强制关机,不能对关机提示框进行操作
  5. Java中如何使用Thread和Runnable创建的线程
  6. C宏定义中的##,#,#@用法介绍
  7. SpringBoot_配置-配置文件占位符
  8. U盘流畅运行linux发行版,做各种linux发行版的启动U盘方法
  9. 京东软件测试有复试没,【京东测试工程师面试】正常,不是特别的难-看准网...
  10. java编码规范文档 下载_软件项目实训及课程设计指导——制定待开发项目中各种文档的规范...
  11. Jmeter 获取、读取token 供其他 HTTP 请求调用
  12. YOLO v3网络结构分析
  13. 老弟教你用CSS和JS实现曾经风靡一时的微信打飞机游戏
  14. 32位汇编(1) - masm32环境配置
  15. 京东上线“友家铺子”,社区团购进入洗牌阶段
  16. Android Studio 部分查找快捷键
  17. sdust-Java-字符串集合求并集 (10分)
  18. Xen与XenServer的区别
  19. HyperMesh快捷键、鼠标操作、键盘操作
  20. Isometric Tile Engine 的遮挡处理

热门文章

  1. java马赛克_java实现图片缩放、旋转和马赛克化
  2. Verilog十大基本功7 (IC设计经典书籍)
  3. “月赚8000的上海出租司机”后来的发展
  4. dash dock安装 to_Dash to Dock 安装配置(图文教程)
  5. 苹果11计算机怎么打开语音,iPhone11怎么打开Siri 语音唤醒方法介绍
  6. 第十五章 宏观经济政策
  7. --Redis入坑--RedisPipelineException:Pipeline contained one or more invalid commands;WRONGTYPE ...
  8. 用python画一只小狗
  9. 阿龙的学习笔记---202107学习
  10. 计算机无法共享的原因,文件夹无法共享的原因及其解决办法