Небольшие исправления

This commit is contained in:
Aren 2024-01-22 17:45:34 +03:00
parent feaab75a6f
commit 93934c6605
10 changed files with 50 additions and 32 deletions

View File

@ -24,8 +24,8 @@ TERM_WALLPAPER=boot:///mod/boot.jpg
MODULE_PATH=boot:///mod/simd.ko MODULE_PATH=boot:///mod/simd.ko
MODULE_CMDLINE=[MOD]simd.ko MODULE_CMDLINE=[MOD]simd.ko
MODULE_PATH=boot:///mod/pci_data.ko #MODULE_PATH=boot:///mod/pci_data.ko
MODULE_CMDLINE=[MOD]pci_data.ko #MODULE_CMDLINE=[MOD]pci_data.ko
MODULE_PATH=boot:///mod/pci.ko MODULE_PATH=boot:///mod/pci.ko
MODULE_CMDLINE=[MOD]pci.ko MODULE_CMDLINE=[MOD]pci.ko

View File

@ -7,7 +7,7 @@
*/ */
#include <arch.h> #include <arch.h>
#include <fb.h> #include <log.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <tool.h> #include <tool.h>
@ -20,5 +20,6 @@ void pit_set_interval(int hz) {
} }
void pit_init( ) { void pit_init( ) {
LOG("PIT установлен\n");
pit_set_interval(1); pit_set_interval(1);
} }

View File

@ -90,10 +90,16 @@ void task_init( ) {
uint64_t rsp; uint64_t rsp;
uint64_t cr3; uint64_t cr3;
LOG("Создание потока ядра\n");
asm volatile("mov %%rsp, %0" : "=r"(rsp)); asm volatile("mov %%rsp, %0" : "=r"(rsp));
asm volatile("mov %%cr3, %0" : "=r"(cr3)); 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)); tool_memset(kernel_task, 0, sizeof(task_t));
kernel_task->id = next_thread_id++; kernel_task->id = next_thread_id++;
@ -108,7 +114,7 @@ void task_init( ) {
last_task = kernel_task; last_task = kernel_task;
task_new_thread(dummy); LOG("Создание потока dummy\n");
task_new_thread(dummy); task_new_thread(dummy);
test_buf = mem_alloc(8 * 8 * sizeof(uint32_t)); test_buf = mem_alloc(8 * 8 * sizeof(uint32_t));

View File

@ -37,5 +37,5 @@ void lock_acquire(lock_t lock) {
// Запрос разблокировки ресурса // Запрос разблокировки ресурса
void lock_release(lock_t lock) { void lock_release(lock_t lock) {
lock.lock = 0; if (lock.lock) { lock.lock = 0; }
} }

View File

@ -238,6 +238,7 @@ void mem_free(void *addr) {
if (curr->data == addr) { if (curr->data == addr) {
curr->free = 1; curr->free = 1;
merge_blocks(prev ? prev : curr); merge_blocks(prev ? prev : curr);
mem_merge_all_blocks( );
return; return;
} }
prev = curr; prev = curr;
@ -319,12 +320,12 @@ void mem_init( ) {
LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit); LOG("%u / %u блоков доступно\n", bitmap_available, bitmap_limit);
// LOG("Размер битовой карты: %u\n", bitmap_size); // LOG("Размер битовой карты: %u\n", bitmap_size);
alloc_init(mem_frame_alloc(1), BLOCK_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 мегабайта в аллокатор динамичной памяти // Выделяем по 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_merge_all_blocks( );
// mem_dump_memory( ); mem_dump_memory( );
LOG("%u МБ объем доступной памяти, %u МБ объем виртуальной памяти\n", (bitmap_available * BLOCK_SIZE) / 1024 / 1024, LOG("%u МБ объем доступной памяти, %u МБ объем виртуальной памяти\n", (bitmap_available * BLOCK_SIZE) / 1024 / 1024,
available / 1024 / 1024); available / 1024 / 1024);

View File

@ -60,7 +60,11 @@ void mod_list_show( ) {
void mod_after_init( ) { void mod_after_init( ) {
for (uint64_t i = 0; i < modules_count; i++) { 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);
}
} }
} }
@ -124,7 +128,7 @@ void mod_init( ) {
continue; continue;
} }
module_info_t (*module_init)(env_t * env) = module_info_t (*module_init)(env_t *env) =
(module_info_t(*)(env_t * env)) elf_entry((elf64_header_t *)module_ptr->address); (module_info_t(*)(env_t * env)) elf_entry((elf64_header_t *)module_ptr->address);
// LOG("\t->Точка входа: 0x%x\n", module_init); // LOG("\t->Точка входа: 0x%x\n", module_init);

View File

@ -31,6 +31,8 @@ void _start( ) {
fb_init( ); fb_init( );
log_init_mem( ); log_init_mem( );
arch_init( ); arch_init( );
mod_init( );
mod_after_init( );
LOG("\t\t\t\t *** Базовая Модульная Платформа Операционных Систем " LOG("\t\t\t\t *** Базовая Модульная Платформа Операционных Систем "
"версии %u.%u.%u %s***\n", "версии %u.%u.%u %s***\n",
@ -38,9 +40,6 @@ void _start( ) {
LOG("\t\t\t\t *** Дата сборки: %s %s ***\n", __DATE__, __TIME__); LOG("\t\t\t\t *** Дата сборки: %s %s ***\n", __DATE__, __TIME__);
mod_init( );
mod_after_init( );
pit_init( ); pit_init( );
task_init( ); task_init( );

0
modlib/lib/build.sh Normal file → Executable file
View File

View File

@ -143,15 +143,19 @@ void print_folder_contents(folder_t *folder, size_t depth) {
} }
static void main( ) { static void main( ) {
uint64_t mod_count = 0; uint64_t *mod_count = alloc(sizeof(uint64_t));
module_info_t *mod_list = mod_list_get(&mod_count); 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++) { for (uint64_t i = 0; i < *mod_count; i++) {
if (mod_list[i].data_size) { 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); 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); 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) { 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]", .name = (char *)"[FS][IMFS]",
.message = (char *)"IMFS (in memory filesystem) - файловая система работающая исключительно в ОЗУ.", .message = (char *)"IMFS (in memory filesystem) - файловая система работающая исключительно в ОЗУ.",
.type = 0, .type = 0,
.data_size = sizeof(file_t), .data_size = 0,
.data = (void *)root_folder, .data = (void *)0,
.err_code = 0, .err_code = 0,
.module_id = 0, .module_id = 0,
.irq = 0, .irq = 0,

View File

@ -7,7 +7,7 @@ static int ru = 1;
static char c_char = '\0'; static char c_char = '\0';
static key_event_t keyboard_buffer; static key_event_t keyboard_buffer;
static inline void virt_exit( ) { static void virt_exit( ) {
fb_printf("Выход для Bochs\n"); fb_printf("Выход для Bochs\n");
outw(0xB004, 0x2000); outw(0xB004, 0x2000);
@ -87,6 +87,17 @@ static void handler(struct frame *state) {
uint8_t scancode = inb(0x60); uint8_t scancode = inb(0x60);
char c = '\0'; 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) { if (scancode == 0xE0) {
current_state = PREFIX_STATE; current_state = PREFIX_STATE;
after_interrupt( ); after_interrupt( );
@ -140,14 +151,6 @@ static void handler(struct frame *state) {
c_char = c; c_char = c;
kbd_free = true; kbd_free = true;
switch (scancode) {
case 0x01: virt_exit( ); break; // Клавиша "ESCAPE"
case 0x4F: // Клавиша "END"
fb_printf("END?\n");
break;
default: break;
}
after_interrupt( ); after_interrupt( );
} }
@ -161,8 +164,8 @@ module_info_t __attribute__((section(".minit"))) init(env_t *env) {
return (module_info_t){ .name = (char *)"[KEYBOARD]", return (module_info_t){ .name = (char *)"[KEYBOARD]",
.message = (char *)"PS/2 драйвер", .message = (char *)"PS/2 драйвер",
.type = 0, .type = 0,
.data_size = MAX_KEY_BUFFER_SIZE, .data_size = 0,
.data = (void *)&keyboard_buffer, .data = (void *)0,
.err_code = 0, .err_code = 0,
.module_id = 0, .module_id = 0,
.irq = 33, .irq = 33,