Mon 9 Dec 20:40:44 CET 2024

This commit is contained in:
sbosse 2024-12-09 20:42:57 +01:00
parent 57ef0f68ee
commit 7f09f23871

View File

@ -3,7 +3,7 @@ Copyright (C) 2015-2019 The University of Notre Dame
This software is distributed under the GNU General Public License. This software is distributed under the GNU General Public License.
See the file LICENSE for details. See the file LICENSE for details.
*/ */
#include "kernel/config.h"
#include "console.h" #include "console.h"
#include "page.h" #include "page.h"
#include "process.h" #include "process.h"
@ -38,7 +38,7 @@ int kernel_main()
{ {
struct console *console = console_create_root(); struct console *console = console_create_root();
console_addref(console); console_addref(console);
printf("Basekernel Version %d.%d %s\n",KERNEL_MAJOR,KERNEL_MINOR,__DATE__);
printf("video: %d x %d (addr %x)\n", video_xres, video_yres, video_buffer); printf("video: %d x %d (addr %x)\n", video_xres, video_yres, video_buffer);
printf("kernel: %d bytes\n", kernel_size); printf("kernel: %d bytes\n", kernel_size);
@ -46,7 +46,8 @@ int kernel_main()
kmalloc_init((char *) KMALLOC_START, KMALLOC_LENGTH); kmalloc_init((char *) KMALLOC_START, KMALLOC_LENGTH);
interrupt_init(); interrupt_init();
mouse_init(); mouse_init();
keyboard_init(); keyboard_init();
serial_init();
rtc_init(); rtc_init();
clock_init(); clock_init();
process_init(); process_init();
@ -61,12 +62,41 @@ int kernel_main()
current->ktable[KNO_STDDIR] = 0; // No current dir until something is mounted. current->ktable[KNO_STDDIR] = 0; // No current dir until something is mounted.
printf("\n"); printf("kernel initialization is done.\n");
#define KSHELL_SERIAL
#ifndef KSHELL_SERIAL
kshell_launch(); kshell_launch();
// never reached!
#else
// main IO loop, from kshell_launch
char line[100];
int lineIndex=0;
while(1) { while(1) {
console_putchar(console,console_getchar(console)); // console_putchar(console,console_getchar(console));
} char c;
while ((c = serial_read_nonblock(0))<0) clock_wait(10);
console_putchar(console,c);
if (c=='\n') { // End of line
const char *argv[100];
int argc;
argc = 0;
line[lineIndex]=0;
argv[argc] = strtok(line, " ");
// split line in tokens separated by spaces
while(argv[argc]) {
argc++;
argv[argc] = strtok(0, " ");
}
if(argc > 0) {
kshell_execute(argc, argv);
}
lineIndex=0;
} else line[lineIndex++]=c; // collect char
}
#endif
// never reached
return 0; return 0;
} }