mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 23:18:21 +00:00
pseudodevices: initial null, zero and full implementations
This commit is contained in:
@@ -63,6 +63,8 @@ void kmain(){
|
|||||||
|
|
||||||
consoledev_init();
|
consoledev_init();
|
||||||
|
|
||||||
|
pseudodevs_init();
|
||||||
|
|
||||||
pci_enumerate();
|
pci_enumerate();
|
||||||
|
|
||||||
cpu_state_init();
|
cpu_state_init();
|
||||||
@@ -74,7 +76,7 @@ void kmain(){
|
|||||||
keyboard_init();
|
keyboard_init();
|
||||||
|
|
||||||
ps2kbd_init();
|
ps2kbd_init();
|
||||||
|
|
||||||
sched_runinit();
|
sched_runinit();
|
||||||
|
|
||||||
_panic("End of kmain()", 0);
|
_panic("End of kmain()", 0);
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#define MAJOR_CONSOLE 1
|
||||||
|
#define MAJOR_ZERO 2
|
||||||
|
#define MAJOR_NULL 3
|
||||||
|
#define MAJOR_FULL 4
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
int (*read)(int* error, int minor, void* buff, size_t count, size_t offset);
|
int (*read)(int* error, int minor, void* buff, size_t count, size_t offset);
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
objects := $(patsubst %.c,%.o,$(wildcard *.c))
|
objects := $(patsubst %.c,%.o,$(wildcard *.c))
|
||||||
subdirs := mm sched syscalls
|
subdirs := mm sched syscalls pseudodevs
|
||||||
OBJPATH=$(OBJDIR)
|
OBJPATH=$(OBJDIR)
|
||||||
export
|
export
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
objects := $(patsubst %.c,%.o,$(wildcard *.c))
|
||||||
|
subdirs :=
|
||||||
|
OBJPATH=$(OBJDIR)
|
||||||
|
export
|
||||||
|
|
||||||
|
all: $(subdirs) $(objects)
|
||||||
|
for subdir in $(subdirs) ; do $(MAKE) -C $${subdir} ; done
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(CFLAGS) -o $@ $<
|
||||||
|
mkdir -p $(OBJPATH)
|
||||||
|
cp $@ $(OBJPATH)/$@
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#include <kernel/devman.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <arch/panic.h>
|
||||||
|
|
||||||
|
static int read(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||||
|
*error = 0;
|
||||||
|
memset(buff, 0, count);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
static int write(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||||
|
*error = ENOSPC;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int isatty(int minor){
|
||||||
|
return ENOTTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
static devcalls calls = {
|
||||||
|
read, write, isatty
|
||||||
|
};
|
||||||
|
|
||||||
|
void fulldev_init(){
|
||||||
|
if(devman_newdevice("full", TYPE_CHARDEV, MAJOR_FULL, 0, &calls)){
|
||||||
|
_panic("/dev/full init failed", NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
#include <kernel/devman.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <arch/panic.h>
|
||||||
|
|
||||||
|
static int read(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||||
|
*error = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static int write(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||||
|
*error = 0;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int isatty(int minor){
|
||||||
|
return ENOTTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
static devcalls calls = {
|
||||||
|
read, write, isatty
|
||||||
|
};
|
||||||
|
|
||||||
|
void nulldev_init(){
|
||||||
|
if(devman_newdevice("null", TYPE_CHARDEV, MAJOR_NULL, 0, &calls)){
|
||||||
|
_panic("/dev/null init failed", NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
void nulldev_init();
|
||||||
|
void zerodev_init();
|
||||||
|
void fulldev_init();
|
||||||
|
|
||||||
|
void pseudodevs_init(){
|
||||||
|
|
||||||
|
nulldev_init();
|
||||||
|
zerodev_init();
|
||||||
|
fulldev_init();
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#include <kernel/devman.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <arch/panic.h>
|
||||||
|
|
||||||
|
static int read(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||||
|
*error = 0;
|
||||||
|
memset(buff, 0, count);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
static int write(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||||
|
*error = 0;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int isatty(int minor){
|
||||||
|
return ENOTTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
static devcalls calls = {
|
||||||
|
read, write, isatty
|
||||||
|
};
|
||||||
|
|
||||||
|
void zerodev_init(){
|
||||||
|
if(devman_newdevice("zero", TYPE_CHARDEV, MAJOR_ZERO, 0, &calls)){
|
||||||
|
_panic("/dev/zero init failed", NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,8 +8,6 @@
|
|||||||
#include <arch/interrupt.h>
|
#include <arch/interrupt.h>
|
||||||
#include <arch/spinlock.h>
|
#include <arch/spinlock.h>
|
||||||
|
|
||||||
#define CONSOLE_MAJOR 1
|
|
||||||
|
|
||||||
static ringbuffer_t input;
|
static ringbuffer_t input;
|
||||||
static thread_t* thread;
|
static thread_t* thread;
|
||||||
static event_t outputevent;
|
static event_t outputevent;
|
||||||
@@ -129,7 +127,7 @@ devcalls calls = {
|
|||||||
|
|
||||||
void consoledev_init(){
|
void consoledev_init(){
|
||||||
|
|
||||||
if(devman_newdevice("console", TYPE_CHARDEV, CONSOLE_MAJOR, 0, &calls))
|
if(devman_newdevice("console", TYPE_CHARDEV, MAJOR_CONSOLE, 0, &calls))
|
||||||
_panic("Failed to create console device", 0);
|
_panic("Failed to create console device", 0);
|
||||||
|
|
||||||
if(ringbuffer_init(&input, THREAD_BUFF_MAX))
|
if(ringbuffer_init(&input, THREAD_BUFF_MAX))
|
||||||
|
|||||||
Reference in New Issue
Block a user