carterlam 发表于 2010-2-26 17:12:18

触摸屏驱动问题

2.6.30.4的内核
按照Step16拷贝了tq2440_ts.c并修改,修改同目录下Kconfig,Makefile
没有添加TSDEV补丁,按手册配置内核。
编译内核镜像时出现以下错误:
CALL    scripts/checksyscalls.sh
<stdin>:1097:2: warning: #warning syscall fadvise64 not implemented
<stdin>:1265:2: warning: #warning syscall migrate_pages not implemented
<stdin>:1321:2: warning: #warning syscall pselect6 not implemented
<stdin>:1325:2: warning: #warning syscall ppoll not implemented
<stdin>:1365:2: warning: #warning syscall epoll_pwait not implemented
CHK   include/linux/compile.h
LD      drivers/built-in.o
drivers/input/built-in.o:(.data+0x844): multiple definition of `ADC_LOCK'
drivers/char/built-in.o:(.data+0x428): first defined here
make: *** Error 1
make: *** Error 2
请问为什么会出现以上错误,可以怎么修正错误?
谢谢!

亚瑟王 发表于 2010-2-27 18:03:34

建议你看一下天嵌科技的Linux移植手册的触摸移植部分的讲述,4.2版本的103页。

nono1860 发表于 2010-6-2 03:03:27

請問樓主解決此問題了嗎? 我也是遇到同樣問題!也在看了103頁 看不出甚麼訣竅來

亚瑟王 发表于 2010-6-2 19:26:47

1、从天嵌科技提供的内核中复制触摸驱动源码到你的内核中。
2、修改复制过来的触摸驱动源码的41行内容为
DECLARE_MUTEX(ADC_LOCK);
然后编译即可。

qazasdwsx 发表于 2010-11-7 03:36:10

正是因为改了这句话才出现了错误,用原来的 触摸不起作用了。。

天嵌_support1 发表于 2010-11-8 11:50:24

5# qazasdwsx


把DECLARE_MUTEX(ADC_LOCK) 改成;

extern struct semaphore ADC_LOCK

Waldo 发表于 2012-5-15 11:10:21

我也是同样的问题,为什么没有后文了。。。不了了之的吗?

隆美尔1944 发表于 2012-7-27 16:17:54

本帖最后由 隆美尔1944 于 2012-7-27 16:19 编辑

我在把ADC的驱动编译进内核时,也出现了这个问题:drivers/input/built-in.o:(.data+0x844): multiple definition of `ADC_LOCK'
drivers/char/built-in.o:(.data+0x3a4): first defined here
当时就搜到了这个帖子。但是这个帖子针对的是移植触摸屏时的错误,但是他俩的错误居然一样?所以我就认为他俩有必然联系。我查了一下移植手册的P104,发现了错误原因。移植手册是这么说的:
在 Linux-2.6.30.4 中的触摸驱动和 Linux-2.6.25.8 的触摸驱动不太一样,从天嵌科技提供的 2.6.30.4 的
源码中的 “ drivers/input/touchsreen/ ” 拷贝 “ tq2440_ts.c ” 文件到您的内核的 “ drivers/input/touchsreen/ ” 目
录下,然后修改驱动源码的 41 行为如下内容:
//extern struct semaphore ADC_LOCK; // 这个原来的内容
DECLARE_MUTEX(ADC_LOCK); // 这是修改后的内容
但是不知你注意到下面的说明没有:
说明: 修改原因,因为天嵌科技提供的触摸驱动中使用了 ADC 驱动中的 ADC_LOCK ,而这里并没 有移植 ADC 驱动,所以这里做一下简单的改变。
很显然,当时修改这段的原因是因为没有移植 ADC 驱动,而我现在正在做的就是ADC 驱动的移植。所以我就把drivers/input/touchsreen/tq2440_ts.c中以前修改的部分去掉,变成最原始的状态
extern struct semaphore ADC_LOCK; // 这个原来的内容
//DECLARE_MUTEX(ADC_LOCK); // 这是修改后的内容编译通过。

希望我的这个回复对有的朋友有所帮助

twj2012linux 发表于 2012-11-29 22:17:34

请问你这个解决了吗,解决了告诉我们一声啊,都搞了好长时间了,不知道是哪里的问题:D

twj2012linux 发表于 2012-11-29 22:18:16

亚瑟王 发表于 2010-6-2 19:26 static/image/common/back.gif
1、从天嵌科技提供的内核中复制触摸驱动源码到你的内核中。
2、修改复制过来的触摸驱动源码的41行内容为
...

这个到底是怎么解决的,给个说法啊,是按照上面写的,编译通过不了,给楼主一样的问题

亚瑟王 发表于 2012-11-30 16:27:43

twj2012linux 发表于 2012-11-29 22:18 static/image/common/back.gif
这个到底是怎么解决的,给个说法啊,是按照上面写的,编译通过不了,给楼主一样的问题

亲,8楼的朋友已经说了原因和解决方法啊。
或者你告诉我你实际的做法,然后我给你重新解答。

twj2012linux 发表于 2012-11-30 19:22:50

亚瑟王 发表于 2012-11-30 16:27 static/image/common/back.gif
亲,8楼的朋友已经说了原因和解决方法啊。
或者你告诉我你实际的做法,然后我给你重新解答。

我也是按照8楼的方法,又重新写的代码,编译能通过,但是下载到板子中后,触摸屏根本没有反映啊,这又怎么解决

twj2012linux 发表于 2012-11-30 21:32:45

qazasdwsx 发表于 2010-11-7 03:36 static/image/common/back.gif
正是因为改了这句话才出现了错误,用原来的 触摸不起作用了。。

我的也是这样,用原来的触摸不起作用,请问楼主是怎么更改的

twj2012linux 发表于 2012-11-30 21:59:44

不用修改了,因为制作好的2.6.30的文件是已经移植好adc的驱动了,然后按照后面的配置配置好(这点相当重要,不能只配置device drivers,还要配置General setup ------System Type----将ADC common driver support 不选择) ,最后一定要重新擦写板子,重新下即可,搞了两天终于搞定了,知道错误了,

亚瑟王 发表于 2012-12-3 09:38:51

twj2012linux 发表于 2012-11-30 21:59 static/image/common/back.gif
不用修改了,因为制作好的2.6.30的文件是已经移植好adc的驱动了,然后按照后面的配置配置好(这点相当重要, ...

哦,是的,这个地方遗漏了CPU配置的地方要去掉系统自带的ADC。
页: [1] 2
查看完整版本: 触摸屏驱动问题