分享

linux-2.6.38到tiny6410的移植手册

 guitarhua 2012-05-01

linux-2.6.38到tiny6410的移植手册(连载1)__nand flash
http://www./read.php?tid-14196-fpage-2.html

linux-2.6.38到tiny6410的移植手册(连载2)__网卡&NF
http://www./read.php?tid-14211.html

linux-2.6.38到tiny6410的移植手册(连载3)__ LCD&触摸屏
http://www./read.php?tid=14261

linux-2.6.38到tiny6410的移植手册(连载4)__USB设备
http://www./read.php?tid=14462

这次lcd和触摸屏智能一起移植了,至于原因明天在开一贴详细说明,http://www./read.php?tid-14273.html
主要是一线触摸的原因,它劫持了lcd的背光控制,这个花了我三天时间呀才发现, 友善真是的。。。。

先弄lcd屏吧

vi arch/arm/plat-samsung/include/plat/map-base.h
第39行
增加
#define S3C_VA_LCD     S3C_ADDR(0x01100000)    /* LCD */

从友善的源码中将arch/arm/mach-s3c64xx/include/mach/regs-lcd.h拷贝过来

从友善的源码中将drivers/video/samsung整个文件夹拷贝过来,是不是有点拿来主义,呵呵

vi drivers/video/Kconfig
第2068行增加
source "drivers/video/samsung/Kconfig"

vi drivers/video/Makefile
120行增加
obj-$(CONFIG_FB_S3C_EXT)      += samsung/

vi arch/arm/mach-s3c64xx/mach-mini6410.c
48行增加
#include <linux/delay.h>

136行mini6410_lcd_power_set函数里的内容改成
        if (power) {
                gpio_direction_output(S3C64XX_GPF(13), 1);          //GPF13是USBpower用的,与lcd无关
                gpio_direction_output(S3C64XX_GPF(15), 1);          //GPF15是是真正的一线控制线连PWM1

                /* fire nRESET on power up */
                gpio_direction_output(S3C64XX_GPN(5), 0);          //GPN5好像与lcd也无关,先copy吧
                msleep(10);
                gpio_direction_output(S3C64XX_GPN(5), 1);
                msleep(1);
        } else {
                gpio_direction_output(S3C64XX_GPF(15), 0);
                gpio_direction_output(S3C64XX_GPF(13), 0);
        }
190行
增加
   {
                /* LCD support */
                .virtual    = (unsigned long)S3C_VA_LCD,
                .pfn        = __phys_to_pfn(S3C_PA_FB),
                .length     = SZ_16K,
                .type       = MT_DEVICE,
        },
437行增加
    gpio_request(S3C64XX_GPN(5), "LCD power");

    gpio_request(S3C64XX_GPF(13), "LCD power");

去掉gpio_request(S3C64XX_GPE(0), "LCD power");

make menuconfig
  Power management options  --->
    [ ] Power Management support   一定要去掉,不然会有
drivers/video/samsung/s3cfb_fimd4x.c:1440:2: error: implicit declaration of function 's3c6410_pm_do_save'的错误,郁闷了半天

<*> Support for frame buffer devices  --->  
     < >   Samsung S3C framebuffer support                              
        <*>   S3C Framebuffer Support (eXtended)                          
                Select LCD Type (4.3 inch 480x272 TFT LCD)  --->        
        <*>   Advanced options for S3C Framebuffer                      
                Select BPP(Bits Per Pixel) (16 BPP)  --->              
        (4)   Number of Framebuffers                                
        [ ]       Enable Virtual Screen (NEW)                            
        [*]       Enable Double Buffering                  
  [ ] Backlight & LCD device support  --->

  Console display driver support  --->
    <*> Framebuffer Console support    这个也一定要选,不然会有
drivers/built-in.o:(.data+0x174): undefined reference to `soft_cursor'的错误,其中解决这些错误花了我不少时间。
  
  [*] Bootup logo  --->                                                
      [ ]   Standard black and white Linux logo                        
      [ ]   Standard 16-color Linux logo                                
      [*]   Standard 224-color Linux logo
其他的默认就行

这时lcd的驱动其实已经移植好了,引导信息也正常,如
S3C_LCD clock got enabled :: 133.000 Mhz
LCD TYPE :: N43 will be initialized
Window[0] - FB1: map_video_memory: clear ff600000:0007f800
            FB1: map_video_memory: dma=5d780000 cpu=ff600000 size=0007f800
Window[0] - FB2: map_video_memory: clear ff63fc00:0003fc00
            FB2: map_video_memory: dma=5d7bfc00 cpu=ff63fc00 size=0003fc00
Console: switching to colour frame buffer device 60x34
fb0: s3cfb frame buffer device
Window[1] - FB1: map_video_memory: clear ff680000:0007f800
            FB1: map_video_memory: dma=5cc00000 cpu=ff680000 size=0007f800
Window[1] - FB2: map_video_memory: clear ff6bfc00:0003fc00
            FB2: map_video_memory: dma=5cc3fc00 cpu=ff6bfc00 size=0003fc00
fb1: s3cfb frame buffer device
Window[2] - FB1: map_video_memory: clear ff700000:0003fc00
            FB1: map_video_memory: dma=5d740000 cpu=ff700000 size=0003fc00
fb2: s3cfb frame buffer device
Window[3] - FB1: map_video_memory: clear ff740000:0003fc00
            FB1: map_video_memory: dma=5cc80000 cpu=ff740000 size=0003fc00
fb3: s3cfb frame buffer device

但lcd屏却没有反应,百思不得其解。后来终于发现了,过程明天在说
先做一线触摸的驱动

拷贝
arch/arm/mach-s3c64xx/dev-ts-mini6410.c
arch/arm/mach-s3c64xx/include/mach/ts.h
arch/arm/plat-samsung/include/plat/regs-adc.h
drivers/input/touchscreen/mini6410_1wire_host.c
drivers/input/touchscreen/mini6410-ts.c
drivers/input/touchscreen/ts-if.c
到相应目录

vi arch/arm/mach-s3c64xx/Makefile
末尾增加
obj-$(CONFIG_TOUCHSCREEN_MINI6410)  += dev-ts-mini6410.o

vi drivers/input/touchscreen/Makefile
末尾加入
obj-$(CONFIG_TOUCHSCREEN_MINI6410)    += mini6410-ts.o
obj-$(CONFIG_TOUCHSCREEN_1WIRE)        += mini6410_1wire_host.o
obj-$(CONFIG_FB_S3C_EXT_TFT800480)    += ts-if.o
obj-$(CONFIG_FB_S3C_EXT_TFT480272)    += ts-if.o
obj-$(CONFIG_FB_S3C_EXT_X240320)    += ts-if.o

vi drivers/input/touchscreen/Kconfig
190行左右加入
config TOUCHSCREEN_MINI6410
        tristate "S3C touchscreen driver for Mini6410"
        depends on ARCH_S3C2410 || ARCH_S3C64XX || ARCH_S5P64XX || ARCH_S5PC1XX
        default y
        help
          Say Y here to enable the driver for the touchscreen on the
          FriendlyARM Mini6410 development board.

          If unsure, say N.

          To compile this driver as a module, choose M here: the
          module will be called mini6410-ts.

config TOUCHSCREEN_1WIRE
        tristate "Mini6410 1-Wire host and Touch Screen Driver"
        depends on MACH_MINI6410
        help
          Say Y here to enable the 1-Wire host and Touch Screen driver for
          FriendlyARM Mini6410 development board.

          If unsure, say N.

          To compile this driver as a module, choose M here: the
          module will be called mini6410_1wire_host.




vi arch/arm/mach-s3c64xx/mach-mini6410.c
44行 将#include <plat/ts.h>
   改成#include <mach/ts.h>

320行将
static struct s3c2410_ts_mach_info s3c_ts_platform __initdata = {
        .delay                  = 10000,
        .presc                  = 49,
        .oversampling_shift     = 2,
};
改成
static struct s3c_ts_mach_info s3c_ts_platform __initdata = {
        .delay                  = 0xFFFF,
        .presc                  = 0xFF,
        .oversampling_shift     = 2,
        .resol_bit              = 12,
        .s3c_adc_con    = ADC_TYPE_2,
};

436行将
s3c24xx_ts_set_platdata(&s3c_ts_platform);
改成 s3c_ts_set_platdata(&s3c_ts_platform);

vi arch/arm/plat-samsung/Makefile
60行
注释掉obj-$(CONFIG_SAMSUNG_DEV_TS)   += dev-ts.o
不然会有multiple definition of `s3c_device_ts'的错误很奇怪,友善的源码CONFIG_SAMSUNG_DEV_TS=n,而我的源码出来后CONFIG_SAMSUNG_DEV_TS=y,还改不掉。。

vi drivers/input/touchscreen/mini6410-ts.c
增加头文件#include<linux/sched.h>  奇怪的是友善的mini6410-ts.c
里没这个头文件也能找到需要的东西。。。

   Input device support  --->
        [*]   Touchscreens  --->  
              <*>   S3C touchscreen driver for Mini6410          
                <*>   Mini6410 1-Wire host and Touch Screen Driver

lcd好用了,开机出现了那只小企鹅,挂NFS后触摸屏也能用了。
wawe 2011-08-01 09:50
支持楼主!

bloggercat 2011-08-01 09:54
顶原创

wawe 2011-08-01 11:28
我的LCD驱动就没移植直接用自带的也挺好的,就是开机的LOGO显不了

prettybxp 2011-08-01 12:45
[*] Bootup logo  --->                                                
      [ ]   Standard black and white Linux logo                        
      [ ]   Standard 16-color Linux logo                                
      [*]   Standard 224-color Linux logo

lcd好用的话,选上这个logo就出来啦

wawe 2011-08-01 14:23
问题解决了,LCD电源控制那要改成GPF15控制的,用GPE0开始就不能显LOGO,自带驱动是用GPE0进行的电源控制,我估计跟友善的UBOOT有点关系

lintel 2011-08-08 14:10
对于 's3c6410_pm_do_save'的错误,这个是电源管理的函数,用于保存当前状态,而在2.6.34以上的内核,S3c24xx跟s3c64xx使用同一个电源管理驱动,所以函数名称被改成 s3c_pm_do_save,

tingjie 2011-08-30 17:33
支持一下楼主。顺便Mark。

ming1279 2011-09-11 23:50
你这样编译出来后用的是那个根文件系统阿?
我试了出现无法挂载根文件的错误,not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

prettybxp 2011-09-12 10:49
我用的是nfs文件系统。

hefuping 2011-09-12 16:43
大侠好,我按照你的帖子中的方法一步步做下来,为何编译的时候出现如下错误提示?

CC      drivers/video/samsung/s3cfb.o
drivers/video/samsung/s3cfb.c: In function 's3cfb_onoff_win':
drivers/video/samsung/s3cfb.c:328:3: error: 'S3C_WINCON0' undeclared (first use in this function)
drivers/video/samsung/s3cfb.c:328:3: note: each undeclared identifier is reported only once for each function it appears in
drivers/video/samsung/s3cfb.c: In function 's3cfb_onoff_color_key_alpha':
drivers/video/samsung/s3cfb.c:340:3: error: 'S3C_W1KEYCON0' undeclared (first use in this function)
drivers/video/samsung/s3cfb.c: In function 's3cfb_onoff_color_key':
drivers/video/samsung/s3cfb.c:352:3: error: 'S3C_W1KEYCON0' undeclared (first use in this function)
drivers/video/samsung/s3cfb.c: In function 's3cfb_set_color_key_registers':
drivers/video/samsung/s3cfb.c:385:3: error: 'S3C_W1KEYCON0' undeclared (first use in this function)
drivers/video/samsung/s3cfb.c: In function 's3cfb_set_color_value':
drivers/video/samsung/s3cfb.c:422:2: error: 'S3C_W1KEYCON1' undeclared (first use in this function)
drivers/video/samsung/s3cfb.c: In function 's3cfb_set_bpp':
drivers/video/samsung/s3cfb.c:433:8: error: 'S3C_WINCON0' undeclared (first use in this function)
make[3]: *** [drivers/video/samsung/s3cfb.o] 错误 1
make[2]: *** [drivers/video/samsung] 错误 2
make[1]: *** [drivers/video] 错误 2
make: *** [drivers] 错误 2

yangliu 2011-09-19 10:26
这一步是不是写错了啊???????????????????


190行
增加
   {
                /* LCD support */
                .virtual    = (unsigned long)S3C_VA_LCD,
                .pfn        = __phys_to_pfn(S3C_PA_FB),
                .length     = SZ_16K,
                .type       = MT_DEVICE,
        },

prettybxp 2011-09-19 13:12
引用第11楼yangliu于2011-09-19 10:26发表的  :
这一步是不是写错了啊???????????????????


190行
增加
.......

具体在哪一行可能会不一样

prettybxp 2011-09-19 13:15
头文件加近来没有?

ming1279 2011-09-19 14:34
你的触摸屏校准的工作没说明阿。
另外
哥们好像忘了说明把下面几个文件也要考过去:
/drivers/char/mini6410_adc.c
/drivers/video/mini6410_backlight.c

yangliu 2011-09-21 12:31
呵呵,,已经很厉害了,,,另外就是,,移植NAND驱动后,,内核根本就跑不过去,,跑到中间就死了,,,,,,,,,,,可能什么地方还需要配置一 下,,,,我把友善的config_mini6410_a70 ,COPY过来就行了,,, 但可惜我自己配的不行,,,我是完全按照  “prettybxp
一 路走好,下辈子再也不做程序员”  的说罚配的,,,,,,,,,,,,,,,,,,,,,,,,然后,,,我用友善的配置文件移植内核后,,,出现了一 个蛋疼的问题,,,,,,内核烧到板子里,,,刚烧的时候能正常启动,,,过一段时间就不行了,,,就要重烧,,,,,,都感到NANDFLASH成了增 强型DRAM了,,,程序会自动消失,,,,,,,,,,,或者别的什么原因。。。。。。。。。。。

luhao806 2011-09-21 16:45
linux+wince+android 软硬件交流500人超级群欢迎您的加入 122879839,进群请标明您的研究方向,应用层or底层 或者ARM7 ARM9 cortexA8 linux+wince+android 软硬件交流500人超级群欢迎您的加入 122879839,进群请标明您的研究方向,应用层or底层 或者ARM7 ARM9 cortexA8

yangliu 2011-09-22 17:52
我按你的方法移植了触摸屏驱动,,没反应,,但驱动好像是移植成功了,,,就是校准光标死在左上角,,不动,,,,而且屏幕上显示
“touchdevice : /dev/touchscreen”,,我看友善的内核里的触摸驱动写的是“touchdevice : /dev/touchscreen-1wire”,,,不知道哪不对,,,,求指点,

prettybxp 2011-09-22 21:55
一线触摸的设备名是/dev/touchscreen-1wire,/dev/touchscreen是老的没有一线触摸时的设备名
最简单的测试方法可以cat /dev/touchscreen-1wire看是否有输出

yangliu 2011-09-23 08:06
有输出,,输出乱码,

yangliu 2011-09-23 08:11
这说明,,一线触摸有作用,,但为什么校准时用的那个+死在左上角不动呢?头疼

yangliu 2011-09-23 10:57
高手帮帮忙啊,,我现在是在没办法了啊

yangliu 2011-09-24 14:43
自己顶一下,,期待回答,,

kkklll 2012-01-08 15:19
回复yangliu:
解决办法:修改6410文件系统下/etc/friendlyarm-ts-input.conf文件,把
TSLIB_TSDEVICE=/dev/touchscree
修改为:
TSLIB_TSDEVICE=/dev/touchscree-1wire
原因是:友善提供的该次版本文件系统使用的触摸配置与内核使用的不一致。
所 以造成了正如你讲的一样,LCD上显示的触摸屏设备名是/dev/touchscreen,而非/dev/touchscreen-1wire,由于移植 的是后者,因此虽然cat /dev/touchscreen-1wire有输出,但是但是该触摸数据并没有写入文件系统。
修改完成后,能够正常使用触摸屏,可以在/dev/生成输入的触摸屏初始矫正数据文件pointercal,该文件内容如下:
-29 8331 -1530424 -5190 40 19414334 65536 480 272

(另外有个情况发生是:触摸屏校正后,屏幕停在了提醒:
Starting Qtopia , please waiting...
不能进入图形系统
请求解答!)

更新:
针对yangliu的情况,真正的原因是kernel配置的问题,而非文件系统的问题;不需要像以上所述那样修改/etc/friendlyarm-ts-input.conf。
解决办法:
按照友善提供的linux源码,make menuconfig 进入后对照修改自己的linux kernel配置。
实验现象:
重新配置并编译出的zImage可以挂载NFS文件系统,或直接加载NAND Flash中的yaffs2 img文件系统,并进入QT图形界面。
因为img文件系统并没有修改/etc/friendlyarm-ts-input.conf即可正常加载,因而判断不是touchscree-1wire的问题。
解决办法的理由原因:?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多