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_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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
|
@ -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));
|
||||||
|
|
|
@ -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; }
|
||||||
}
|
}
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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( );
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue