从/ dev / tty0读取键盘输入?

时间:2017-11-04 16:17:21

标签: linux linux-device-driver embedded-linux

我正在为使用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用于报告键事件。

然后我发现GU​​I可以从USB键盘和远程驱动程序读取两个输入,这令人惊讶!但是与键盘和遥控器对应的设备是/ dev / input / eventX。怎么能从/ dev / tty0 ???

中读取这些输入

我发现它很混乱,无法从谷歌那里得到答案。有人可以解释一下吗?

0 个答案:

没有答案