diff --git a/docs/config.md b/docs/config.md index ee03b921..4bd0c3b7 100644 --- a/docs/config.md +++ b/docs/config.md @@ -301,8 +301,9 @@ Syntax `tty [LVLS] [noclear] [nowait]` The first variant of this option uses the built-in getty on the given TTY device DEV, in the given runlevels. The DEV may be the special - keyword `@console`, which is very useful on embedded systems. Default - baud rate is `38400`. + keyword `@console`, or `console`, useful on embedded systems. + + The default baud rate is 0, i.e., keep kernel default. **Example:** ```conf @@ -340,11 +341,12 @@ Syntax Embedded systems may want to enable automatic `DEV` by supplying the special `@console` device. This works regardless weather the system uses `ttyS0`, `ttyAMA0`, `ttyMXC0`, or anything else. Finit figures - it out by querying sysfs: `/sys/class/tty/console/active`. + it out by querying sysfs: `/sys/class/tty/console/active`. The speed + can be omitted to keep the kernel default. **Example:** ```conf - tty [12345] @console 115200 noclear vt220 + tty [12345] @console noclear vt220 ``` On really bare bones systems Finit offers a fallback shell, which diff --git a/src/exec.c b/src/exec.c index 884e7cf2..fe6c52b6 100644 --- a/src/exec.c +++ b/src/exec.c @@ -369,15 +369,12 @@ pid_t run_getty(char *tty, char *baud, char *term, int noclear, int nowait, stru pid = fork(); if (!pid) { - speed_t speed = B38400; - - if (baud && baud[0]) { - speed = stty_parse_speed(baud); - if (B0 == speed) - logit(LOG_CRIT, "TTY %s: Invalid speed %s", tty, baud); - } + speed_t speed; + speed = stty_parse_speed(baud); + logit(LOG_INFO, "Starting built-in getty on %s, speed %u", tty, speed); prepare_tty(tty, speed, "tty", rlimit); + if (activate_console(noclear, nowait)) _exit(getty(tty, speed, term, NULL)); } @@ -415,6 +412,7 @@ pid_t run_getty2(char *tty, char *cmd, char *args[], int noclear, int nowait, st dup2(fd, STDERR_FILENO); /* Dunno speed, tell stty() to not mess with it */ + logit(LOG_INFO, "Starting external getty on %s, speed %u", tty, B0); prepare_tty(tty, B0, "getty", rlimit); if (ioctl(STDIN_FILENO, TIOCSCTTY, 1) < 0) diff --git a/src/stty.c b/src/stty.c index 63e74e08..b625e3b3 100644 --- a/src/stty.c +++ b/src/stty.c @@ -27,6 +27,7 @@ #include /* Not included by default in musl libc */ #include +/* B0 means; keep kernel default */ speed_t stty_parse_speed(char *baud) { char *ptr; @@ -66,6 +67,9 @@ speed_t stty_parse_speed(char *baud) { 4000000, B4000000 }, }; + if (!baud || !baud[0]) + return B0; + errno = 0; val = strtoul(baud, &ptr, 10); if (errno || ptr == baud)