基于fl2440内核linux-3.0移植----触摸屏移植
开发环境:
开发板: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移植----触摸屏移植相关推荐
- 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)网购链接
<Linux设备驱动开发详解:基于最新的Linux 4.0内核> china-pub 天猫 dangdang 京东 China-pub 8月新书销售榜 推荐序一 技术日新月 ...
- Linux内核源码分析:基于最新的Linux 4.0内核(学习路线总结)
今天给大家分享的是基于最新的Linux 4.0内核学习路线总结,本文由8个专题组成,文末附上学习路线思维导图. 一.进程管理专题 1.进程原理 1.1 进程生命周期 1.2 task_struct结构 ...
- 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)进展同步更新
本博实时更新<Linux设备驱动开发详解(第3版)>的最新进展. 目前已经完成稿件. 2015年8月9日,china-pub开始上线预售: http://product.china-pub ...
- linux 3.15.2 触摸屏移植之selected device is not a touchscreen I understand
移植触摸屏驱动,和2.6版本的基本一致,只需配置一下,可参考本博客以前的文章. 编译后运行tslib终端打印出"selected device is not a touchscreen I ...
- Linux设备驱动开发详解 第3版 (即 Linux设备驱动开发详解 基于最新的Linux 4 0内核 )前言
Linux从未停歇脚步.Linus Torvalds,世界上最伟大的程序员之一,Linux内核的创始人,Git的缔造者,仍然在没日没夜的合并补丁,升级内核.做技术,从来没有终南捷径,拼的就是坐冷板凳的 ...
- 基于Cortex-A53内核Linux系统gec6818开发板的电子自助点餐设计
由于是多文件下编译,涉及的文件很多,还有链接库,发源代码读者也不能编译运行,因此不将源代码下发打印.将所有的文件压缩成包,放到百度网盘上,话不多说上链接,有简陋功能展示视频.(可直接扫描二维码). 链 ...
- 基于MDK开发的TencentOS-Tiny软件包,快速移植物联网操作系统到Keil中!
基于MDK开发的TencentOS-Tiny Software Pack 2021腾讯犀牛鸟开源人才培养计划 2021/9/24 项目导师:TencentOS tiny核心架构师 汪礼超 项目学员:东 ...
- [转载]基于ARM的linux内核裁剪与移植
基于ARM的linux内核裁剪与移植 http://bbs.elecfans.com/forum.php?mod=viewthread&tid=185020 wutaimin( 楼主 ) 2 ...
- grub2引导linux内核,一种基于grub2的linux系统启动bootloader的制作方法与流程
技术领域 本发明涉及服务器应用技术领域,具体涉及一种基于grub2的linux系统启动bootloader的制作方法. 背景技术: 当前linux系统的内核版本已经升级至4.0以上,最新的linux系 ...
最新文章
- 闲鱼异地多活架构设计与实现
- 排列(permutation)2_6
- CLR 4.0 有哪些新东西? -- 类型等价
- 在游戏中强制关机,不能对关机提示框进行操作
- Java中如何使用Thread和Runnable创建的线程
- C宏定义中的##,#,#@用法介绍
- SpringBoot_配置-配置文件占位符
- U盘流畅运行linux发行版,做各种linux发行版的启动U盘方法
- 京东软件测试有复试没,【京东测试工程师面试】正常,不是特别的难-看准网...
- java编码规范文档 下载_软件项目实训及课程设计指导——制定待开发项目中各种文档的规范...
- Jmeter 获取、读取token 供其他 HTTP 请求调用
- YOLO v3网络结构分析
- 老弟教你用CSS和JS实现曾经风靡一时的微信打飞机游戏
- 32位汇编(1) - masm32环境配置
- 京东上线“友家铺子”,社区团购进入洗牌阶段
- Android Studio 部分查找快捷键
- sdust-Java-字符串集合求并集 (10分)
- Xen与XenServer的区别
- HyperMesh快捷键、鼠标操作、键盘操作
- Isometric Tile Engine 的遮挡处理
热门文章
- java马赛克_java实现图片缩放、旋转和马赛克化
- Verilog十大基本功7 (IC设计经典书籍)
- “月赚8000的上海出租司机”后来的发展
- dash dock安装 to_Dash to Dock 安装配置(图文教程)
- 苹果11计算机怎么打开语音,iPhone11怎么打开Siri 语音唤醒方法介绍
- 第十五章 宏观经济政策
- --Redis入坑--RedisPipelineException:Pipeline contained one or more invalid commands;WRONGTYPE ...
- 用python画一只小狗
- 阿龙的学习笔记---202107学习
- 计算机无法共享的原因,文件夹无法共享的原因及其解决办法