MSIC杂项记录

在 Linux 系统中,`dmesg` 命令用于显示内核环形缓冲区的消息(日志)。这些消息由内核及其驱动程序生成,通常用于调试和诊断系统问题。`dmesg -n` 可以设置内核日志的打印级别,这样可以控制哪些日志消息会被显示。

内核消息的级别从 0 到 7,每个级别有其特定的含义:

1. **0 (KERN_EMERG)**: 紧急情况。系统不可用。
2. **1 (KERN_ALERT)**: 必须立即采取行动的问题。
3. **2 (KERN_CRIT)**: 严重情况。
4. **3 (KERN_ERR)**: 错误情况。
5. **4 (KERN_WARNING)**: 警告情况。
6. **5 (KERN_NOTICE)**: 正常但重要的情况。
7. **6 (KERN_INFO)**: 信息性消息。
8. **7 (KERN_DEBUG)**: 调试级别的消息。

通过 `dmesg -n` 命令,你可以设置内核只显示特定级别的消息及其以上的消息。例如:

```sh
dmesg -n 4
```

设定后,只有级别为 4 (KERN_WARNING) 及以上的消息(包括 KERN_WARNING、KERN_ERR、KERN_CRIT、KERN_ALERT 和 KERN_EMERG)会被显示。设定的级别越高,显示的消息越详细。

### 示例
假设你希望只看到警告和更严重的问题,你可以运行:

```sh
dmesg -n 4
```

如果你希望看到所有类型的内核消息(包括调试信息),你可以运行:

```sh
dmesg -n 7
```

这样,内核会记录所有级别的日志消息,并将其显示在 `dmesg` 输出中。

### 检查当前级别
要查看当前的内核日志级别,可以检查 `/proc/sys/kernel/printk` 文件,它包含四个数字:

```sh
cat /proc/sys/kernel/printk
```

输出类似如下:

```sh
4 4 1 7
```

这四个数字依次代表:

1. 当前的控制台日志级别。
2. 默认的控制台日志级别。
3. 最低的控制台日志级别。
4. 内核的调试日志级别。

`dmesg -n` 命令实际上是对第一个数字(当前的控制台日志级别)进行设置。

### 结论
通过设置 `dmesg -n` 数值,你可以控制在控制台上显示哪些级别的内核日志。了解并正确设置日志级别可以帮助你有效地调试和诊断系统问题。

1f504387813b4e9a80449d7587c96afc.jpeg

ccfe3d930c514287817c2d17959e6244.jpeg766668ae115944d89a3df194d3ab05dd.jpeg

 

 

 

 

`getevent` 是一个 Android 工具,用于捕获和调试从设备输入子系统(如触摸屏、键盘、传感器等)接收到的输入事件。这些事件通常由 Linux 内核的输入子系统生成,并通过内核的 `input` 设备节点暴露出来。

在使用 `getevent` 工具时,通常会看到以下格式的输出:

```
/dev/input/eventX: EV_TYPE EV_CODE EV_VALUE
```

其中:
- `/dev/input/eventX` 是参与事件的设备文件。
- `EV_TYPE` 是事件的类型(例如触摸事件、按键事件等)。
- `EV_CODE` 是事件的代码(具体事件的具体子类型)。
- `EV_VALUE` 是事件的值(事件的具体数据)。

### getevent -lrt的典型输出
比如你运行 `getevent -lrt`,你可能会看到类似以下的输出:

```
add device 1: /dev/input/event0
  name:   "power_button"
could not get driver version for /dev/input/mice, Not a typewriter
add device 2: /dev/input/event1
  name:   "volume_up_button"
add device 3: /dev/input/event2
  name:   "touchscreen"
...
/dev/input/event2: EV_ABS       ABS_MT_POSITION_X    01234
/dev/input/event2: EV_ABS       ABS_MT_POSITION_Y    05678
/dev/input/event2: EV_SYN       SYN_REPORT           00000000
```
### 事件类型和代码解释
事件类型(`EV_TYPE`)和事件代码(`EV_CODE`)通常是十六进制或十进制数字,下面是一些常见的事件类型和代码:
1. **`EV_SYN` (0x00)**: 表示事件同步,一个事件序列的结束。
2. **`EV_KEY` (0x01)**: 按键事件,通常用于按钮、键盘按键等。
3. **`EV_REL` (0x02)**: 相对位移事件,通常用于鼠标移动。
4. **`EV_ABS` (0x03)**: 绝对位移事件,通常用于触摸屏。

#### 常见的 EV_CODE
- **`ABS_MT_POSITION_X`** 和 **`ABS_MT_POSITION_Y`**:触摸位置的X和Y轴值。
- **`BTN_TOUCH`**:触摸事件的按下或松开。

### 示例分析
假设你看到如下输出:

```
/dev/input/event2: EV_ABS       ABS_MT_POSITION_X    01234
/dev/input/event2: EV_ABS       ABS_MT_POSITION_Y    05678
/dev/input/event2: EV_SYN       SYN_REPORT           00000000
```
这表示在 `/dev/input/event2` 设备上,捕获到了触摸事件:
1. 触摸位置的X轴值是 1234。
2. 触摸位置的Y轴值是 5678。
3. 事件序列的结束标志由 `SYN_REPORT` 指示。

这些信息可以用来调试触摸屏幕或者其他输入设备,了解具体的输入位置和触摸动作。

因此, `getevent` 工具是分析设备输入行为的一个强大工具,尤其在开发硬件驱动和调试设备输入问题时非常有用。

 

 

 

 

`input_set_abs_params` 函数在 Linux 内核中用于设置输入设备的绝对轴参数。这些参数通常用于描述输入设备(如触摸屏或触摸板)上某个绝对位置轴的特性。下面是 `input_set_abs_params` 函数的定义和使用说明:

### 函数定义

```c
void input_set_abs_params(struct input_dev *dev, unsigned int axis, int min, int max, int fuzz, int flat);
```

### 参数说明

- `struct input_dev *dev`:指向输入设备结构体的指针。
- `unsigned int axis`:要设置的绝对轴(例如 ABS_X 或 ABS_Y)。
- `int min`:该轴的最小值。
- `int max`:该轴的最大值。
- `int fuzz`:该轴的模糊值,用于消除小幅抖动。
- `int flat`:该轴的平坦值,用于消除噪声。

### 使用示例

假设我们有一个触摸屏设备,并且希望为其 X 和 Y 轴设置绝对参数,我们可以这样做:

```c
struct input_dev *input_dev = /* 获取到输入设备的指针 */;
int min_x = 0;
int max_x = 1024;
int min_y = 0;
int max_y = 768;
int fuzz = 4;
int flat = 0;

input_set_abs_params(input_dev, ABS_X, min_x, max_x, fuzz, flat);
input_set_abs_params(input_dev, ABS_Y, min_y, max_y, fuzz, flat);
```

### 详细说明

- **绝对轴**:在输入设备中,每个坐标轴(如 X 轴和 Y 轴)都可以被视为一个绝对轴。每个绝对轴都有一组属性:最小值、最大值、模糊值和平坦值。
- **模糊值**:用于消除小幅的抖动。当输入值的变化小于模糊值时,这些变化会被忽略,有助于减少噪声。
- **平坦值**:类似于模糊值,但是主要用于消除较大的静态噪声。

### 相关背景

这个函数通常用于驱动程序中,特别是在设置输入设备的硬件特性时。例如,在初始化一个触摸屏驱动或其他类似设备时,可能需要调用这个函数来设置设备的参数,使得内核和用户空间应用程序能够正确理解和处理输入事件。

希望这些信息能够帮助你理解和使用 `input_set_abs_params` 函数。如果你有具体的例子或需要更多细节,请提供更多上下文。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值