linux内核console_poll
时间: 2023-09-14 17:10:34 浏览: 129
`console_poll` 是 Linux 内核中的一个函数,它用于轮询控制台设备(console device)以检查是否有新的输入或输出操作。当调用 `console_poll` 函数时,它将会检查控制台设备缓冲区是否为空,如果不为空,则该函数会返回一个非零值,表明设备上有数据可读;如果缓冲区为空,则该函数会挂起当前进程,直到设备上有新的数据或者超时限制到达。
`console_poll` 函数通常被用于驱动程序中的 `poll` 函数实现,以便在非阻塞模式下检查设备是否有数据可读。此外,它还可以用于实现字符设备的异步通知机制,当有新的数据到达时,可以调用 `wake_up_interruptible` 函数唤醒等待该设备的进程。
需要注意的是,`console_poll` 函数只能用于控制台设备,不能用于其他字符设备。
相关问题
menuconfig CONSOLE_POLL
### 如何在 Kernel 配置中使用 menuconfig 设置 CONSOLE_POLL 选项
#### 使用 `menuconfig` 进入内核配置界面
为了进入 Linux 内核的图形化配置工具 `menuconfig`,需要先安装必要的依赖项。对于大多数基于 Debian/Ubuntu 的发行版:
```bash
sudo apt-get install libncurses-dev
```
接着,在解压后的内核源码目录执行命令来启动 `menuconfig`:
```bash
make menuconfig
```
这会打开一个基于 ncurses 的菜单驱动型配置界面。
#### 寻找并启用 `CONSOLE_POLL` 选项
一旦进入了 `menuconfig` 界面,可以通过导航找到与控制台轮询有关的设置。通常情况下,`CONFIG_CONSOLE_POLL` 可能在 "Device Drivers" -> "Character devices" 下找到[^1]。
如果找不到该选项,则可能是因为当前使用的内核版本不支持此特性或是隐藏在更深层次的子菜单里。此时建议通过 `/proc/config.gz` 或者查阅具体版本的 Kconfig 文件确认路径。
当定位到 `CONSOLE_POLL` 后,按键盘上的空格键切换其状态(通常是 N 表示未选中,M 表示模块编译,Y 表示内置)。确保将其设为 Y 来直接集成进内核而不是作为可加载模块。
完成所需更改之后保存退出即可。随后按照常规流程重新编译和安装新内核。
#### 编译和部署新的内核
编辑完成后,根据提示保存配置文件,并返回终端继续操作。接下来就是标准的内核编译过程:
```bash
make -j$(nproc)
sudo make modules_install
sudo make install
```
最后更新引导管理器 (GRUB),以便能够选择刚刚构建的新内核启动系统:
```bash
sudo update-grub
```
重启计算机后可以选择最新的自定义内核启动,从而应用所做的一切改动。
linux内核中的poll_list
`poll_list`是Linux内核中与`poll()`系统调用相关的数据结构之一。
在Linux中,`poll()`系统调用是用于等待多个文件描述符的状态变化的。它的原理是,用户进程通过`poll()`系统调用告诉内核要等待哪些文件描述符的状态变化,内核则把这些文件描述符加入到`poll_list`链表中,然后等待这些文件描述符中的任意一个发生状态变化,最后通知用户进程。
`poll_list`是一个由`poll_table`结构体组成的链表,每个`poll_table`结构体表示一个等待队列(wait queue),用于保存等待某个文件描述符状态变化的进程。每当一个进程调用`poll()`系统调用并等待某个文件描述符时,它就会被加入到相应的等待队列中。当该文件描述符的状态发生变化时,内核会遍历该文件描述符对应的`poll_table`结构体所在的链表,并通知这些等待队列中的进程。
总之,`poll_list`是一个用于保存等待队列的链表,它是`poll()`系统调用的核心数据结构之一。
阅读全文
相关推荐
















