Browse Source

🐞 fix(components/drivers/tty/pty.c): fix ptmx not init (#6970)

* 🐞 fix(components/drivers/tty/tty.c): fix wrong log format

* 🐞 fix(components/drivers/tty/pty.c): fix ptmx not init

* ✨ feat(components/drivers/tty/pty.c): pts default use ECHO, ONLCR

* 🌈 style(components/drivers/tty/tty.c): format
xqyjlj 2 years ago
parent
commit
e50a7e3f85
2 changed files with 11 additions and 4 deletions
  1. 8 1
      components/drivers/tty/pty.c
  2. 3 3
      components/drivers/tty/tty.c

+ 8 - 1
components/drivers/tty/pty.c

@@ -211,6 +211,12 @@ static int ptmx_open(struct dfs_fd *fd)
         ret = ld->ops->open(fd);
         ret = ld->ops->open(fd);
     }
     }
 
 
+    rt_device_t device = (rt_device_t)fd->vnode->data;
+    if(fd->vnode->ref_count == 1)
+    {
+        ret = rt_device_open(device, fd->flags);
+    }
+
     return ret;
     return ret;
 }
 }
 #ifdef RT_USING_DEVICE_OPS
 #ifdef RT_USING_DEVICE_OPS
@@ -286,7 +292,8 @@ static int pts_register(struct tty_struct *ptm_drv, struct tty_struct *pts_drv,
 extern struct termios tty_std_termios;
 extern struct termios tty_std_termios;
     pts_drv->init_termios = tty_std_termios;
     pts_drv->init_termios = tty_std_termios;
     pts_drv->init_termios.c_cflag = B38400 | CS8 | CREAD;
     pts_drv->init_termios.c_cflag = B38400 | CS8 | CREAD;
-    pts_drv->init_termios.c_lflag |= ICANON;
+    pts_drv->init_termios.c_lflag |= ECHO | ICANON;
+    pts_drv->init_termios.c_oflag |= ONLCR;
     pts_drv->init_termios.__c_ispeed = 38400;
     pts_drv->init_termios.__c_ispeed = 38400;
     pts_drv->init_termios.__c_ospeed = 38400;
     pts_drv->init_termios.__c_ospeed = 38400;
 
 

+ 3 - 3
components/drivers/tty/tty.c

@@ -200,7 +200,7 @@ int __tty_check_change(struct tty_struct *tty, int sig)
 
 
     if (!tty_pgrp)
     if (!tty_pgrp)
     {
     {
-        LOG_D(tty, "sig=%d, tty->pgrp == -1!\n", sig);
+        LOG_D("sig=%d, tty->pgrp == -1!\n", sig);
     }
     }
     return ret;
     return ret;
 }
 }
@@ -275,7 +275,7 @@ static int tiocsctty(struct tty_struct *tty, int arg)
     if (current->leader &&
     if (current->leader &&
         (current->session == tty->session))
         (current->session == tty->session))
     {
     {
-        return 0;        
+        return 0;
     }
     }
 
 
     /*
     /*
@@ -284,7 +284,7 @@ static int tiocsctty(struct tty_struct *tty, int arg)
      */
      */
     if (!current->leader || current->tty)
     if (!current->leader || current->tty)
     {
     {
-        return -EPERM;        
+        return -EPERM;
     }
     }
 
 
     if (tty->session > 0)
     if (tty->session > 0)