手把手教你移植linux内核OK6410(三)OK6410--LCD液晶驱动移植:下边来移植一个4.3寸LCD液晶。首先打开我们的板级BSP文件,更改上面的fb部份代码,即液晶配置部份代码[cpp]viewplaincopy1.root@ubuntu:/forlinx/linux-3.3.5/arch/arm/mach-s3c64xx#geditmach-ok6410.c找到staticstructs3c_fb_pd_winok6410_fb_win0这个结构体更改成[cpp]viewplaincopy1.staticstructs3c_fb_pd_winok6410_fb_win0={2./*thisistoensureweusewin0*/3..win_mode={4..left_margin=2,5..right_margin=2,6..upper_margin=2,7..lower_margin=2,8..hsync_len=41,9..vsync_len=10,10..xres=480,11..yres=272,12.},13..max_bpp=32,14..default_bpp=16,15.};不同的液晶对应的配置会不同,具体查看对应液晶的指南。
继续找寻,找到[cpp]viewplaincopy1.staticstructmap_descok6410_iodesc[]={};前面这个结构体是空的linux内核移植教程,我们更改为[cpp]viewplaincopy1.staticstructmap_descok6410_iodesc[]={2.{3..virtual=(unsignedlong)S3C_VA_LCD,4..pfn=__phys_to_pfn(S3C_PA_FB),5..length=SZ_16K,6..type=MT_DEVICE,7.},8.};##################################################################################################将飞凌3.0.1内核(或其它内核)中的drviers/video/下的samsung目录拷贝我们对应的目录中来。更改drviers/video/的Kconfig文件,在文件的最后添加[cpp]viewplaincopy1.source"drivers/video/samsung/Kconfig"更改drviers/video/的Makefie文件,把我们添加进来的文件进行内核编译时同时编译,再最后一行添加:[cpp]viewplaincopy1.obj-$(CONFIG_FB_S3C_EXT)+=samsung/#################################################################################################在arch/arm/plat-samsung/include/plat/map-base.h上面添加[cpp]viewplaincopy1.#defineS3C_VA_LCDS3C_ADDR(0/*LCD*/在include/generated/atuoconfig.h文件最后添加[cpp]viewplaincopy1.#defineCONFIG_FB_S3C_EXT_NUM4在drivers/video/samsung/s3cfb_fimd4x.c文件中的3.0中的对应1438行[cpp]viewplaincopy1.s3c6410_pm_do_save(s3c_lcd_save,ARRAY_SIZE(s3c_lcd_save));更改成[cpp]viewplaincopy1.s3c_pm_do_save(s3c_lcd_save,ARRAY_SIZE(s3c_lcd_save));把1459行,[cpp]viewplaincopy1.s3c6410_pm_do_restore(s3c_lcd_save,ARRAY_SIZE(s3c_lcd_save));更改成[cpp]viewplaincopy1.s3c_pm_do_restore(s3c_lcd_save,ARRAY_SIZE(s3c_lcd_save));保存。
#################################################################################################飞凌linux源码中的archarmmach-s3c64xxincludemach下的regs-fb.h和regs-lcd.h拷贝到我们对应的目录。配置内核DeviceDrivers>Graphicssupport>Supportforframebufferdevices>(上面的都空选)Supportforframebufferdevices>[]Backlight&LCDdevicesupport>S3CFramebufferSupport(eXtended)(更改Kconfig以后才有这个选)SelectLCDType(4.3inch480x272TFTLCD)>(X)4.3inch480x272TFTLCDAdvancedoptionsforS3CFramebufferSelectBPP(BitsPerPixel)(16BPP)>(4)NumberofFramebuffers[]EnableVirtualScreen[*]EnableDoubleBufferingConsoledisplaydriversupport>FramebufferConsolesupport[*]Bootuplogo>(显示小企鹅)[*]Standard224-colorLinuxlogo#################################################################################又可以开始编译了把内核下载到开发板后linux内核移植教程红旗linux6.0教程arch linux,启动的时侯会出现一只企鹅就是linux。
启动部份出现S3C_LCDclockgotenabled::133.000MhzLCDTYPE::LTE480WVwillbeinitializedWindow[0]-FB1:map_video_memory:clearffd80000:00070007ff800800FBFB1:map_video_memory:dma=5f900000cpu=ffd80000size=0007f800Window[0]-FB2:map_video_memory:clearffdbfc00:0003fc00FBFB2:map_video_memory:dma=5f93fc00cpu=ffdbfc00size=0003fc00Console:switchingtocolourframebufferdevice60x34fb0:s3cfbframebufferdeviceWindow[1]-FB1:map_video_memory:clearffd00000:00070007ff800800FBFB1:map_video_memory:dma=5f980000cpu=ffd00000size=0007f800Window[1]-FB2:map_video_memory:clearffdffd33fcfc00:0003fc00FBFB2:map_video_memory:dma=5f9bfc00cpu=ffd3fc00size=0003fc00fb1:s3cfbframebufferdeviceWindow[2]-FB1:map_video_memory:clearffcc0000:0003fc00FBFB1:map_video_memory:dma=5fa00000cpu=ffcc0000size=0003fc00fb2:s3cfbframebufferdeviceWindow[3]-FB1:map_video_memory:clearffc80000:0003fc00FBFB1:map_video_memory:dma=5fa40000cpu=ffc80000size=0003fc00fb3:s3cfbframebufferdevice证明你的LCD驱动已然成功移植了