Добавлен список модулей
This commit is contained in:
parent
076c87badf
commit
80fae02e94
65
kernel/mod.c
65
kernel/mod.c
@ -35,9 +35,8 @@ static env_t main_env;
|
||||
|
||||
void *bootpng_ptr;
|
||||
uint64_t bootpng_size;
|
||||
void main( );
|
||||
|
||||
static void *elf_entry(void *module_bin, uint64_t size) {
|
||||
static void *elf_entry(void *module_bin) {
|
||||
// Приводим заголовок ELF файла к типу elf64_header_t
|
||||
elf64_header_t *elf_header = (elf64_header_t *)module_bin;
|
||||
|
||||
@ -62,7 +61,19 @@ static volatile struct limine_module_request module_request = {
|
||||
};
|
||||
|
||||
static struct limine_module_response *module_response;
|
||||
static uint64_t modules_count = 0;
|
||||
uint64_t modules_count = 0;
|
||||
module_info_t module_list[MOD_MAX];
|
||||
static char *graphics_module_message = "Графический модуль-объект";
|
||||
static char *other_module_message = "Неизвестный тип модуля";
|
||||
|
||||
void mod_list_show( ) {
|
||||
for (uint64_t i = 0; i < modules_count; i++) {
|
||||
fb_printf("Имя: %s\n", module_list[i].name);
|
||||
fb_printf("Описание модуля: %s\n", module_list[i].message);
|
||||
fb_printf("Тип модуля: %u\n", module_list[i].type);
|
||||
fb_printf("Код ошибки модуля: %u\n", module_list[i].err_code);
|
||||
}
|
||||
}
|
||||
|
||||
void mod_init( ) {
|
||||
module_response = module_request.response;
|
||||
@ -71,44 +82,44 @@ void mod_init( ) {
|
||||
|
||||
for (uint64_t i = 0; i < module_count; i++) {
|
||||
module_ptr = module_response->modules[i];
|
||||
LOG("[%d] %s [%s] 0x%x\n", i, module_ptr->path, module_ptr->cmdline,
|
||||
module_ptr->address);
|
||||
LOG("->Размер: %u, тип носителя: %u, индекс раздела: %u\n",
|
||||
module_ptr->size, module_ptr->media_type,
|
||||
module_ptr->partition_index);
|
||||
#if 0
|
||||
LOG("[%d] %s [%s] 0x%x\n", i, module_ptr->path,
|
||||
module_ptr->cmdline, module_ptr->address);
|
||||
LOG("->Размер: %u, тип носителя: %u, индекс раздела: %u\n",
|
||||
module_ptr->size, module_ptr->media_type,
|
||||
module_ptr->partition_index);
|
||||
LOG("->Идентификатор диска MBR: %u, TFTP IP: %u, TFTP порт: %u\n",
|
||||
module_ptr->mbr_disk_id, module_ptr->tftp_ip,
|
||||
module_ptr->tftp_port);
|
||||
|
||||
#endif
|
||||
LOG("[%d] %s [%s] 0x%x Размер: %u\n", i, module_ptr->path,
|
||||
module_ptr->cmdline, module_ptr->address, module_ptr->size);
|
||||
|
||||
if (modules_count >= MOD_MAX) {
|
||||
LOG("Модуль не обработан. Максимум %u модулей!\n", MOD_MAX);
|
||||
break;
|
||||
}
|
||||
|
||||
module_list[modules_count].name = module_ptr->cmdline;
|
||||
module_list[modules_count].message = other_module_message;
|
||||
|
||||
if (tool_starts_with(module_ptr->cmdline, "[BOOTIMG]")) {
|
||||
LOG("\t\t[BOOTIMG]\n");
|
||||
bootpng_ptr = module_ptr->address;
|
||||
bootpng_size = module_ptr->size;
|
||||
module_list[modules_count].type = 1; // Графика
|
||||
module_list[modules_count].message = graphics_module_message;
|
||||
modules_count++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!tool_starts_with(module_ptr->cmdline, "[MOD]")) {
|
||||
module_list[modules_count].type = 255; // Неизвестный тип модуля
|
||||
modules_count++;
|
||||
continue;
|
||||
}
|
||||
if (!tool_starts_with(module_ptr->cmdline, "[MOD]")) { continue; }
|
||||
modules_count++;
|
||||
module_info_t (*module_init)(env_t * env) =
|
||||
(module_info_t * (*)(env_t * env))
|
||||
elf_entry(module_ptr->address, module_ptr->size);
|
||||
(module_info_t(*)(env_t * env)) elf_entry(module_ptr->address);
|
||||
|
||||
LOG("\t->Точка входа: 0x%x\n", module_init);
|
||||
|
||||
main_env.offset = module_ptr->address;
|
||||
main_env.offset = (uint64_t)module_ptr->address;
|
||||
main_env.info = (module_info_t *)0;
|
||||
main_env.fb_printf = &fb_printf;
|
||||
module_info_t ret = module_init(&main_env);
|
||||
module_list[modules_count].message = ret.message;
|
||||
|
||||
LOG("Инициализированно с кодом: %u\n", ret.err_code);
|
||||
// LOG("Инициализированно с кодом: %u\n", ret->err_code);
|
||||
// LOG("Сообщение из модуля: %s\n\n", ret->message);
|
||||
modules_count++;
|
||||
}
|
||||
LOG("Модулей обработано: %u\n", modules_count);
|
||||
}
|
@ -6,7 +6,7 @@ from multiprocessing import Pool
|
||||
|
||||
|
||||
ARCH_FLAGS = "-m64 -march=x86-64 -mabi=sysv -mno-red-zone -mcmodel=kernel -MMD -MP"
|
||||
WARN_FLAGS = "-w -Wall -Wextra -nostdlib"
|
||||
WARN_FLAGS = "-Wall -Wextra -nostdlib "
|
||||
STANDART_FLAGS = "-std=gnu11"
|
||||
PROTECT_FLAGS = "-O0 -pipe -ffreestanding -fno-stack-protector -fno-lto -fno-stack-check -fno-PIC -fno-PIE"
|
||||
CHARSET_FLAGS = "-finput-charset=UTF-8 -fexec-charset=cp1251"
|
||||
@ -135,7 +135,7 @@ def create_hdd(IMAGE_NAME):
|
||||
os.system(f"mcopy -i {IMAGE_NAME}.hdd@@1M kernel.elf configs/limine.cfg limine/limine-bios.sys ::/")
|
||||
os.system(f"mcopy -i {IMAGE_NAME}.hdd@@1M modules/music/music.ko modules/simd/simd.ko modules/cpubench/cpubench.ko modules/helloworld/hello.ko ::/mod")
|
||||
os.system(f"mcopy -i {IMAGE_NAME}.hdd@@1M limine/BOOTX64.EFI limine/BOOTIA32.EFI ::/EFI/BOOT")
|
||||
os.system(f"mcopy -i {IMAGE_NAME}.hdd@@1M boot.tga ::/")
|
||||
os.system(f"mcopy -i {IMAGE_NAME}.hdd@@1M boot.jpg boot.tga ::/")
|
||||
os.system(f"./limine/limine bios-install {IMAGE_NAME}.hdd")
|
||||
|
||||
|
||||
@ -144,7 +144,7 @@ def create_iso(IMAGE_NAME):
|
||||
os.system(f"rm -rf iso_root")
|
||||
os.system(f"mkdir -p iso_root")
|
||||
os.system(f"cp -v iso_root/")
|
||||
os.system(f"cp -v kernel.elf boot.tga configs/limine.cfg limine/limine-bios.sys limine/limine-bios-cd.bin limine/limine-uefi-cd.bin iso_root/")
|
||||
os.system(f"cp -v kernel.elf boot.jpg boot.tga configs/limine.cfg limine/limine-bios.sys limine/limine-bios-cd.bin limine/limine-uefi-cd.bin iso_root/")
|
||||
os.system(f"mkdir -p iso_root/EFI/BOOT")
|
||||
os.system(f"mkdir -p iso_root/mod")
|
||||
os.system(f"cp -v modules/helloworld/hello.ko iso_root/mod/")
|
||||
|
Loading…
Reference in New Issue
Block a user