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

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_stastatic 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_staintel_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.mzph.cn/diannao/64480.shtml

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

相关文章

【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?

要在 Windows 上编译 etcd 及 etcdctl 工具&#xff0c;并使用 bat 脚本启动 etcd 集群&#xff0c;首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤&#xff1a; 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…

34. Three.js案例-创建球体与模糊阴影

34. Three.js案例-创建球体与模糊阴影 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它负责将场景中的对象绘制到画布上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersObject可选参数对象&#xff0c;包…

从源码分析swift GCD_DispatchGroup

前言&#xff1a; 最近在写需求的时候用到了DispatchGroup&#xff0c;一直没有深入去学习&#xff0c;既然遇到了那么就总结下吧。。。。 基本介绍&#xff1a; 任务组&#xff08;DispatchGroup&#xff09; DispatchGroup 可以将多个任务组合在一起并且监听它们的完成状态。…

深度神经网络(DNN)在时序预测中的应用与缺陷

目录 ​编辑 一、DNN在时序预测中的应用 二、DNN的缺陷 三、技术挑战与未来趋势 四、结论 随着大数据时代的到来&#xff0c;深度学习技术在时序预测领域扮演着越来越重要的角色。深度神经网络&#xff08;DNN&#xff09;因其强大的非线性拟合能力和自动特征提取能力&…

第十五章、职责链模式

第十五章、职责链模式 职责链可以是一条直线、一个环或者一个树形结构&#xff0c;最常见的职责链是直线型&#xff0c;即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者&#xff0c;职责链模式可以将请求的处理者组织成一条链&#xff0c;并使请求沿着链传递&a…

docker容器的安装以及用法

1、了解docker 1.1、docker是什么 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现…

springboot450房屋租赁管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统房屋租赁管理系统信息管理难度大&#xff0c;容错率低&am…

案例分享|企查查的数据降本增效之路

分享嘉宾 任何强 企查查科技股份有限公司 大数据架构负责人 关于企查查 “企查查”是企查查科技股份有限公司旗下的一款企业信用查询工具。2023年5月20日&#xff0c;企查查正式发布全球首款商查大模型——“知彼阿尔法”&#xff0c;该模型基于企查查覆盖的全球企业信用数据进…

5G -- 5G网络架构

5G组网场景 从4G到5G的网络演进&#xff1a; 1、UE -> 4G基站 -> 4G核心网 * 部署初中期&#xff0c;利用存量网络&#xff0c;引入5G基站&#xff0c;4G与5G基站并存 2、UE -> (4G基站、5G基站) -> 4G核心网 * 部署中后期&#xff0c;引入5G核心网&am…

28. 描述符

一、什么是描述符 如果一个类中有如下 3 个方法中的任意一个&#xff0c;那么这个类创建的对象&#xff0c;可以称为 描述符对象。 object.__get__(self, instance, ownerNone) object.__set__(self, instance, value) object.__delete__(self, instance)如果有另外一个类&…

CVE-2024-32709 WordPress —— Recall 插件存在 SQL 注入漏洞

漏洞描述 WordPress 是一款免费开源的内容管理系统,适用于各类网站,包括个人博客、电子商务系统、企业网站。其插件 WP-Recall 的 account 存在 SQL 注入漏洞,攻击者可以通过该漏洞获取数据库敏感信息。 WP-Recall 版本 <= 16.26.5 漏洞复现 搭建环境、安装插件、完成…

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…

Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍

概述 伴随电子商务的持续演进&#xff0c;客户对于便利性、速度以及个性化服务的期许急剧攀升。企业务必要探寻创新之途径&#xff0c;以强化自身运营&#xff0c;并优化购物体验。达成此目标的最为行之有效的方式之一&#xff0c;便是将 AI 呼叫助手融入您的电子商务平台。我们…

二、使用langchain搭建RAG:金融问答机器人--数据清洗和切片

选择金融领域的专业文档作为源文件 这里选择 《博金大模型挑战赛-金融千问14b数据集》&#xff0c;这个数据集包含若干公司的年报&#xff0c;我们将利用这个年报搭建金融问答机器人。 具体下载地址 这里 git clone https://www.modelscope.cn/datasets/BJQW14B/bs_challenge_…

maven使用Dependency-Check来扫描安全漏洞

在现代软件开发中&#xff0c;使用开源库和第三方依赖项已成为常态。然而&#xff0c;这些依赖项可能包含已知的安全漏洞&#xff0c;给应用程序带来潜在的风险。为了解决这个问题&#xff0c;OWASP Dependency-Check 应运而生。本文将介绍 OWASP Dependency-Check 的功能、安装…

meta-llama/Llama-3.2-1B 微调记录

踩坑&#xff1a; 1.刚开始部署在自己的windows电脑上&#xff0c;semgrep不支持windows &#xff0c;然后就换了linux服务器 2.服务器没有梯子&#xff0c;huggingface无法访问&#xff0c;模型数据集无法下载 解决方法&#xff1a; 使用huggingface镜像网站下载模型&#xf…

双指针---有效三角形的个数

这里写自定义目录标题 题目链接 [有效三角形的个数](https://leetcode.cn/problems/valid-triangle-number/description/)问题分析代码解决执行用时 题目链接 有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例…

《通信电子电路》入门手册

因为大学这门课好多同学理解不了这门课 于是考完试后花了两天时间整理了这份笔记&#xff0c;在这分享给完全没有学懂这门课的同学&#xff0c;也帮助“理解概念才能学得进去”的同学入门 笔记&#xff1a;通信电子电路 入门手册 —— flowus笔记 对应&#xff1a;《通信电子…

基于单片机的智能水表的设计

1总体设计 本次设计智能IC卡水表&#xff0c;在系统架构上设计如图2.1所示&#xff0c;由STM32F103单片机&#xff0c;YF-S401霍尔型传感器&#xff0c;RFID模块&#xff0c;OLED12864液晶,按键&#xff0c;继电器等构成&#xff0c;在功能上可以实现水流量的检测&#xff0c;…

LA2016逻辑分析仪使用笔记1:测量引脚、解析串口数据

今日尝试学习使用LA2016逻辑分析仪&#xff1a;测量引脚 解析串口数据&#xff1a; 目录 逻辑分析仪&#xff1a; 实验接线&#xff1a; 基础操作&#xff1a; 选择使用到的通道&#xff1a; 设置采样时间、采样频率&#xff1a; 设置电平标准&#xff1a; 解析串口数据、测量串…