2017-08-24 7 views
1

Je travaille actuellement sur mon système d'exploitation et mon problème concerne mykernel.iso que j'ai créé à partir de MakeFile. Ma distribution est Kali Linux et le problème que je rencontre concerne le démarrage. Dans mon répertoire j'ai Makefile, kernel.cpp, kernel.o, linker.d, loader.o, loader.s, types.h, mykernel.o, mykernel.iso. Lorsque je démarre mykernel.iso en utilisant VirtualBox, j'obtiens une erreurerreur d'exécution mykernel.iso dans mon système d'exploitation

Fatal! Impossible de lire à partir du support de démarrage. Système est arrêté!

(également mykernel.iso devrait être 4 mb, le mien est de 340 kb)

Voici le code:

Makefile:

GCCPARAMS = -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore 
ASPARAMS = --32 
LDPARAMS = -melf_i386 

objects = loader.o kernel.o 



%.o: %.cpp 
    gcc $(GCCPARAMS) -c -o [email protected] $< 

%.o: %.s 
    as $(ASPARAMS) -o [email protected] $< 

mykernel.bin: linker.ld $(objects) 
    ld $(LDPARAMS) -T $< -o [email protected] $(objects) 

mykernel.iso: mykernel.bin 
    mkdir iso 
    mkdir iso/boot 
    mkdir iso/boot/grub 
    cp mykernel.bin iso/boot/mykernel.bin 
    echo 'set timeout=0'      > iso/boot/grub/grub.cfg 
    echo 'set default=0'      >> iso/boot/grub/grub.cfg 
    echo ''         >> iso/boot/grub/grub.cfg 
    echo 'menuentry "My Operating System" {' >> iso/boot/grub/grub.cfg 
    echo ' multiboot /boot/mykernel.bin' >> iso/boot/grub/grub.cfg 
    echo ' boot'       >> iso/boot/grub/grub.cfg 
    echo '}'         >> iso/boot/grub/grub.cfg 
    grub-mkrescue --output=mykernel.iso iso 
    rm -rf iso 

run: mykernel.iso 
    (killall VirtualBox && sleep 1) || true 
    VirtualBox --startvm 'My Operating System' & 

install: mykernel.bin 
    sudo cp $< /boot/mykernel.bin 

kernel.cpp:

#include "types.h" 

void printf(char* str) 
{ 
    static uint16_t* VideoMemory = (uint16_t*)0xb8000; 

    for(int i = 0; str[i] != '\0'; ++i) 
     VideoMemory[i] = (VideoMemory[i] & 0xFF00) | str[i]; 
} 



typedef void (*constructor)(); 
extern "C" constructor start_ctors; 
extern "C" constructor end_ctors; 
extern "C" void callConstructors() 
{ 
    for(constructor* i = &start_ctors; i != &end_ctors; i++) 
     (*i)(); 
} 



extern "C" void kernelMain(const void* multiboot_structure, uint32_t /*multiboot_magic*/) 
{ 
    printf("Welcome To My Operating System"); 

    while(1); 
} 

Toutes les suggestions amigos?

+0

installer la version la plus récente pour le fichier iso générant sudo installer xorriso si vous êtes dans ubuntu –

+0

Merci beaucoup @JerryChen. Cloué avec succès –

Répondre

2

On dirait que vous êtes sur Kali Distro. Passer à Ubuntu et appliquer

sudo apt-get install xorriso 

devrait fonctionner comme un fils de charme.