/dev/console

This commit is contained in:
Matheus
2022-08-20 15:15:10 -03:00
parent f7e5b5ba67
commit 9c6ce452f8
8 changed files with 56 additions and 43 deletions
BIN
View File
Binary file not shown.
+2 -29
View File
@@ -18,35 +18,6 @@
#include <arch/smp.h>
#include <kernel/timer.h>
/*
static volatile struct limine_terminal_request liminettyr = {
.id = LIMINE_TERMINAL_REQUEST,
.revision = 0
};
struct limine_terminal_response* liminetty;
int ttylock = 0;
static vmm_context* liminettyctx;
void liminewrite(char* str, size_t c){
vmm_context* old = arch_getcls()->context;
if(liminettyctx)
vmm_switchcontext(liminettyctx);
liminetty->write(liminetty->terminals[0], str, c);
if(liminettyctx)
vmm_switchcontext(old);
}
*/
void kmain(){
liminetty_init();
@@ -88,6 +59,8 @@ void kmain(){
initrd_parse();
devman_init();
consoledev_init();
pci_enumerate();
+2
View File
@@ -39,6 +39,8 @@ static int devfs_open(dirnode_t* parent, char* name){
return ENOMEM;
}
node->st = devnode->st;
return 0;
}
+6
View File
@@ -0,0 +1,6 @@
#ifndef _CONSOLEDEV_H_INCLUDE
#define _CONSOLEDEV_H_INCLUDE
void consoledev_init();
#endif
+2 -2
View File
@@ -17,6 +17,7 @@ int devman_newdevice(char* name, int type, int major, int minor, devcalls* calls
if(!addr)
return ENOMEM;
majorcalls = addr;
highestmajor = major;
}
majorcalls[major] = calls;
@@ -26,10 +27,9 @@ int devman_newdevice(char* name, int type, int major, int minor, devcalls* calls
}
int devman_write(int *error, int dev, void* buff, size_t count, size_t offset){
if(major(dev) > highestmajor)
return ENODEV;
return majorcalls[major(dev)]->write(error, minor(dev), buff, count, offset);
+4 -12
View File
@@ -295,31 +295,23 @@ void sched_runinit(){
fd_t* stdoutfd = &proc->fds[1];
fd_t* stderrfd = &proc->fds[2];
// dummy file before console actually gets implemented and a devfs node
#define CONSOLE_DUMMY "etc/consoledummy"
#define CONSOLE_PATH "dev/console"
size_t ret = vfs_create(vfs_root(), CONSOLE_DUMMY, 0777);
if(ret){
printf("Create failed: %s\n", strerror(ret));
_panic("Failed to create dummy console", 0);
}
ret = vfs_open(&stdinfd->node, vfs_root(), CONSOLE_DUMMY);
int ret = vfs_open(&stdinfd->node, vfs_root(), CONSOLE_PATH);
if(ret){
printf("Open failed: %s\n", strerror(ret));
_panic("Could not open stdin for init", 0);
}
ret = vfs_open(&stdoutfd->node, vfs_root(), CONSOLE_DUMMY);
ret = vfs_open(&stdoutfd->node, vfs_root(), CONSOLE_PATH);
if(ret){
printf("Open failed: %s\n", strerror(ret));
_panic("Could not open stdout for init", 0);
}
ret = vfs_open(&stderrfd->node, vfs_root(), CONSOLE_DUMMY);
ret = vfs_open(&stderrfd->node, vfs_root(), CONSOLE_PATH);
if(ret){
printf("Open failed: %s\n", strerror(ret));
+3
View File
@@ -59,6 +59,9 @@ syscallret syscall_write(int ifd, void* buff, size_t count){
fd->offset += writec;
if(fd->node->st.st_size < fd->offset)
fd->offset = fd->node->st.st_size;
retv.errno = 0;
retv.ret = writec;
+37
View File
@@ -0,0 +1,37 @@
#include <kernel/consoledev.h>
#include <kernel/devman.h>
#include <kernel/liminetty.h>
#include <errno.h>
#include <arch/panic.h>
#define CONSOLE_MAJOR 1
static int isatty(int minor){
return 0;
}
static int read(int *error, int dev, void* buff, size_t count, size_t offset){
*error = ENOSYS;
return -1;
}
static int write(int *error, int dev, void* buff, size_t count, size_t offset){
*error = 0;
liminetty_writeuser(buff, count);
return count;
}
devcalls calls = {
read, write, isatty
};
void consoledev_init(){
if(devman_newdevice("console", TYPE_CHARDEV, CONSOLE_MAJOR, 0, &calls))
_panic("Failed to create console device", 0);
}