【嵌入式开发】手把手教你4418/6818开发板屏幕修改

本文转自迅为: http://www.topeetboard.com

开发平台:iTOP-4418/6818开发板

4418&6818屏幕修改分别需要修改uboot和内核,首先是修改uboot。

1.首先进入到android源码目录下:

图1

4418平台,需要修改uboot的文件是:u-boot/board/s5p4418/drone2/board.c,使用vi命令打开这个文件,屏幕的默认参数设置在49行到93行,如下图:

图2

4418暂时支持9.7寸,7寸,4.3寸屏幕,他们的设置在该文件,如下图所示的地方:

图3

上图中代码的功能,首先是从uboot的环境变量里面读取出当前使用的哪款屏幕,然后根据屏幕类型选择对应分支的设置。比如屏幕的宽,高,刷新率,如果用户使用其它的屏幕,需要在此处修改(需要根据自己屏幕的参数,修改图2中的那些默认变量)(6818的修改文件是:u-boot/board/s5p6818/dronel/board.c,方法同上)

2,linux内核部分的修改:

首先是文件kernel/arch/arm/plat-s5p4418/topeet/include/cfg_main.h(6818对应的文件是:kernel/arch/arm/plat-s5p6818/topeet/include/cfg_main.h)

这个文件里定义里一组与屏幕相关的宏,如下所示:

/*------------------------------------------------------------------------------

*      Display (DPC and MLC)

*/

/* Primary */

#define CFG_DISP_PRI_SCREEN_LAYER               0

#define CFG_DISP_PRI_SCREEN_RGB_FORMAT          MLC_RGBFMT_A8R8G8B8

#define CFG_DISP_PRI_SCREEN_PIXEL_BYTE          4

#define CFG_DISP_PRI_SCREEN_COLOR_KEY           0x090909

#define CFG_DISP_PRI_VIDEO_PRIORITY                             2       // 0, 1, 2, 3

#define CFG_DISP_PRI_BACK_GROUND_COLOR          0x000000

#define CFG_DISP_PRI_MLC_INTERLACE              CFALSE

#define CFG_DISP_PRI_LCD_WIDTH_MM                               154

#define CFG_DISP_PRI_LCD_HEIGHT_MM                              85

/* modify by cym 20150811 */

#if 0

#define CFG_DISP_PRI_RESOL_WIDTH                        1024    // X Resolution

#define CFG_DISP_PRI_RESOL_HEIGHT                               600     // Y Resolution

#else

#define CFG_DISP_PRI_RESOL_WIDTH                        800//1024    // X Resolution

#define CFG_DISP_PRI_RESOL_HEIGHT                               1280//768     // Y Resolution

#endif

/* end remove */

#define CFG_DISP_PRI_HSYNC_SYNC_WIDTH            20

#define CFG_DISP_PRI_HSYNC_BACK_PORCH           160

#define CFG_DISP_PRI_HSYNC_FRONT_PORCH          160

#define CFG_DISP_PRI_HSYNC_ACTIVE_HIGH          CTRUE

#define CFG_DISP_PRI_VSYNC_SYNC_WIDTH            3

#define CFG_DISP_PRI_VSYNC_BACK_PORCH            23

#define CFG_DISP_PRI_VSYNC_FRONT_PORCH           12

#define CFG_DISP_PRI_VSYNC_ACTIVE_HIGH          CTRUE

#define CFG_DISP_PRI_CLKGEN0_SOURCE             DPC_VCLK_SRC_PLL2

#define CFG_DISP_PRI_CLKGEN0_DIV                12 // even divide

#define CFG_DISP_PRI_CLKGEN0_DELAY              0

#define CFG_DISP_PRI_CLKGEN0_INVERT                             0

#define CFG_DISP_PRI_CLKGEN1_SOURCE             DPC_VCLK_SRC_VCLK2

#define CFG_DISP_PRI_CLKGEN1_DIV                1

#define CFG_DISP_PRI_CLKGEN1_DELAY              0

#define CFG_DISP_PRI_CLKGEN1_INVERT                             0

#define CFG_DISP_PRI_CLKSEL1_SELECT                             0

#define CFG_DISP_PRI_PADCLKSEL                  DPC_PADCLKSEL_VCLK      /* VCLK=CLKGEN1, VCLK12=CLKGEN0 */

#define CFG_DISP_PRI_PIXEL_CLOCK                                800000000/CFG_DISP_PRI_CLKGEN0_DIV

#define CFG_DISP_PRI_OUT_SWAPRB                                 CFALSE

#define CFG_DISP_PRI_OUT_FORMAT                 DPC_FORMAT_RGB888

#define CFG_DISP_PRI_OUT_YCORDER                DPC_YCORDER_CbYCrY

#define CFG_DISP_PRI_OUT_INTERLACE              CFALSE

#define CFG_DISP_PRI_OUT_INVERT_FIELD           CFALSE

#define CFG_DISP_LCD_MPY_TYPE                                           0

/*------------------------------------------------------------------------------

*      LVDS

*/

/* modify by cym 20150811 */

#if 0

#define CFG_DISP_LVDS_LCD_FORMAT                LVDS_LCDFORMAT_VESA

#else

#define CFG_DISP_LVDS_LCD_FORMAT                LVDS_LCDFORMAT_JEIDA

#endif

/* end modify */

然后是文件:kernel/arch/arm/plat-s5p4418/topeet/device.c(6818对应的文件:kernel/arch/arm/plat-s5p6818/topeet/device.c)

在这个文件找到函数setup_width_height_param,如下:

/* add by cym 20151128 */

#if 1

static int __init setup_width_height_param(char *str)

{

if (!strncasecmp("9.7", str, 3)) {

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

#if defined(CONFIG_TOUCHSCREEN_FT5X0X)

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

ft5x0x_pdata.screen_max_x = 768;

ft5x0x_pdata.screen_max_y = 1024;

#endif

#if defined (CONFIG_FB_NXP)

#if defined (CONFIG_FB0_NXP)

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

fb0_plat_data.x_resol = 1024;

fb0_plat_data.y_resol = 768;

#endif

#endif

}

else if(!strncasecmp("7.0", str, 3))

{

#if defined(CONFIG_TOUCHSCREEN_FT5X0X)

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

ft5x0x_pdata.screen_max_x = 800;

ft5x0x_pdata.screen_max_y = 1280;

#endif

#if defined (CONFIG_FB_NXP)

#if defined (CONFIG_FB0_NXP)

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

fb0_plat_data.x_resol = 800;

fb0_plat_data.y_resol = 1280;

#endif

#endif

}

/* add by cym 20160222 */

#if 1

else if(!strncasecmp("4.3", str, 3))

{

#if defined (CONFIG_FB_NXP)

#if defined (CONFIG_FB0_NXP)

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

fb0_plat_data.x_resol = 480;

fb0_plat_data.y_resol = 272;

#endif

#endif

}

#endif

/* end add */

/* add by cym 20170810 */

#if 1

else if(!strncasecmp("1024x600", str, 8))

{

#if defined(CONFIG_TOUCHSCREEN_FT5X0X)

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

ft5x0x_pdata.screen_max_x = 600;

ft5x0x_pdata.screen_max_y = 1024;

ft5x0x_i2c_bdi.irq = PB_PIO_IRQ(CFG_IO_TSC2007_TOUCH_PENDOWN_DETECT);

ft5x0x_pdata.gpio_irq = CFG_IO_TSC2007_TOUCH_PENDOWN_DETECT;

tsc2007_i2c_bdi.irq = NULL;//PB_PIO_IRQ(CFG_IO_TOUCH_PENDOWN_DETECT);

#endif

#if defined (CONFIG_FB_NXP)

#if defined (CONFIG_FB0_NXP)

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

fb0_plat_data.x_resol = 1024;

fb0_plat_data.y_resol = 600;

#endif

#endif

}

#endif

/* end add */

/* add by cym 20161104 */

#if 1

else if(!strncasecmp("hdmi", str, 3))

{

#if defined (CONFIG_FB_NXP)

#if defined (CONFIG_FB0_NXP)

//printk("fun:%s, line = %d(lcdtype:%s)\n", __FUNCTION__, __LINE__, str);

fb0_plat_data.x_resol = 1920;

fb0_plat_data.y_resol = 1080;

#endif

#endif

}

#endif

/* end add */

//printk("fun:%s, line = %d\n", __FUNCTION__, __LINE__);

}

early_param("lcdtype", setup_width_height_param);

#endif

/* end add */

这个函数根据uboot传递过来的lcdtype选择对应屏幕的设置,这里主要是修改屏幕的分辨率,如果使用其它屏幕,修改对应的分辨率就可以了。

然后是文件:kernel/arch/arm/mach-s5p4418/dev-display.c(6818对应的文件:kernel/arch/arm/mach-s5p4418/dev-display.c)

同样在这个文件找到函数:setup_width_height_param,如下所示:

/* add by cym 20151128 */

#if 1

static int __init setup_width_height_param(char *str)

{

if (!strncasecmp("9.7", str, 3)) {

#if defined (CONFIG_NXP_DISPLAY_LCD)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lcd_vsync.h_active_len = 1024;

__lcd_vsync.v_active_len = 768;

__lcd_vsync.clk_div_lv0 = 14;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_LVDS)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lvds_vsync.h_active_len = 1024;

__lvds_vsync.v_active_len = 768;

__lvds_vsync.clk_div_lv0 = 14;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_MIPI)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__mipi_vsync.h_active_len = 1024;

__mipi_vsync.v_active_len = 768;

__mipi_vsync.clk_div_lv0 = 14;

#endif

#endif

}

else if(!strncasecmp("7.0", str, 3))

{

#if defined (CONFIG_NXP_DISPLAY_LCD)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lcd_vsync.h_active_len = 800;

__lcd_vsync.v_active_len = 1280;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_LVDS)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lvds_vsync.h_active_len = 800;

__lvds_vsync.v_active_len = 1280;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_MIPI)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__mipi_vsync.h_active_len = 800;

__mipi_vsync.v_active_len = 1280;

#endif

#endif

}

/* add by cym 20160222 */

#if 1

else if(!strncasecmp("4.3", str, 3))

{

#if defined (CONFIG_NXP_DISPLAY_LCD)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lcd_vsync.h_active_len = 480;

__lcd_vsync.v_active_len = 272;

__lcd_vsync.clk_div_lv0 = 24;

__lcd_vsync.clk_div_lv1 = 2;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_LVDS)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lvds_vsync.h_active_len = 480;

__lvds_vsync.v_active_len = 272;

__lvds_vsync.clk_div_lv0 = 24;

__lvds_vsync.clk_div_lv1 = 2;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_MIPI)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__mipi_vsync.h_active_len = 480;

__mipi_vsync.v_active_len = 272;

__mipi_vsync.clk_div_lv0 = 24;

__mipi_vsync.clk_div_lv1 = 2;

#endif

#endif

}

#endif

/* end add */

/* add by cym 20170810 */

#if 1

else if(!strncasecmp("1024x600", str, 8))

{

#if defined (CONFIG_NXP_DISPLAY_LCD)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lcd_vsync.h_active_len = 1024;

__lcd_vsync.v_active_len = 600;

//__lcd_vsync.clk_div_lv0 = 24;

//__lcd_vsync.clk_div_lv1 = 2;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_LVDS)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lvds_vsync.h_active_len = 1024;

__lvds_vsync.v_active_len = 600;

//__lvds_vsync.clk_div_lv0 = 24;

//__lvds_vsync.clk_div_lv1 = 2;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_MIPI)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__mipi_vsync.h_active_len = 1024;

__mipi_vsync.v_active_len = 600;

//__mipi_vsync.clk_div_lv0 = 24;

//__mipi_vsync.clk_div_lv1 = 2;

#endif

#endif

}

#endif

/* end add */

/* add by cym 20161104 */

#if 1

else if(!strncasecmp("hdmi", str, 3))

{

#if defined (CONFIG_NXP_DISPLAY_LCD)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lcd_vsync.h_active_len = 1920;

__lcd_vsync.v_active_len = 1080;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_LVDS)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__lvds_vsync.h_active_len = 1920;

__lvds_vsync.v_active_len = 1080;

#endif

#endif

#if defined (CONFIG_NXP_DISPLAY_MIPI)

#if defined(CFG_DISP_PRI_RESOL_WIDTH) && defined(CFG_DISP_PRI_RESOL_HEIGHT)

__mipi_vsync.h_active_len = 1920;

__mipi_vsync.v_active_len = 1080;

#endif

#endif

}

#endif

/* end add */

//printk("fun:%s, line = %d\n", __FUNCTION__, __LINE__);

}

early_param("lcdtype", setup_width_height_param);

#endif

/* end add */

这个函数根据uboot传递过来的lcdtype选择对应屏幕的设置,这里主要是修改屏幕的分辨率,刷新率,如果使用其它屏幕,修改对应的分辨率就可以了。

关于屏幕的设置主要就是修改上面的文件

【嵌入式开发】手把手教你4418/6818开发板屏幕修改 本文转自迅为: http://www.topeetboard.com 开发平台:iTOP-4418/6818开发板 44186818屏幕相关推荐

  1. pythonweb开发-手把手教你写网站:Python WEB开发技术实战

    摘要:本文详细介绍了Python WEB开发的基础入门.以一个博客站点的开发为例讲解了基于Django框架开发WEB站点的全过程.通过本文的学习可以快速掌握基于Django的Python WEB的开发 ...

  2. 油价小程序开发 - 手把手教你写小程序(适合初学者)

    最近有空开了一个简单的油价小程序,分享给大家学习.(适合新手练手项目,大神们请多指教) 首先展示一下小程序 油价小程序预览 小程序分两屏,首屏展示的是每个城市的油价.每日黄历.分享功能.定位当前城市功 ...

  3. android 翻译功能开发,手把手教你开发Android studio翻译插件

    前言 由于我英语很烂,写代码的时候需要用英文命名,有些单词不知道,就只能切换到浏览器打开网页搜索,再拿到英文单词.这样每次都要切换出去,很麻烦,于是,就想着开发一个Android studio插件,在 ...

  4. iOS开发--手把手教你制作音乐播放器

    我个人之前有个想法,把平常用的小软件,闲暇之余自己都实现一个迷你版本,打造自己的app专属文件夹,比如闹钟.音乐播放器.视频播放器.电子书以及贪吃蛇之类的小游戏.我相信通过实现这些小程序,能够进一步熟 ...

  5. c多语言开发,“手把手”教你开发一个多语言翻译chrome插件

    多语言互译chrome插件 最近逛掘金看了下,前端必备技能项竟然有"chrome插件开发",想想了自己的英语功力(开机自启动"有道翻译"-哈哈哈),于是,话不多 ...

  6. python二次开发ug_二次开发 | 手把手教你用python进行后处理

    文章来源 simwe论坛上看到一篇帖子,发布于2011年,讲述的比较通俗易懂,适合使用Python进行abaqus后处理二次开发的初学者. http://forum.simwe.com/forum.p ...

  7. java学生签到系统视频教程_手把手教你做一个Java web学生信息、选课、签到考勤、成绩管理系统附带完整源码及视频开发教程...

    四个阶段的Java web学生信息系统视频教程终于录制完成了,系统用到的知识点有:jsp+servlet+mysql+jquery+ajax,前端采用的是当下最流行的easyui管理框架,全部采用面向 ...

  8. 大厂年薪43w测试开发手把手教你搭建Web自动化测试框架,超详细

    测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人.本章和 ...

  9. 手把手教你实现一个IAP程序

    从裸机到嵌入式Linux--手把手教你实现一个IAP程序 什么是IAP IAP实现过程分析 内存分布及划分 IAP更新过程分析 使用方法 什么是IAP 简单讲IAP就是一个用于应用更新的程序,常见于物 ...

最新文章

  1. 关于 SAP Spartacus OAuth 2.0 Resource Owner Password Flow 实现的一些讨论
  2. 百度前端学院-基础学院-第四课
  3. 前端学习(2224):react之函数式组件
  4. HBase学习笔记——概念及原理
  5. 【Luogu2085】最小函数值(优先队列)
  6. vb6实现下载带进度
  7. MMD布料解算【新手小白】
  8. 代码坏味道 之 17 狎昵关系 inappropriate intimacy
  9. Excel如何快速将多行数据转为一行
  10. C语言/C++编程学习三种循环用法和区别
  11. 嵌入式系统基础及知识及接口技术总结
  12. 一文了解 DataLeap 中的 Notebook
  13. DateAdd 函数
  14. obiee12c ssl 启动服务报错BEA-149535BEA-149504
  15. Quartus中仿真时出现no simulation input file assignment specify 解决方法 (转载)
  16. CentOS7-0-创建本地yum源和局域网yum源
  17. 使用爱码哥之后的心得
  18. OpenLayers使用
  19. 短视频APP软件开发源码提供
  20. es - elasticsearch - aggs - pipeline - moving_avg

热门文章

  1. 【第54篇】一种用于视觉识别的快速知识蒸馏框架
  2. Python 可视化 | 关联图 - 散点图1
  3. python搭建_简单_交易系统【转载】
  4. html css js调用dll,node调用dll 方法,及详细步骤
  5. Win11记事本打不开怎么办?打不开Win11记事本的解决方法
  6. C练题笔记之:Leetcode-136. 只出现一次的数字
  7. Springboot+高考志愿填报信息管理系统 毕业设计-附源码251922
  8. spi ioctl无效参数解决
  9. 关于流量分析软件brim最新安装方法
  10. 基于OpenGL的冰川与火鸟(光照计算模型、视景体、粒子系统)