[x86 ubuntu22.04]投影模式选择“只使用外部”,外部edp屏幕无背光

news2024/12/19 15:05:05

1 问题描述

        CPU:G6900E

        OS:ubuntu22.04

        Kernel:6.8.0-49-generic

        系统下有两个一样的 edp 屏幕,投影模式选择“只使用外部”,内部 edp 屏幕灭,外部 edp 屏幕无背光。DP-1 是外部 edp 屏幕,eDP-1 是内部 edp 屏幕,使用“xrandr --output eDP-1 --off”命令关闭内部 edp 屏幕,效果也是内部 edp 屏幕灭,外部 edp 屏幕无背光。

2 解决过程

2.1 尝试调节背光

        在系统上查找背光调节节点,命令如下所示,发现两个 edp 屏幕共用内部 edp 屏幕背光调节节点,都是“/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness”。

jw@jw-Windows-cpmpact-G6900E:~$ sudo find / -name brightness
/sys/devices/pci0000:00/0000:00:14.3/leds/phy0-led/brightness
/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.1/1-5.1:1.0/0003:1C4F:0002.0002/input/input6/input6::numlock/brightness
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.1/1-5.1:1.0/0003:1C4F:0002.0002/input/input6/input6::scrolllock/brightness
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.1/1-5.1:1.0/0003:1C4F:0002.0002/input/input6/input6::capslock/brightness

        在投影模式为“镜像”或者“拼接显示器”模式下时,修改内部 edp 屏幕背光调节节点的值,命令如下所示,两个 edp 屏幕的背光一起变化。在投影模式“只使用外部模式下”,修改内部 edp 屏幕背光调节节点值,外部 edp 屏幕背光无变化。

root@jw-Windows-cpmpact-G6900E:/home/jw# cat /sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness
96000
root@jw-Windows-cpmpact-G6900E:/home/jw# echo 30000 > /sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness
root@jw-Windows-cpmpact-G6900E:/home/jw# echo 96000 > /sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness

2.2 尝试设置主次屏幕

        默认情况下内部 edp 屏幕(eDP-1)为主屏幕,外部 edp 屏幕(DP-1)为次屏幕,将外部屏幕设置为主屏幕,命令为“xrandr --auto --output DP1 --primary”,投影模式选择“只使用外部”,效果也是内部 edp 屏幕灭,外部 edp 屏幕无背光,修改内部 edp 屏幕背光调节节点的值,外部 edp 屏幕背光无变化。

2.3 尝试修改驱动

2.3.0 编译新内核 deb 包

       给 ubuntu 20.04/22.04/24.04 编译换上最新的 6.12 内核(生成 deb 包) - Ubuntu中文论坛,在该网站有 ubuntu 相应的内核和 补丁可以下载。

        下载对应内核版本和补丁。

        wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.8.tar.xz

        wget https://forum.ubuntu.com.cn/download/file.php?id=195233&sid=d2ce50a2ba3b3f8ed6b52cafa4a7ab10

        编译内核生成 deb 包,相应的操作命令如下所示。

tar Jxf linux-6.8.tar.xz
mv linux-6.8 linux-6.8.0
mv linux-6.8.0.diff.zst.txt linux-6.8.0.diff.zst
zstd -d linux-6.8.0.diff.zst
cd linux-6.8.0
patch -p1 <../linux-6.8.0.diff
chmod +x debian/rules
chmod +x -R debian/scripts/*
debuild

        编译完成生成的 deb 包在上一级目录,如下所示。

zwzn2064@zwzn2064-CVN-Z690D5-GAMING-PRO:~/sda1/elo_kernel/linux-6.8.0$ ls ../*.deb
../linux-buildinfo-6.8.0-3-generic_6.8.0-3.10_amd64.deb  ../linux-libc-dev_6.8.0-3.10_amd64.deb
../linux-cloud-tools-common-6.8.0_6.8.0-3.10_all.deb     ../linux-modules-6.8.0-3-generic_6.8.0-3.10_amd64.deb
../linux-doc_6.8.0-3.10_all.deb                          ../linux-source-6.8.0_6.8.0-3.10_all.deb
../linux-headers-6.8.0-3_6.8.0-3.10_all.deb              ../linux-tools-common-6.8.0_6.8.0-3.10_all.deb
../linux-headers-6.8.0-3-generic_6.8.0-3.10_amd64.deb    ../linux-tools-host-6.8.0_6.8.0-3.10_all.deb
../linux-image-6.8.0-3-generic_6.8.0-3.10_amd64.deb
zwzn2064@zwzn2064-CVN-Z690D5-GAMING-PRO:~/sda1/elo_kernel/linux-6.8.0$

        将这些 deb 包安装到系统上,相应的操作命令如下所示。安装后,重启系统不断按下“Shift”,即可选择新安装的内核版本启动系统。

sudo dpkg -i *.deb
sudo update-grub

2.3.1 修改驱动

        控制 edp 屏幕背光的驱动代码为“drivers/gpu/drm/i915/display/intel_backlight.c”。调节背光的函数为“bxt_set_backlight”,加上打印,输出寄存器和值,编译成 deb 包安装到系统里面启动。投影模式选择“只使用外部”,使用 dmesg 打印日志,发现有对一个寄存器写值为 0。怀疑是不是这个动作引起了这个 bug,将这个“bxt_set_backlight ”函数的功能注释掉,编译成 deb 包安装进系统,投影模式选择“只使用外部”,bug 没有解除。

drivers/gpu/drm/i915/display/intel_backlight.c
static void bxt_set_backlight(const struct drm_connector_state *conn_state, u32 level)
 {
         struct intel_connector *connector = to_intel_connector(conn_state->connector);
         struct drm_i915_private *i915 = to_i915(connector->base.dev);
         struct intel_panel *panel = &connector->panel;
  
         intel_de_write(i915, BXT_BLC_PWM_DUTY(panel->backlight.controller), level);
 }

        既然 bug 与背光 pwm 调节寄存器无光,那可能是与背光 pwm 使能寄存器有关,搜索"disable_backlight"相关函数,相应的函数如下所示。

zwzn2064@zwzn2064-CVN-Z690D5-GAMING-PRO:~/sda1/elo_kernel/linux-6.8.0$ grep -rn "disable_backlight" drivers/gpu/drm/i915/display/intel_backlight.c
333:static void lpt_disable_backlight(const struct drm_connector_state *old_conn_state, u32 level)
359:static void pch_disable_backlight(const struct drm_connector_state *old_conn_state, u32 val)
371:static void i9xx_disable_backlight(const struct drm_connector_state *old_conn_state, u32 val)
376:static void i965_disable_backlight(const struct drm_connector_state *old_conn_state, u32 val)
385:static void vlv_disable_backlight(const struct drm_connector_state *old_conn_state, u32 val)
396:static void bxt_disable_backlight(const struct drm_connector_state *old_conn_state, u32 val)
411:static void cnp_disable_backlight(const struct drm_connector_state *old_conn_state, u32 val)
425:static void ext_pwm_disable_backlight(const struct drm_connector_state *old_conn_state, u32 level)
1600:static void intel_pwm_disable_backlight(const struct drm_connector_state *conn_state, u32 level)
1703:   .disable = bxt_disable_backlight,
1712:   .disable = cnp_disable_backlight,
1721:   .disable = lpt_disable_backlight,
1730:   .disable = lpt_disable_backlight,
1739:   .disable = pch_disable_backlight,
1748:   .disable = ext_pwm_disable_backlight,
1756:   .disable = vlv_disable_backlight,
1765:   .disable = i965_disable_backlight,
1774:   .disable = i9xx_disable_backlight,
1783:   .disable = intel_pwm_disable_backlight,

        这些函数都加上“printk( %s\n", __func__)”,编译成 deb 包,安装进内核,投影模式选择“只使用外部”,使用 dmesg 打印日志,发现输出“cnp_disable_backlight”,怀疑是这个函数关闭了背光 pwm 使能,注释掉这个函数的功能,如下所示,bug 成功解决。

zwzn2064@zwzn2064-CVN-Z690D5-GAMING-PRO:~/sda1/elo_kernel/linux-6.8.0$ git diff
diff --git a/drivers/gpu/drm/i915/display/intel_backlight.c b/drivers/gpu/drm/i915/display/intel_backlight.c
index 3f3cd944a..b5d660877 100644
--- a/drivers/gpu/drm/i915/display/intel_backlight.c
+++ b/drivers/gpu/drm/i915/display/intel_backlight.c
@@ -410,6 +410,7 @@ static void bxt_disable_backlight(const struct drm_connector_state *old_conn_sta
 
 static void cnp_disable_backlight(const struct drm_connector_state *old_conn_state, u32 val)
 {
+       /*
        struct intel_connector *connector = to_intel_connector(old_conn_state->connector);
        struct drm_i915_private *i915 = to_i915(connector->base.dev);
        struct intel_panel *panel = &connector->panel;
@@ -418,6 +419,7 @@ static void cnp_disable_backlight(const struct drm_connector_state *old_conn_sta
 
        intel_de_rmw(i915, BXT_BLC_PWM_CTL(panel->backlight.controller),
                     BXT_BLC_PWM_ENABLE, 0);
+       */
 }

3 自动进入新的内核驱动系统

        将内核 deb 包安装进系统后,每次在系统重启都要按“Shift”选择新的内核版本进行启动,如下所示,很麻烦。

        可以修改“/etc/default/grub”配置文件,系统在每次重启或开机时自动选择新的内核版本启动。原始“/etc/default/grub”配置文件如下所示。因为“6.8.0-3-generic”内核排列在“6.8.0-49-generic”后面第二个,所以将“GRUB_DEFAULT=0”改成“GRUB_DEFAULT="1> 2"”,然后执行“sudo update-grub”,即可每次重启系统都选择“6.8.0-3-generic”内核启动。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

清理C盘小记

突然C盘就爆满了&#xff0c;想当初还是给他预留了120G的空间&#xff0c;感觉到现在也不够用了&#xff0c;担心出现死机的情况就赶紧进行了清理。有一说一&#xff0c;清理回收站是真的有用。 参考&#xff1a;C盘清理指南&#xff0c;清理出30G起&#xff0c;超详细总结&am…

Docker:Docker Compose(补充三)

Docker&#xff1a;Docker Compose 1. Docker Compose 批量管理容器的工具 1. Docker Compose 批量管理容器的工具 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件来配置应用服务&#xff0c;它允许用户编排、组合和配置多个容器的部署…

lightRAG 论文阅读笔记

论文原文 https://arxiv.org/pdf/2410.05779v1 这里我先说一下自己的感受&#xff0c;这篇论文整体看下来&#xff0c;没有太多惊艳的地方。核心就是利用知识图谱&#xff0c;通过模型对文档抽取实体和关系。 然后基于此来构建查询。核心问题还是在解决知识之间的连接问题。 论…

Visual studio的AI插件-通义灵码

通义灵码 TONGYI Lingma 兼容 Visual Studio、Visual Studio Code、JetBrains IDEs 等主流 IDE&#xff1b;支持 Java、Python、Go、C/C、C#、JavaScript、TypeScript、PHP、Ruby、Rust、Scala 等主流编程语言。 安装 打开扩展管理器&#xff0c;搜送“TONGYI Lingma”&…

shutil 文件拷贝copy - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

attack xv6

思路 被这个实验折磨了两天&#xff0c;可能是2024新出的一个实验内容&#xff0c;网上资料少&#xff0c;参考了一篇仅有的博客&#xff0c;吭哧吭哧分析出来了个大概吧…在此记录一下&#xff0c;以便帮助有需要的人。 attack xv6的ans只有几行代码&#xff0c;根据实验描述…

Flink CDC实时同步mysql数据

官方参考资料&#xff1a; https://nightlies.apache.org/flink/flink-cdc-docs-master/zh/docs/connectors/flink-sources/mysql-cdc/ Apache Flink 的 Change Data Capture (CDC) 是一种用于捕获数据库变化&#xff08;如插入、更新和删除操作&#xff09;的技术。Flink CDC…

eclipse 如何设置项目、不同类型文件的 utf8 编码

编码问题一直是软件开发中让人头疼的小细节&#xff0c;尤其是团队协作中&#xff0c;若编码格式不统一&#xff0c;乱码问题便会频繁出现。那么如何在 Eclipse 中统一设置项目和文件的 UTF-8 编码&#xff0c;避免因编码问题造成不必要的困扰呢&#xff1f;今天&#xff0c;我…

Unity中触发器Trigger无法被射线检测到的问题

今天在做项目的时候发现,同一个物体,当他是碰撞器的时候,可以被射线检测到. 但是当他变成触发器的时候,射线就检测不到了??? 本来以为就是这样的,但是查了资料发现并没有这样的限制,触发器也是可以正常被射线检测的 到处查资料都没有发现问题,后来发现是下面这个设置不知道…

第一个AJAX调用XMLHttpRequest

第一个AJAX调用XMLHttpRequest 创建对象&#xff0c;用于浏览器和服务器的通信&#xff0c;不需要刷新浏览器 const request new XMLHttpRequest();通过GET请求方式在API中请求数据 request.open(GET, https://restcountries.com/v3.1/name/Russia);注&#xff1a;我这里的…

群落生态学研究进展】Hmsc包开展单物种和多物种分析的技术细节及Hmsc包的实际应用

联合物种分布模型&#xff08;Joint Species Distribution Modelling&#xff0c;JSDM&#xff09;在生态学领域&#xff0c;特别是群落生态学中发展最为迅速&#xff0c;它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…

如何在 Apifox 中发布多语言的 API 文档?

“API 文档是开发协作的桥梁&#xff0c;而多语言支持则让这座桥梁跨越更多的技术边界。使用 Apifox&#xff0c;不仅可以快速生成 API 文档&#xff0c;还能轻松实现多语言的支持与发布。今天&#xff0c;我们一起来探索 Apifox 在多语言文档发布中的最佳实践&#xff01;” …

华为云检查服务器状态

VNC方式登录云服务器正常&#xff0c;但无法通过远程桌面连接方式登录云服务器时&#xff0c;推荐您按照以下思路排查问题。 以下排查思路根据原因的出现概率进行排序&#xff0c;建议您从高频率原因往低频率原因排查&#xff0c;从而帮助您快速找到问题的原因。 如果解决完某…

leetcode212. 单词搜索 II

给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一…

无缝钢管内表面缺陷检测的自强化感知协调网络

摘要 无缝钢管是重要的工业材料。然而&#xff0c;无缝钢管中的内表面缺陷检测具有挑战性&#xff0c;并且会显著影响无缝钢管的性能和寿命。现有的检测方法是劳动强度大的&#xff0c;并且检测结果的可视化程度低。因此&#xff0c;本文提出了一种新型的管道内表面缺陷螺旋式全…

Kioptrix靶场渗透--level1.1

目录 环境搭建 镜像包下载 下载后解压&#xff0c;并修改配置 开始渗透 获取IP 获取具体服务 尝试sql注入 尝试命令执行 反弹shell 提权 查看Linux的内核版本 下载脚本 将脚本上传至靶机 编译脚本 编译后执行 第一个脚本失败&#xff0c;再找个脚本 使用cat /…

AI技术在演示文稿制作中的应用一键生成PPT

在快节奏的现代工作环境中&#xff0c;时间就是金钱。为了提高工作效率&#xff0c;许多专业人士都在寻找能够快速生成演示文稿&#xff08;PPT&#xff09;的工具。本文将探讨AI技术如何帮助用户自动生成演示文稿&#xff0c;从文案撰写到排版&#xff0c;最终输出成品&#x…

中国当代印章孙溟㠭篆刻锤凿印《无题Ⅵ》

孙溟㠭篆刻锤凿印《无题Ⅵ》 孙溟㠭篆刻锤凿印《无题Ⅵ》 此作品有人说看到了流星雨&#xff0c;有人说看到了战争&#xff0c;有人说看到了疾风暴雨&#xff0c;有人说看到了烟花庆新年&#xff0c;有人说是天气突变下的冰雹……&#xff01;至于是什么仁者见仁智者见智。 孙…

游戏引擎学习第54天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们现在正专注于在游戏世界中放置小实体来代表所有的墙。这些实体围绕着世界的每个边缘。我们有活跃的实体&#xff0c;这些实体位于玩家的视野中&#xff0c;频繁更新&#xff0c;而那些离玩家较远的实体则以较低的频率运…