EC热键问题

ec

问题描述

系统无触摸板打开和关闭的提示

已知热键功能

快捷键 功能
Fn+F1 亮度-
Fn+F2 亮度+
Fn+F3 显示模式切换(扩展、复制等)
Fn+F4 静音
Fn+F5 音量-
Fn+F6 音量+
Fn+F7 触摸板开关

ACPI事件监控

 sudo apt-get install acpid
sudo systemctl start acpid
sudo acpi_listen

Fn+F1\F2\F4\F5\F6可以监控到acpi事件,Fn+F3\F7不行,其中F3 GUI正常F7功能正常


acpi_listen

按键监控

sudo showkey

Fn+F1\F2\F3\F4\F5\F6可以监控到按键事件,Fn+F7不行


showkey

UDEV事件监控

sudo udevadm monitor --environment --udev

Fn+F1\F2可以监控到UDEV事件,显示器属于udev设备?


udevadm

kprobe探测


初步总结热键功能流程

这里面还有很多疑问,但不管怎样Fn+F7未监控到按键事件是不正常的。

目前EC BIOS ACPI 之间的传递关系还比较模糊.

EC热键是指在笔记本电脑中通过按下特定的键组合来触发某些特殊操作的功能。在Linux系统中,EC热键事件的通知和处理涉及多个组件之间的交互。下面是这些组件之间的传递过程:

EC芯片:当按下EC热键时,电路会将响应的信号发送到嵌在主板上的EC芯片。

BIOS:EC芯片已按下的EC热键信号将会被传递给BIOS,BIOS会将EC热键转换为ACPI事件。

ACPI:在Linux系统中,BIOS已转换的ACPI事件将由ACPI守护进程读取并通知内核,以保证它们被正常捕获。

事件生成器:一旦收到ACPI事件,事件生成器将生成input_event(输入事件)并将其传递给内核。

内核输入子系统:接下来,Linux内核将将input_event发送到输入子系统,该子系统负责跟踪和处理所有输入事件。

输入设备驱动程序:当ACPI事件进入输入子系统时,输入设备驱动程序将使用内核标准input_event接口处理输入操作。

udev:udev是一个动态设备管理器,为所有新发现的输入设备生成单个设备节点。其他进程可以使用此节点上的数据来检测输入事件并采取适当的操作。

综上所述,EC热键事件在Linux系统中的处理涉及多个组件之间的协作和传递,包括EC芯片、BIOS、ACPI、事件生成器、内核输入子系统、输入设备驱动程序和udev。这些组件通过一系列传递步骤来捕获和处理EC热键事件,并使其可供Linux系统中的其他进程使用。

ACPI BIOS、CPU和其他系统硬件之间的连接关系可以以下方式进行物理描述:

  1. ACPI BIOS和CPU:ACPI BIOS是位于计机主板上一个集成电路,它将作为计算机主要处理器的CPU通过北芯片(North chip)连接到主板上。ACPI BIOS作为集成电路上的一部分负责在系统启动时检测、配置和管理所有硬件资源。
  2. Northbridge和:Northbridge芯片是连接CPU和系统内存及其他硬件的中介芯片。它提供了一些与CPU通信的基本功能,例如数据和控制信号的传递、扩展内存寻址等。
  3. Southbridge和Northbridge:Southbridge芯片通常与Northbridge芯片一起安装在计算机主板上,并通过高速总线连接。南桥芯片通常负责与所有其他系统组件交互,例如硬盘驱动器、光驱、USB、PCI等输入/输出接口。
  4. Southbridge和BIOS:Southbridge芯片还将与BIOS进行通信,使BIOS能够监测和管理设备资源并接收ACPI事件通知。同时,它还处理与系统内存、磁盘存储器、网络连接、声音和视频资源相关的数据传输。

    总之,ACPI BIOS、CPU、Northbridge和Southbridge芯片之间具有物理连接关系。ACPI BIOS作为主板上的电路板负责管理和协调CPU和其他系统资源。Northbridge芯片负责连接CPU和系统内存及其他硬件,而南桥芯片则负责与所有其他系统组件交互,例如硬盘驱动器、光驱和输入/输出接口。同时,Southbridge还将与BIOS和其他硬件设备进行通信,使计算机系统能够平稳运转。

调试记录


Fn+F6

F7

Fn+F7无任何输出.

Fn+F7时kprobe发现 atkbd_interrupt和i8042_interrupt函数并未被调用。

观察i8042中断计数,Fn+F7中断计数未增加。

Fn+F6则有中断计数的增加以及中断处理函数的调用.


i8042中断信息

lpc物理中断号

i8042物理中断号为37属于LPC中断,因此该问题本质是EC未上报中断.

目前怀疑EC固件直接处理了Fn+F7功能,因此并未上报中断给CPU,导致系统层未收到相关信号(值得说明的是飞腾EC描述手册中写到EC不做按键的功能处理)


飞腾EC接口规范

PS2

1、PS2协议:

PS2有两个控制线,时钟线和数据线。 当按键按下或抬起,设备会向主机发送键码。 时钟由设备产生,主机需要在下降沿去数据线采集一位数据。 按键码由多个11位数据组成:0 (起始)+ 8位(数据)+1/0(奇偶校验位)+1(结束位)。 数据位是先发的低位!

PS2接口是以前台式电脑后边留的圆形接口,6个引脚,主要用VCC,GND,clk,data。 与AT(5脚)一样

2、键码:

PS2键码大致分为两类:

第1类按键 通码为一个字节,断码为0xF0+通码形式。 如A键,其通码为0x1C; 断码为0xF0 0x1C。

第2类按键 通码为两字节0xE0+0xXX形式,断码为0xE0+0xF0+0xXX形式。 如Right Ctrl键,其通码为0xE0 0x14; 断码为0xE0 0xF0 0x14。

通码为按下,段码为抬起

3、input 子系统下的PS2键盘驱动(因为没有驱动器,没有使用这个框架):

1,Linux X86 PS/2 键盘驱动框架流程(以下均已Intel 8042键盘控制器为例):

1.1 设备初始化注册流程:

键盘控制器硬件驱动(i8042.c) -> 串口驱动核心(serio.c) -> 串口驱动(atkbd.c)

-> 输入驱动核心(input.c) -> 输入事件驱动程序(keyboard.c) -> 虚拟控制台驱动模块;

注册流程:

1.1.1,键盘控制器硬件驱动(i8042.c):

1)、首先键盘硬件驱动程序读写键盘硬件控制器寄存器,配置寄存器并获取相控制器硬件信息(PS/2键盘控制器一共有三个寄存器加一个命令端口,命令数量也不多,下载地址:https://download.csdn.net/download/a372048518/9835565)

注意:Intel8042键盘控制器内部已经实现了PS/2时序协议,硬件驱动程序只需要读写相关寄存器即可;

2)、将8042键盘控制器作为平台设备(struct platform_device)挂接在平台总线(struct bus_type)上,并将获取到的硬件信息及相关软件数据结构信息保存在平台设备实例中;

3)、将8042键盘硬件控制器驱动(struct platform_driver)注册到平台总线上,平台总线匹配平台设备和平台驱动,并调用平台驱动的probe方法,在probe方法中分配并初始化串口数据结构实例(struct serio),将平台设备信息放入串口数据结构实例中; 最后将串口结构实例注册进入串口驱动核心(serio_register_port);

1.1.2,串口驱动核心(serio.c)

串口驱动核心负责匹配串口和串口驱动,匹配之后,调用串口驱动的atkbd_connect方法;

1.1.2,PS/2键盘串口驱动(atkbd.c)

将串口驱动(struct serio_driver)注册到串口核心并匹配到串口设备之后,调用串口驱动的atkbd_connect方法,在atkbd_connect方法中分配并初始化输入设备(struct input_ dev),最后将输入设备注册到输入子系统核心;

1.1.3, 输入驱动核心(input.c)

输入子系统请移步:输入子系统介绍https://blog.csdn.net/a372048518/article/details/71055147

1.1.4,输入事件驱动程序( keyboard.c)

键盘输入事件驱动程序负责处理键盘输入设备上报的键盘输入事件信息,并将信息传递给虚拟控制台模块;

1.2 设备中断流程:

8042硬件中断(i8042_interrupt) -> 串口核心中断(serio_interrupt) -> 串口驱动中断(atkbd_interrupt) -> 输入子系统核心中断(input_event) -> 输入时间驱动程序中断(kbd_event)

资料来源:gpio模拟ps2

EC热键问题的更多相关文章

  1. 数字麦克风PDM信号采集与STM32 I2S接口应用(三)

    本文是数字麦克风笔记文章的数据处理篇. 读取数字麦克风的信号,需要嵌入式驱动和PC应用的结合,驱动负责信号采集,应用代码负责声音分析. 一般而言,在完成特征分析和实验之后,把优化过的代码固化到嵌入式端 ...

  2. C# 注册 Windows 热键

    闲扯: 前几日,一个朋友问我如何实现按 F1 键实现粘贴(Ctrl+V)功能,百度了一个方法,发给他,他看不懂(已经是 Boss 的曾经的码农),我就做了个Demo给他参考.今日得空,将 Demo 整 ...

  3. EC笔记:第4部分:22、所有成员都应该是private的

    EC笔记:第4部分:22.所有成员都应该是private的 更简单的访问 用户不用记得什么时候该带上括号,什么时候不用带上括号(因为很确定的就要带上括号) 访问限制 对于public的成员变量,我们可 ...

  4. EC笔记:第二部分:12、复制对象时勿忘其每一个成分

    EC笔记:第二部分:12.复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ p ...

  5. 设计winform自带动态加载工具按钮和实现热键响应

    1.初衷 主要是想设计一个自带添加工具按钮和按钮的快捷键的基窗体.这样以后所设计的窗体只要继承自这个窗体就可以实现热键响应和动态加工具按钮的功能了 写这边文章主要是为了以后使用的时候有个参考,因为这只 ...

  6. <转>MFC注册系统/全局热键。

    <转>MFC注册系统/全局热键. 1. BEGIN_MESSAGE_MAP(CRS232TESTDlg, CDialog) //{{AFX_MSG_MAP(CRS232TESTDlg) O ...

  7. 零配置Socket TCP消息通讯服务容器EC

    EC全称是elastic communication,是基于c#实现的Socket网络通讯服务容器,支持windows .Net和mono.通过EC容器可以让开发人员在不了解Socket网络通讯知识和 ...

  8. Java 上传文件到 SFTP 抛异常 java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC 的解决办法

    最近从 Op 那里报来一个问题,说是SFTP上传文件不成功.拿到的 Exception 如下: Caused by: java.lang.NoClassDefFoundError: Could not ...

  9. Linux常用热键(持续更新)

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) --圣诞节怎么过, --略过. 今天装ubuntu的时候把windows覆盖了, 凌乱,TX童 ...

  10. 第三篇T语言热键启动方法

    热键控件 热键控件的使用方法 第一步:选择热键添加到面板上. 第二步:热键控件属性选择热键键值. 第三步:添加热键事件功能. 热键模式的选择 1.普通模式 2.软件模式 3.硬件模式 脚本的基本操作 ...

随机推荐

  1. SAP集成技术(五)集成风格

    上一节介绍了各种集成架构,这一节将介绍各种集成风格(Style).我们在日常工作中使用这些集成风格来分类不同类型的集成场景.本文将遵循SAP的集成解决方案咨询方法(ISA - M)使用的方法,将集成风 ...

  2. vue+js实现点击图片,图片放大

    1.首先在template中插入image,并赋予点击事件(这个时候是小图) <template> <div> <img src="@/assets/image ...

  3. Jetbrains系列产品最新激活方法[持续更新]

    Jetbrains系列产品最新激活方法[持续更新] 2021.3.4系列激活 方法一: 2021.3.4参考文章: https://www.exception.site/essay/how-to-fr ...

  4. List集合中获取重复元素

    一.方法1 ## 测试数据 List<String> words = Arrays.asList("a", "b", "c", ...

  5. d3d12龙书阅读----绘制几何体(下)

    d3d12龙书阅读----绘制几何体(下) 本节在上一节的基础上,对整个绘制过程进行优化,将绘制单个几何体的内容拓展到了多个几何体,同时对根签名进行了进一步地探索. 帧资源 在之前绘制每帧的结尾,我们 ...

  6. 十三、.net core(.NET 6)搭建ElasticSearch(ES)系列之dotnet操作ElasticSearch进行存取的方法

    .net core操作ES进行读写数据操作 在Package包项目下,新增NEST包.注意,包版本需要和使用的ES的版本保持一致,可以避免因为不兼容所导致的一些问题.例如我本机使用的ES版本是7.13 ...

  7. VAE-可变自动编码器

    VAE 有什么作用? 简而言之,它改进了生成的图像.VAE 针对图像的某些方面进行训练,并且我们的 UI ( vae-ft-mse-840000-ema-pruned) 中捆绑的默认 VAE 改善了生 ...

  8. 新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等

    新一代AI搜索引擎神器推荐效果测试:秘塔AI.天工AI.Perplexity等 0.前言: 搜索的核心:事物对象级别的搜索 回到搜索引擎本身,搜索引擎的早期出现是为了解决互联网上信息过载的问题.随着互 ...

  9. sass 导入@import详解

    @import ​ Sass 拓展了 @import 的功能,允许其导入 SCSS 或 Sass 文件.被导入的文件将合并编译到同一个 CSS 文件中,另外,被导入的文件中所包含的变量或者混合指令 ( ...

  10. Gin 框架是怎么使用 net http 包的(gin.go)

    Gin 框架是基于 Go 语言的标准库 net/http 构建的,它使用 net/http 提供的基础功能来构建自己的高性能 Web 应用框架. 具体来说,Gin 使用 net/http 的以下方面: ...