mirror of https://github.com/0Nera/BMOSP.git
Небольшие исправления
This commit is contained in:
parent
feaab75a6f
commit
93934c6605
|
@ -24,8 +24,8 @@ TERM_WALLPAPER=boot:///mod/boot.jpg
|
|||
MODULE_PATH=boot:///mod/simd.ko
|
||||
MODULE_CMDLINE=[MOD]simd.ko
|
||||
|
||||
MODULE_PATH=boot:///mod/pci_data.ko
|
||||
MODULE_CMDLINE=[MOD]pci_data.ko
|
||||
#MODULE_PATH=boot:///mod/pci_data.ko
|
||||
#MODULE_CMDLINE=[MOD]pci_data.ko
|
||||
|
||||
MODULE_PATH=boot:///mod/pci.ko
|
||||
MODULE_CMDLINE=[MOD]pci.ko
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <fb.h>
|
||||
#include <log.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <tool.h>
|
||||
|
@ -20,5 +20,6 @@ void pit_set_interval(int hz) {
|
|||
}
|
||||
|
||||
void pit_init( ) {
|
||||
LOG("PIT установлен\n");
|
||||
pit_set_interval(1);
|
||||
}
|
|
@ -90,10 +90,16 @@ void task_init( ) {
|
|||
uint64_t rsp;
|
||||
uint64_t cr3;
|
||||
|
||||
LOG("Создание потока ядра\n");
|
||||
asm volatile("mov %%rsp, %0" : "=r"(rsp));
|
||||
asm volatile("mov %%cr3, %0" : "=r"(cr3));
|
||||
|
||||
kernel_task = mem_alloc(sizeof(task_t));
|
||||
LOG("Настройка потока ядра\n");
|
||||
mem_dump_memory( );
|
||||
task_t *new_task = mem_alloc(sizeof(task_t));
|
||||
LOG("%x\n", new_task);
|
||||
kernel_task = new_task;
|
||||
|
||||
tool_memset(kernel_task, 0, sizeof(task_t));
|
||||
|
||||
kernel_task->id = next_thread_id++;
|
||||
|
@ -108,7 +114,7 @@ void task_init( ) {
|
|||
|
||||
last_task = kernel_task;
|
||||
|
||||
task_new_thread(dummy);
|
||||
LOG("Создание потока dummy\n");
|
||||
task_new_thread(dummy);
|
||||
|
||||
test_buf = mem_alloc(8 * 8 * sizeof(uint32_t));
|
||||
|
|
|
@ -37,5 +37,5 @@ void lock_acquire(lock_t lock) {
|
|||
|
||||
// Запрос разблокировки ресурса
|
||||
void lock_release(lock_t lock) {
|
||||
lock.lock = 0;
|
||||
if (lock.lock) { lock.lock = 0; }
|
||||
}
|
|
@ -238,6 +238,7 @@ void mem_free(void *addr) {
|
|||
if (curr->data == addr) {
|
||||
curr->free = 1;
|
||||
merge_blocks(prev ? prev : curr);
|
||||
mem_merge_all_blocks( );
|
||||
return;
|
||||
}
|
||||
prev = curr;
|
||||
|
@ -319,12 +320,12 @@ void mem_init( ) {
|
|||
LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit);
|
||||
// LOG("Размер битовой карты: %u\n", bitmap_size);
|
||||
alloc_init(mem_frame_alloc(1), BLOCK_SIZE);
|
||||
LOG("%u мегабайт выделено в динамичную память\n", (256 * 16 * BLOCK_SIZE + BLOCK_SIZE) / 1024 / 1024);
|
||||
LOG("%u мегабайт выделено в динамичную память\n", (256 * 32 * BLOCK_SIZE + BLOCK_SIZE) / 1024 / 1024);
|
||||
|
||||
// Выделяем по 4 мегабайта в аллокатор динамичной памяти
|
||||
for (int64_t i = 0; i < 16; i += 8) { mem_add_block(mem_frame_alloc(1024), 1024 * BLOCK_SIZE); }
|
||||
for (int64_t i = 0; i < 64; i += 8) { mem_add_block(mem_frame_alloc(1024), 1024 * BLOCK_SIZE); }
|
||||
mem_merge_all_blocks( );
|
||||
// mem_dump_memory( );
|
||||
mem_dump_memory( );
|
||||
LOG("%u МБ объем доступной памяти, %u МБ объем виртуальной памяти\n", (bitmap_available * BLOCK_SIZE) / 1024 / 1024,
|
||||
available / 1024 / 1024);
|
||||
|
||||
|
|
|
@ -60,7 +60,11 @@ void mod_list_show( ) {
|
|||
|
||||
void mod_after_init( ) {
|
||||
for (uint64_t i = 0; i < modules_count; i++) {
|
||||
if (module_list[i].after_init != 0) { module_list[i].after_init( ); }
|
||||
if (module_list[i].after_init != 0) {
|
||||
LOG("%s.after_init( );\n", module_list[i].name);
|
||||
module_list[i].after_init( );
|
||||
LOG("%s.after_init( );\n", module_list[i].name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,8 @@ void _start( ) {
|
|||
fb_init( );
|
||||
log_init_mem( );
|
||||
arch_init( );
|
||||
mod_init( );
|
||||
mod_after_init( );
|
||||
|
||||
LOG("\t\t\t\t *** Базовая Модульная Платформа Операционных Систем "
|
||||
"версии %u.%u.%u %s***\n",
|
||||
|
@ -38,9 +40,6 @@ void _start( ) {
|
|||
|
||||
LOG("\t\t\t\t *** Дата сборки: %s %s ***\n", __DATE__, __TIME__);
|
||||
|
||||
mod_init( );
|
||||
mod_after_init( );
|
||||
|
||||
pit_init( );
|
||||
task_init( );
|
||||
|
||||
|
|
|
@ -143,15 +143,19 @@ void print_folder_contents(folder_t *folder, size_t depth) {
|
|||
}
|
||||
|
||||
static void main( ) {
|
||||
uint64_t mod_count = 0;
|
||||
module_info_t *mod_list = mod_list_get(&mod_count);
|
||||
|
||||
for (uint64_t i = 0; i < mod_count; i++) {
|
||||
if (mod_list[i].data_size) {
|
||||
uint64_t *mod_count = alloc(sizeof(uint64_t));
|
||||
module_info_t *mod_list = mod_list_get(mod_count);
|
||||
fb_printf("Модулей: %u\n", *mod_count);
|
||||
for (uint64_t i = 0; i < *mod_count; i++) {
|
||||
if (mod_list[i].data_size > 0) {
|
||||
fb_printf("Модуль: %s\n", mod_list[i].name);
|
||||
add_file(mod_list[i].name, "datafile", mod_f, mod_list[i].data, mod_list[i].data_size);
|
||||
}
|
||||
}
|
||||
fb_printf("Модулей: %u\n", *mod_count);
|
||||
print_folder_contents(root_folder, 0);
|
||||
free(mod_count);
|
||||
fb_printf("Модулей: %u\n", *mod_count);
|
||||
}
|
||||
|
||||
module_info_t __attribute__((section(".minit"))) init(env_t *env) {
|
||||
|
@ -170,8 +174,8 @@ module_info_t __attribute__((section(".minit"))) init(env_t *env) {
|
|||
.name = (char *)"[FS][IMFS]",
|
||||
.message = (char *)"IMFS (in memory filesystem) - файловая система работающая исключительно в ОЗУ.",
|
||||
.type = 0,
|
||||
.data_size = sizeof(file_t),
|
||||
.data = (void *)root_folder,
|
||||
.data_size = 0,
|
||||
.data = (void *)0,
|
||||
.err_code = 0,
|
||||
.module_id = 0,
|
||||
.irq = 0,
|
||||
|
|
|
@ -7,7 +7,7 @@ static int ru = 1;
|
|||
static char c_char = '\0';
|
||||
static key_event_t keyboard_buffer;
|
||||
|
||||
static inline void virt_exit( ) {
|
||||
static void virt_exit( ) {
|
||||
fb_printf("Выход для Bochs\n");
|
||||
outw(0xB004, 0x2000);
|
||||
|
||||
|
@ -87,6 +87,17 @@ static void handler(struct frame *state) {
|
|||
uint8_t scancode = inb(0x60);
|
||||
char c = '\0';
|
||||
|
||||
switch (scancode) {
|
||||
case 0x01:
|
||||
fb_printf("ВЫХОД\n");
|
||||
virt_exit( );
|
||||
break; // Клавиша "ESCAPE"
|
||||
case 0x4F: // Клавиша "END"
|
||||
fb_printf("END?\n");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
if (scancode == 0xE0) {
|
||||
current_state = PREFIX_STATE;
|
||||
after_interrupt( );
|
||||
|
@ -140,14 +151,6 @@ static void handler(struct frame *state) {
|
|||
|
||||
c_char = c;
|
||||
kbd_free = true;
|
||||
|
||||
switch (scancode) {
|
||||
case 0x01: virt_exit( ); break; // Клавиша "ESCAPE"
|
||||
case 0x4F: // Клавиша "END"
|
||||
fb_printf("END?\n");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
after_interrupt( );
|
||||
}
|
||||
|
||||
|
@ -161,8 +164,8 @@ module_info_t __attribute__((section(".minit"))) init(env_t *env) {
|
|||
return (module_info_t){ .name = (char *)"[KEYBOARD]",
|
||||
.message = (char *)"PS/2 драйвер",
|
||||
.type = 0,
|
||||
.data_size = MAX_KEY_BUFFER_SIZE,
|
||||
.data = (void *)&keyboard_buffer,
|
||||
.data_size = 0,
|
||||
.data = (void *)0,
|
||||
.err_code = 0,
|
||||
.module_id = 0,
|
||||
.irq = 33,
|
||||
|
|
Loading…
Reference in New Issue