mirror of
https://github.com/ish-app/ish.git
synced 2026-05-28 21:10:35 +00:00
Create standard devices for command line runs (#2724)
This commit is contained in:
+1
-21
@@ -89,27 +89,7 @@ static NSString *const kSkipStartupMessage = @"Skip Startup Message";
|
|||||||
|
|
||||||
FsInitialize();
|
FsInitialize();
|
||||||
|
|
||||||
// create some device nodes
|
create_some_device_nodes();
|
||||||
// this will do nothing if they already exist
|
|
||||||
generic_mknodat(AT_PWD, "/dev/tty1", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 1));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/tty2", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 2));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/tty3", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 3));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/tty4", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 4));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/tty5", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 5));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/tty6", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 6));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/tty7", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 7));
|
|
||||||
|
|
||||||
generic_mknodat(AT_PWD, "/dev/tty", S_IFCHR|0666, dev_make(TTY_ALTERNATE_MAJOR, DEV_TTY_MINOR));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/console", S_IFCHR|0666, dev_make(TTY_ALTERNATE_MAJOR, DEV_CONSOLE_MINOR));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/ptmx", S_IFCHR|0666, dev_make(TTY_ALTERNATE_MAJOR, DEV_PTMX_MINOR));
|
|
||||||
|
|
||||||
generic_mknodat(AT_PWD, "/dev/null", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_NULL_MINOR));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/zero", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_ZERO_MINOR));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/full", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_FULL_MINOR));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/random", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_RANDOM_MINOR));
|
|
||||||
generic_mknodat(AT_PWD, "/dev/urandom", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_URANDOM_MINOR));
|
|
||||||
|
|
||||||
generic_mkdirat(AT_PWD, "/dev/pts", 0755);
|
|
||||||
|
|
||||||
// Permissions on / have been broken for a while, let's fix them
|
// Permissions on / have been broken for a while, let's fix them
|
||||||
generic_setattrat(AT_PWD, "/", (struct attr) {.type = attr_mode, .mode = 0755}, false);
|
generic_setattrat(AT_PWD, "/", (struct attr) {.type = attr_mode, .mode = 0755}, false);
|
||||||
|
|||||||
@@ -3,9 +3,11 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include "fs/devices.h"
|
#include "fs/devices.h"
|
||||||
#include "fs/fd.h"
|
#include "fs/fd.h"
|
||||||
|
#include "fs/path.h"
|
||||||
#include "fs/real.h"
|
#include "fs/real.h"
|
||||||
#include "fs/tty.h"
|
#include "fs/tty.h"
|
||||||
#include "kernel/calls.h"
|
#include "kernel/calls.h"
|
||||||
|
#include "kernel/fs.h"
|
||||||
#include "kernel/init.h"
|
#include "kernel/init.h"
|
||||||
#include "kernel/personality.h"
|
#include "kernel/personality.h"
|
||||||
|
|
||||||
@@ -125,6 +127,30 @@ void set_console_device(int major, int minor) {
|
|||||||
console_minor = minor;
|
console_minor = minor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void create_some_device_nodes(void) {
|
||||||
|
// create some device nodes
|
||||||
|
// this will do nothing if they already exist
|
||||||
|
generic_mknodat(AT_PWD, "/dev/tty1", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 1));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/tty2", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 2));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/tty3", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 3));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/tty4", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 4));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/tty5", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 5));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/tty6", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 6));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/tty7", S_IFCHR|0666, dev_make(TTY_CONSOLE_MAJOR, 7));
|
||||||
|
|
||||||
|
generic_mknodat(AT_PWD, "/dev/tty", S_IFCHR|0666, dev_make(TTY_ALTERNATE_MAJOR, DEV_TTY_MINOR));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/console", S_IFCHR|0666, dev_make(TTY_ALTERNATE_MAJOR, DEV_CONSOLE_MINOR));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/ptmx", S_IFCHR|0666, dev_make(TTY_ALTERNATE_MAJOR, DEV_PTMX_MINOR));
|
||||||
|
|
||||||
|
generic_mknodat(AT_PWD, "/dev/null", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_NULL_MINOR));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/zero", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_ZERO_MINOR));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/full", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_FULL_MINOR));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/random", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_RANDOM_MINOR));
|
||||||
|
generic_mknodat(AT_PWD, "/dev/urandom", S_IFCHR|0666, dev_make(MEM_MAJOR, DEV_URANDOM_MINOR));
|
||||||
|
|
||||||
|
generic_mkdirat(AT_PWD, "/dev/pts", 0755);
|
||||||
|
}
|
||||||
|
|
||||||
int create_stdio(const char *file, int major, int minor) {
|
int create_stdio(const char *file, int major, int minor) {
|
||||||
struct fd *fd = generic_open(file, O_RDWR_, 0);
|
struct fd *fd = generic_open(file, O_RDWR_, 0);
|
||||||
if (IS_ERR(fd)) {
|
if (IS_ERR(fd)) {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ int mount_root(const struct fs_ops *fs, const char *source);
|
|||||||
void set_console_device(int major, int minor);
|
void set_console_device(int major, int minor);
|
||||||
int become_first_process(void);
|
int become_first_process(void);
|
||||||
int become_new_init_child(void);
|
int become_new_init_child(void);
|
||||||
|
void create_some_device_nodes(void);
|
||||||
int create_stdio(const char *file, int major, int minor);
|
int create_stdio(const char *file, int major, int minor);
|
||||||
int create_piped_stdio(void);
|
int create_piped_stdio(void);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "kernel/calls.h"
|
#include "kernel/calls.h"
|
||||||
|
#include "kernel/init.h"
|
||||||
#include "kernel/task.h"
|
#include "kernel/task.h"
|
||||||
#include "xX_main_Xx.h"
|
#include "xX_main_Xx.h"
|
||||||
|
|
||||||
@@ -13,6 +14,7 @@ int main(int argc, char *const argv[]) {
|
|||||||
fprintf(stderr, "xX_main_Xx: %s\n", strerror(-err));
|
fprintf(stderr, "xX_main_Xx: %s\n", strerror(-err));
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
create_some_device_nodes();
|
||||||
do_mount(&procfs, "proc", "/proc", "", 0);
|
do_mount(&procfs, "proc", "/proc", "", 0);
|
||||||
do_mount(&devptsfs, "devpts", "/dev/pts", "", 0);
|
do_mount(&devptsfs, "devpts", "/dev/pts", "", 0);
|
||||||
task_run_current();
|
task_run_current();
|
||||||
|
|||||||
Reference in New Issue
Block a user