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

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_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

View File

@ -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);
}

View File

@ -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));

View File

@ -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; }
}

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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( );

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( ) {
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,

View File

@ -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,