![]() |
|
Ubuntu 8.10发行版
编译好的Linux-2.6.22内核
交叉编译器 arm-softfloat-linux-gnu-gcc- 3.4.5
下载补丁:
或者从上面下
找到第一个download 点击下载即可
(1)首先打一个补丁:s 3c 2410_touchscreen.patch,
将s 3c 2410_touchscreen.patch拷贝到内核目录下
$cp s 3c 2410_touchscreen.patch linux- 2.6.22 .6
$patch -p1 < s3c2410_touchscreen.patch(在内核下执行)
(2)然后修改arch/arm/mach-s 3c 2410/mach-smdk2410.c添加如下代码:
添加头文件:#include <asm/arch/ts.h>
添加结构体:static struct s 3c 2410_ts_mach_info smdk2410_ts_cfg __initdata = {
.delay = 20000,
.presc = 49,
.oversampling_shift = 2,
};
并添加支持触摸屏平台代码的信息,这个找到一个名为*smdk2410_devices[]的结构体指针数组里添加:&s 3c _device_ts,
然后在smdk2410_map_io函数里添加:set_s 3c 2410ts_info(&smdk2410_ts_cfg);
(3)修改driver/input/touchscreen/Makefile,添加如下内容:
obj-$(CONFIG_TOUCHSCREEN_S 3C 2410) += s 3c 2410_ts.o
(4)修改driver/input/touchscreen/s 3c 2410_ts.c
注释掉
#include <asm/plat-s 3c /regs-adc.h>
添加
#include <asm/arch/regs-adc.h>
还需修改/include/asm/arch/ts.h中
void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
为void set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
修改下面内容
ts.dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) |
BIT_MASK(EV_ABS);
ts.dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
为
ts.dev->evbit[0] = 0xb;
ts.dev->keybit[0xa] = 0x400;
或
ts.dev->evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) |
BIT(EV_ABS);
ts.dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH
这两种方法都可以。
(5)修改arch/arm/mach-s 3c 2410/mach-h1940.c
添加头文件#include <asm/arch/ts.h>
(6) make menuconfig 配置支持触摸屏驱动
Device Drivers --->
Input device support --->
<*> Event interface
[*]Touchscreens --->
<*>Samsung S 3C 2410 touchscreen input driver
[*]Samsung S 3C 2410 touchscreen debug messages
(7)然后make zImage。
(8)拷贝zImage到tftpboot下
(9)系统启动以后会在dev目录下产生event0 和 mouse0两个设备节点,它们就是触摸屏的设备节点。
文件系统没有支持udev或mdev的话就必须进行下面步骤
mknod dev/event 0 c 13 64
mknod dev/mouse 0 c 13 32