环境

Ubuntu虚拟机做交叉编译环境

firefly3399pro-JD4核心板 + 配套Firefly底板

Linux-SDK官方

需求

固定HDMI不论显示器的大小,输出固定的分辨率

解决办法

kernel/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c

static int dw_hdmi_connector_get_modes(struct drm_connector *connector)

{

struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,

connector);

struct edid *edid;

struct drm_display_mode *mode;

//const u8 def_modes[6] = {4, 16, 31, 19, 17, 2};

//此处修改为自己要固定的分辨率vic。分辨率的结构体数组定义为在kernel/drivers/gpu/drm/drm_edid.c中定义的edid_cea_modes[]数组。

const u8 def_modes[1] = {1};

struct drm_display_info *info = &connector->display_info;

struct hdr_static_metadata *metedata =

&connector->display_info.hdmi.hdr_panel_metadata;

int i, ret = 0;

if (!hdmi->ddc)

return 0;

edid = drm_get_edid(connector, hdmi->ddc);

//if (edid) {

//直接将该处的edid注释,改成if(0)。执行else中的固定分辨率程序。

if(0){

dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n",

edid->width_cm, edid->height_cm);

hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid);

hdmi->sink_has_audio = drm_detect_monitor_audio(edid);

drm_mode_connector_update_edid_property(connector, edid);

cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid);

ret = drm_add_edid_modes(connector, edid);

/* Store the ELD */

drm_edid_to_eld(connector, edid);

drm_mode_connector_update_hdr_property(connector, metedata);

kfree(edid);

} else {

hdmi->sink_is_hdmi = true;

hdmi->sink_has_audio = true;

for (i = 0; i < sizeof(def_modes); i++) {

mode = drm_display_mode_from_vic_index(connector,

def_modes,

31, i);

if (mode) {

if (!i)

mode->type = DRM_MODE_TYPE_PREFERRED;

drm_mode_probed_add(connector, mode);

ret++;

}

}

info->edid_hdmi_dc_modes = 0;

info->hdmi.y420_dc_modes = 0;

info->color_formats = 0;

dev_info(hdmi->dev, "failed to get edid\n");

}

return ret;

}

分辨率结构体数组

/*

* Probably taken from CEA-861 spec.

* This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c.

*

* Index using the VIC.

*/

static const struct drm_display_mode edid_cea_modes[] = {

/* 0 - dummy, VICs start at 1 */

{ },

/* 1 - 640x480@60Hz */

{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,

752, 800, 0, 480, 490, 492, 525, 0,

DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },

/* 2 - 720x480@60Hz */

{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,

798, 858, 0, 480, 489, 495, 525, 0,

DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },

/* 3 - 720x480@60Hz */

{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,

798, 858, 0, 480, 489, 495, 525, 0,

DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },

/* 4 - 1280x720@60Hz */

{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,

1430, 1650, 0, 720, 725, 730, 750, 0,

DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },

/* 5 - 1920x1080i@60Hz */

{ DRM_MODE("1920x1080i", DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008,

2052, 2200, 0, 1080, 1084, 1094, 1125, 0,

DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |

DRM_MODE_FLAG_INTERLACE),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },

/* 6 - 720(1440)x480i@60Hz */

{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,

801, 858, 0, 480, 488, 494, 525, 0,

DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |

DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },

/* 7 - 720(1440)x480i@60Hz */

{ DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,

801, 858, 0, 480, 488, 494, 525, 0,

DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |

DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },

/* 8 - 720(1440)x240@60Hz */

{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,

801, 858, 0, 240, 244, 247, 262, 0,

DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |

DRM_MODE_FLAG_DBLCLK),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },

/* 9 - 720(1440)x240@60Hz */

{ DRM_MODE("720x240", DRM_MODE_TYPE_DRIVER, 13500, 720, 739,

801, 858, 0, 240, 244, 247, 262, 0,

DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |

DRM_MODE_FLAG_DBLCLK),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },

/* 10 - 2880x480i@60Hz */

{ DRM_MODE("2880x480i", DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,

3204, 3432, 0, 480, 488, 494, 525, 0,

DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |

DRM_MODE_FLAG_INTERLACE),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },

};

结构体数组中定义了很多分辨率,就不一一列举了。

嵌入式linux hdmi分辨率,【Firefly3399Pro】rk3399pro在Framebuffer状态命令行模式中强制HDMI输出固定分辨率...相关推荐

  1. linux centos7 redhat7 怎么设置开机自动进入命令行模式

    设置 centos7/redhat7 开机默认进入命令行模式 首先用 root 用户打开配置文件 inittab,执行命令: vim /etc/inittab 由于 centos7 的 inittab ...

  2. linux三个命令模式切换,ubuntu16.04命令行模式和图形界面互相切换的两种解决办法,...

    ubuntu16.04命令行模式和图形界面互相切换的两种解决办法, 在ubuntu中,我们可以有两种工作模式,一种是纯字符的命令行模式,这种界面没有那么好操作,而且对命令要求比较熟悉,比较适合专业人士 ...

  3. 嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)

    你好!这里是风筝的博客, 欢迎和我一起交流. 最近入手了一块spi接口的tft彩屏,想着在我的h3板子上使用framebuffer驱动起来. 我们知道: Linux抽象出FrameBuffer这个设备 ...

  4. jq输出文本_如何用 Linux 命令行工具解析和格式化输出 JSON | Linux 中国

    我们将使用 Linux 上的命令行工具解析并格式化打印 JSON.它对于在 shell 脚本中处理大型 JSON 数据或在 shell 脚本中处理 JSON 数据非常有用.-- Ostechnix J ...

  5. linux服务器返回json,Linux 命令行工具解析和格式化输出 JSON的方法

    JSON 是一种轻量级且与语言无关的数据存储格式,易于与大多数编程语言集成,也易于人类理解 -- 当然,如果格式正确的话.JSON 这个词代表 J ava S cript O bject N otat ...

  6. linux命令行模式连接网络,centos命令行模式连接无线网络的过程

    1. 首先, 你的系统要能驱动无限网卡, 要是人品好的话, 系统已经自带了你的网卡的驱动程序. 不然就要先搞定无线网卡的驱动再说. 不然后面的步骤也就没必要了. 2. 看一下你的无线网卡叫什么: iw ...

  7. linux下运行python_在Linux命令行终端中使用python的简单方法(推荐)

    Linux终端中的操作均是使用命令行来进行的.因此,对于小白来说,熟记几个基本的命令行和使用方法能够较快的在Linux命令行环境中将python用起来. 打开命令行窗口 打开命令行窗口的快捷键如下: ...

  8. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  9. Linux 命令行模式下退出 vim

    Linux 命令行模式下退出 vim 命令 说明 :q! 强制退出,不保存 :q 退出 :wq! 强制保存并退出 :w <文件路径> 另存为 :saveas 文件路径 另存为 :x 保存并 ...

最新文章

  1. 使用CleanIISLog清除IIS记录
  2. 收藏 | 最新知识图谱论文清单(附解读、下载)
  3. 依图又斩获10冠!AI芯片拿下创新技术大奖,朱珑再谈智能密度
  4. 在UWP中自定义半边框样式的输入框
  5. mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比,于是写了个插件。
  6. 现在好用的mysql客户端_还在用 Navicat 的,可以试试这几款免费且好用的 MySQL 客户端...
  7. JAVA无法加载此类文件,Java 7错误:无法加载本机库:ld.so.1:java:致命:libscf.so.1:打开失败:没有此类文件或目录...
  8. Shady 深度学习课程
  9. [备忘]Visual Studio常用小技巧
  10. oracle忽略除数为0,ora-01476除数为0的解决办法,oracle中decode()的使用
  11. elt和etl_ETL和ELT架构概述
  12. html跨页面传数组,如何把一个页面的对象数组传到另外一个页面,没有后台,存js_html/css_WEB-ITnose...
  13. 基于ssm医院病历管理系统
  14. ERROR 126 HY000 Incorrect key file for table '/tmp/ sql 1
  15. CentOS 7拨号上网(ADSL PPPoE)
  16. 动点四边形周长最短_中考数学之四边形周长最小值
  17. 软件工程知识点复习第二章
  18. Lua基础入门—— 写出自己的魔兽世界插件
  19. 网站只有首页能打开,其他页面404
  20. windows server 2008R2安装visual studio2015

热门文章

  1. Mac中使用brew安装指定版本软件包
  2. Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常
  3. linux wget命令详解
  4. Struts2+Hibernate+Spring 整合示例
  5. [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
  6. HTTP报文简单介绍
  7. 【Android开发】范例2-实现简易绘图板
  8. winform 在指定目录下已经生成资源Image图片的方式
  9. 也许你所知道的学习方法都是错的
  10. crontab实例分析(转)