📄 触摸屏移植(成功)for2.6.rtf
字号:
from include/linux/fs.h:12, from include/linux/mm.h:15, from include/linux/poll.h:11, from drivers/input/touchscreen/s3c2410_ts.c:85:include/linux/interrupt.h:33:1: warning: this is the location of the previous definitiondrivers/input/touchscreen/s3c2410_ts.c: In function `touch_timer_fire':drivers/input/touchscreen/s3c2410_ts.c:244: error: called object is not a functiondrivers/input/touchscreen/s3c2410_ts.c:275: error: called object is not a functiondrivers/input/touchscreen/s3c2410_ts.c:200: warning: unused variable `updown'drivers/input/touchscreen/s3c2410_ts.c:200: warning: unused variable `i'drivers/input/touchscreen/s3c2410_ts.c: In function `stylus_updown':drivers/input/touchscreen/s3c2410_ts.c:294: warning: unused variable `lcdstate'drivers/input/touchscreen/s3c2410_ts.c:294: warning: unused variable `lcdenble'drivers/input/touchscreen/s3c2410_ts.c: In function `stylus_action':drivers/input/touchscreen/s3c2410_ts.c:365: error: called object is not a functiondrivers/input/touchscreen/s3c2410_ts.c:376: error: called object is not a functiondrivers/input/touchscreen/s3c2410_ts.c: In function `s3c2410ts_probe':drivers/input/touchscreen/s3c2410_ts.c:430: warning: implicit declaration of function `clk_get'drivers/input/touchscreen/s3c2410_ts.c:430: warning: assignment makes pointer from integer without a castdrivers/input/touchscreen/s3c2410_ts.c:440: warning: implicit declaration of function `clk_use'drivers/input/touchscreen/s3c2410_ts.c:442: warning: implicit declaration of function `clk_enable'drivers/input/touchscreen/s3c2410_ts.c:486: error: called object is not a functiondrivers/input/touchscreen/s3c2410_ts.c:533: warning: passing arg 2 of `request_irq' from incompatible pointer typedrivers/input/touchscreen/s3c2410_ts.c:545: warning: passing arg 2 of `request_irq' from incompatible pointer typedrivers/input/touchscreen/s3c2410_ts.c: In function `s3c2410ts_remove':drivers/input/touchscreen/s3c2410_ts.c:588: warning: implicit declaration of function `clk_disable'drivers/input/touchscreen/s3c2410_ts.c:590: warning: implicit declaration of function `clk_unuse'drivers/input/touchscreen/s3c2410_ts.c:592: warning: implicit declaration of function `clk_put'drivers/input/touchscreen/s3c2410_ts.c: In function `touch_timer_fire':drivers/input/touchscreen/s3c2410_ts.c:244: warning: statement with no effectdrivers/input/touchscreen/s3c2410_ts.c:275: warning: statement with no effectdrivers/input/touchscreen/s3c2410_ts.c: In function `stylus_action':drivers/input/touchscreen/s3c2410_ts.c:365: warning: statement with no effectdrivers/input/touchscreen/s3c2410_ts.c:376: warning: statement with no effectdrivers/input/touchscreen/s3c2410_ts.c: In function `s3c2410ts_probe':drivers/input/touchscreen/s3c2410_ts.c:486: warning: statement with no effectmake[3]: *** [drivers/input/touchscreen/s3c2410_ts.o] 错误 1make[2]: *** [drivers/input/touchscreen] 错误 2make[1]: *** [drivers/input] 错误 2make: *** [drivers] 错误 2在regs-adc.h中加入相应内容:/* linux/include/asm/arch-s3c2410/regs-adc.h * * Copyright (c) 2004 Shannon Holland <holland@loser.net> * * This program is free software; yosu can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * S3C2410 ADC registers * * Changelog: * 27-09-2004 SAH Created file*/#ifndef __ASM_ARCH_REGS_ADC_H#define __ASM_ARCH_REGS_ADC_H "regs-adc.h"#define S3C2410_ADCREG(x) (x)#define S3C2410_ADCCON S3C2410_ADCREG(0x00)#define S3C2410_ADCTSC S3C2410_ADCREG(0x04)#define S3C2410_ADCDLY S3C2410_ADCREG(0x08)#define S3C2410_ADCDAT0 S3C2410_ADCREG(0x0C)#define S3C2410_ADCDAT1 S3C2410_ADCREG(0x10)/***************************add by lfc***************************/#define S3C2410_ADC_IN0 0#define S3C2410_ADC_IN1 1#define S3C2410_ADC_IN2 2#define S3C2410_ADC_IN3 3#define S3C2410_ADC_IN4 4#define S3C2410_ADC_IN5 5#define S3C2410_ADC_IN6 6#define S3C2410_ADC_IN7 7#define S3C2410_ADC_BUSY 1#define S3C2410_ADC_READY 0#define S3C2410_NOP_MODE 0#define S3C2410_X_AXIS_MODE 1#define S3C2410_Y_AXIS_MODE 2#define S3C2410_WAIT_INT_MODE 3/*****************************end add****************************//* ADCCON Register Bits */#define S3C2410_ADCCON_ECFLG (1<<15)#define S3C2410_ADCCON_PRSCEN (1<<14)#define S3C2410_ADCCON_PRSCVL(x) (((x)&0xFF)<<6)#define S3C2410_ADCCON_PRSCVLMASK (0xFF<<6)#define S3C2410_ADCCON_SELMUX(x) (((x)&0x7)<<3)#define S3C2410_ADCCON_MUXMASK (0x7<<3)#define S3C2410_ADCCON_STDBM (1<<2)#define S3C2410_ADCCON_READ_START (1<<1)#define S3C2410_ADCCON_ENABLE_START (1<<0)#define S3C2410_ADCCON_STARTMASK (0x3<<0)/**************************add by lfc***********************/#define S3C2410_ADCCON_PRSCDIS (S3C2410_ADCCON_PRSCEN*0)/***************************end add*************************//* ADCTSC Register Bits *//**************************add by lfc************************/#define S3C2410_UD_SEN (1<<8)/***************************end add**************************/#define S3C2410_ADCTSC_YM_SEN (1<<7)#define S3C2410_ADCTSC_YP_SEN (1<<6)#define S3C2410_ADCTSC_XM_SEN (1<<5)#define S3C2410_ADCTSC_XP_SEN (1<<4)#define S3C2410_ADCTSC_PULL_UP_DISABLE (1<<3)#define S3C2410_ADCTSC_AUTO_PST (1<<2)#define S3C2410_ADCTSC_XY_PST (0x3<<0)/**********************modify by lfc**************************/#define S3C2410_ADCTSC_XY_PST(x) (((x)&0x3)<<0)#define S3C2410_DOWN_INT (S3C2410_UD_SEN*0)#define S3C2410_UP_INT (S3C2410_UD_SEN*1)#define S3C2410_ADCTSC_XM_HIZ (S3C2410_ADCTSC_XM_SEN*0)#define S3C2410_ADCTSC_XM_GND (S3C2410_ADCTSC_XM_SEN*1)#define S3C2410_ADCTSC_XP_EXTVLT (S3C2410_ADCTSC_XP_SEN*0)#define S3C2410_ADCTSC_XP_AIN (S3C2410_ADCTSC_XP_SEN*1)#define S3C2410_ADCTSC_YM_HIZ (S3C2410_ADCTSC_YM_SEN*0)#define S3C2410_ADCTSC_YM_GND (S3C2410_ADCTSC_YM_SEN*1)#define S3C2410_ADCTSC_YP_EXTVLT (S3C2410_ADCTSC_YP_SEN*0)#define S3C2410_ADCTSC_YP_AIN (S3C2410_ADCTSC_YP_SEN*1)#define S3C2410_ADCTSC_XP_PULL_UP_EN (S3C2410_ADCTSC_XP_PULL_UP_DIS*0)/************************end modify***************************//* ADCDAT0 Bits */#define S3C2410_ADCDAT0_UPDOWN (1<<15)#define S3C2410_ADCDAT0_AUTO_PST (1<<14)#define S3C2410_ADCDAT0_XY_PST (0x3<<12)#define S3C2410_ADCDAT0_XPDATA_MASK (0x03FF)/* ADCDAT1 Bits */#define S3C2410_ADCDAT1_UPDOWN (1<<15)#define S3C2410_ADCDAT1_AUTO_PST (1<<14)#define S3C2410_ADCDAT1_XY_PST (0x3<<12)#define S3C2410_ADCDAT1_YPDATA_MASK (0x03FF)/*added by Zxh*/#define S3C2410_ADCTSC_XY_PST_N (0x0<<0)#define S3C2410_ADCTSC_XY_PST_X (0x1<<0)#define S3C2410_ADCTSC_XY_PST_Y (0x2<<0)#define S3C2410_ADCTSC_XY_PST_W (0x3<<0)/*added by Zxh*/#endif /* __ASM_ARCH_REGS_ADC_H */后重新编译解决问题。要选中input device support中的Touchscreen interface内核配置中选择device driver-->graphics support-->logo configuration重新编译内核,烧到开发板中。就OK了学会ctags命令可cscope查找一下按理说,这样做过后,启动开发板应该出现小企鹅,但结果并没有显示。后来经过搜索相应资料,了解到这可能是framebuffer驱动没搞好的缘故。因为该驱动和屏幕分辩率有关。2007.6.12日早上和潘建聊起来,他说需要在bootloader启动时加参数VGA,如在grub.conf中加入VGA=0x...,但这一般适用于PC机,在嵌入式系统中胡军国说:最好编译tslib,用它来检测触摸屏。tslib可以直接从input层获取坐标信息以下是成功显示小企鹅的步骤:启动开发板,出现小企鹅表明framebuffer驱动成功(LCD驱动)成功。先前没有出现是因为framebuffer驱动没搞好。也就是说先要移植LCD驱动。我们通过上面的工作,在串口中已经看到了 linux2.6.14 的启动信息,但是在 LCD 上没有任何显示,这是因为我们还没有对 LCD 进行初始化, linux2.6.14 已经包含了 lcd 的驱动程序,驱动程序位于 /linux-2.6.14/drivers/video/ 目录下,文件名是 s3c2410fb.c, 头文件是 s3c2410fb.h. 。我们在这里可以不研究这个文件。只要我们对 lcd 进行以下初始化就可以了。 我们打开 /linux-2.6.14/arch/arm/mach-s3c2410/mach-smdk2410.c, 在这个文件里增加包含文件: #include <asm/arch/fb.h> 然后增加 LCD 初始化的代码, static struct s3c2410fb_mach_info hfrk_lcdcfg __initdata = { .fixed_syncs= 0, .regs={ .lcdcon1= S3C2410_LCDCON1_TFT16BPP | \ S3C2410_LCDCON1_TFT | \ S3C2410_LCDCON1_CLKVAL(6), .lcdcon2= S3C2410_LCDCON2_VBPD(2) | \ S3C2410_LCDCON2_LINEVAL(319) | \ S3C2410_LCDCON2_VFPD(0) | \ S3C2410_LCDCON2_VSPW(4), .lcdcon3= S3C2410_LCDCON3_HBPD(47) | \ S3C2410_LCDCON3_HOZVAL(239) | \ S3C2410_LCDCON3_HFPD(15), .lcdcon4= S3C2410_LCDCON4_MVAL(1) | \ S3C2410_LCDCON4_HSPW(31), .lcdcon5= S3C2410_LCDCON5_FRM565 | \ S3C2410_LCDCON5_INVVLINE | \ S3C2410_LCDCON5_HWSWP, }, .lpcsel= 0x0, .gpccon= 0xaaaaaaaa, .gpccon_mask= 0xffffffff, .gpcup= 0xffffffff, .gpcup_mask= 0xffffffff, .gpdcon= 0xaaaaaaaa, .gpdcon_mask= 0x0, .gpdup= 0xffffffff, .gpdup_mask= 0xffffffff, .width= 240, .height= 320, .xres= {240,240,240}, .yres= {320,320,320}, .bpp= {16,16,16}, }; static void __init sdmk2410_init(void) { set_s3c2410fb_info(&hfrk_lcdcfg); } 在系统初始化中增加对 lcd 的初始化。 MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch * to SMDK2410 */ /* Maintainer: Jonas Dietsche */ …… .map_io = smdk2410_map_io, .init_irq = smdk2410_init_irq, .init_machine = sdmk2410_init, /* 这一句是新增加的*/ .timer = &s3c24xx_timer, MACHINE_END 现在我们重新保存这个文件,现在需要重新进入配置菜单,检查一下 LCD 的相关选项是否选上, [Device Drivers->Graphics support->] 这个配置菜单下面是相关 LCD 的配置。回到根目录下,输入 make 编译内核,重现烧写内核到开发板,再次启动 linxu2.6.14 以后就可以在 lcd 上看到一个小的企鹅。我们的 lcd 驱动已经移植完成了。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -