diff --git a/etc/inittab b/etc/inittab index 434b26d..e18e410 100644 --- a/etc/inittab +++ b/etc/inittab @@ -2,4 +2,4 @@ init:1:wait:/sbin/rc default -l0:1:once:/bin/login +l0:1:once:/bin/login /dev/tty0 diff --git a/etc/rc.d/00-mounts b/etc/rc.d/00-mounts index c7bd1bc..ec5ae4b 100644 --- a/etc/rc.d/00-mounts +++ b/etc/rc.d/00-mounts @@ -3,5 +3,9 @@ echo Mounting /dev mount -t devfs /dev +chmod 0666 /dev/tty0 +chown 0:1000 /dev/ttyS0 +chmod 0660 /dev/ttyS0 + echo Mounting /sys mount -t sysfs /sys diff --git a/progs/base/bin/login.c b/progs/base/bin/login.c index 464f788..7354478 100644 --- a/progs/base/bin/login.c +++ b/progs/base/bin/login.c @@ -163,6 +163,28 @@ int main(int argc, char **argv) { return -1; } + if (argc != 2) { + fprintf(stderr, "usage: login TTY\n"); + return -1; + } + + // Will release 0, 1, 2 + if (setsid() < 0) { + perror("setsid()"); + return -1; + } + + // Open the terminal + if (open(argv[1], O_RDONLY, 0) != STDIN_FILENO) { + return -1; + } + if (open(argv[1], O_WRONLY, 0) != STDOUT_FILENO) { + return -1; + } + if (dup(STDOUT_FILENO) != STDERR_FILENO) { + return -1; + } + signal(SIGINT, signal_handler); char spnam_buf[128];