我正在为使用Linux 3.X的嵌入式系统编写远程控制驱动程序。它使用GUI从 / dev / tty0 读取键盘输入。关于打开键盘设备的GUI的相关源代码如下:
static int TTY_Open (const char *unused)
{
if (geteuid() == 0) /* is a super user, try to open the active console */
tty_dev = "/dev/tty0";
else /* not a super user, so try to open the control terminal */
tty_dev = "/dev/tty";
kbd_fd = open(tty_dev, O_RDONLY | O_NOCTTY);
if (kbd_fd < 0)
return -1;
if (tcgetattr(kbd_fd, &startup_termios) < 0)
goto err;
work_termios = startup_termios;
work_termios.c_lflag &= ~(ICANON | ECHO | ISIG);
work_termios.c_iflag &= ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON);
work_termios.c_iflag |= IGNBRK;
work_termios.c_cc[VMIN] = 0;
work_termios.c_cc[VTIME] = 0;
if(tcsetattr(kbd_fd, TCSAFLUSH, &work_termios) < 0)
goto err;
/* Put the keyboard into MEDIUMRAW mode. Despite the name, this
* is really "mostly raw", with the kernel just folding long
* scancode sequences (e.g. E0 XX) onto single keycodes.
*/
ioctl (kbd_fd, KDGKBMODE, &startup_kbdmode);
if (ioctl(kbd_fd, KDSKBMODE, K_MEDIUMRAW) < 0)
goto err;
return kbd_fd;
err:
close(kbd_fd);
kbd_fd = 0;
return -1;
}
我的驱动程序是使用 Linux输入子系统实现的。在其中断处理程序中,input_report_key用于报告键事件。
然后我发现GUI可以从USB键盘和远程驱动程序读取两个输入,这令人惊讶!但是与键盘和遥控器对应的设备是/ dev / input / eventX。怎么能从/ dev / tty0 ???
中读取这些输入我发现它很混乱,无法从谷歌那里得到答案。有人可以解释一下吗?