Программа пространства пользователя может изменить вывод RTS последовательного порта / UART, используя вызов ioctl.Например:
int RTS_flag = TIOCM_RTS;
ioctl(fd, TIOCMBIS, &RTS_flag);
ioctl(fd, TIOCMBIC, &RTS_flag);
Предположим, я хочу управлять выводом RTS из драйвера.Можно ли «позвонить» водителю, удерживающему tty, и попросить его контролировать пин-код для меня?(Вместо того, чтобы вычислять управляющие регистры конкретного устройства и считывать / записывать байты, не говоря уже о мгновенной поддержке всех микросхем UART, поддерживаемых драйверами ядра).
Как правильно поступить в этом направлении?
Например, в myDriver
:
static const struct file_operations ecp_fileOps =
{
.owner = THIS_MODULE,
.unlocked_ioctl = my_ioctl,
.write = 0,
.read = 0,
.poll = 0,
.open = lirc_dev_fop_open,
.release = lirc_dev_fop_close,
.llseek = no_llseek,
};
static long ecp_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
{
switch (cmd)
{
"Call" tty ioctl function...
}
}
OS INFO
# uname -a
Linux ecp 4.4.127-1.el6.elrepo.i686 #1 SMP Sun Apr 8 09:44:43 EDT 2018 i686 i686 i386 GNU/Linux
# cat /etc/centos-release
CentOS release 6.6 (Final)