Ciao a tutti ho seguito varie guide su internet per compilare un mini sistema operativo che praticamente invia un messaggio a video con la scritta ''SO''.
Ho composto le varie parti su Ubuntu, le parti sono:
LOADER.ASM
global loader
extern main
MODULE_ALIGN equ 1<<0
MEM_INFO equ 1<<1
FLAGS equ MODULE_ALIGN | MEM_INFO
MAGIC equ 0x1BADB002
CHECKSUM equ -(MAGIC + FLAGS)
section .text
align 4
MultiBootHeader:
dd MAGIC
dd FLAGS
dd CHECKSUM
STACKSIZE equ 0x4000
loader:
call main
cli
hang:
hlt
jmp hang
section .bss
align 4
stack:
resb STACKSIZE
KERNEL.C
void main(){
unsigned char* video = (unsigned char*) 0xB8000;
video[0] = 'O';
video[1] = 0x07;
video[2] = 'S';
video[3] = 0x07;
}
LINKER.LD
ENTRY (loader)
SECTIONS
{
. = 0x00100000;
.text ALIGN (0x1000) :
{
*(.text)
}
.rodata ALIGN (0x1000) :
{
*(.rodata*)
}
.data ALIGN (0x1000) :
{
*(.data)
}
.bss :
{
sbss = .;
*(COMMON)
*(.bss)
ebss = .;
}}
SINTASSI PER LA COMPILAZIONE USATI (DA TERMINALE):
LOADER: nasm -f elf -o loader.o loader.asm
KERNEL: gcc -o kernel.o -c Kernel.C -Wall -Wextra -nostdlib
LINKER: ld -T link.ld -o os.bin loader.o kernel.o
Ora mi sono stati creati 3 file (kernel.o/loader.o/os.bin) solo con un errore quando mi ha compilato il kernel, che mi dice "kernel.c:1: warning: return type of ‘main’ is not ‘int’
" però mi ha creato ugualmente il file. Ora io ho scaricato un pacchetto del GRUB nel quale c' erano dei file (stage1 e stage2) che servono per il prossimo passo (il link del pacchetto l' ho messo sotto per farvelo vedere meglio) e con il comando "dd if=/dev/zero of=pad bs=1 count=750" ho creato un il file "pad". Ora ho creato il file image.img con il comando "cat stage1 stage2 pad os.bin > image.img". Questo file l' ho montato con diversi emulatori. Mi parte il Grub ma non visualizza la scritta "OS" (allego la foto per far capire meglio) dove ho sbagliato ? I tentativi sono stati effettuati con Qemu con il comando da terminale "qemu -fda image.img",ma non sono riuscito a farlo partire mi sono fermato su una schermata uguale a quella che linko sotto. Cosa dovrei fare ? Grazie per l 'attenzione.
LINK FILE GRUB: GNU Project Archives [Settimo file dall' alto: grub-0.94-i386-pc.tar.gz]
LINK IMMAGINE GRUB: ImageShack® - Online Photo and Video Hosting
Ho composto le varie parti su Ubuntu, le parti sono:
LOADER.ASM
global loader
extern main
MODULE_ALIGN equ 1<<0
MEM_INFO equ 1<<1
FLAGS equ MODULE_ALIGN | MEM_INFO
MAGIC equ 0x1BADB002
CHECKSUM equ -(MAGIC + FLAGS)
section .text
align 4
MultiBootHeader:
dd MAGIC
dd FLAGS
dd CHECKSUM
STACKSIZE equ 0x4000
loader:
call main
cli
hang:
hlt
jmp hang
section .bss
align 4
stack:
resb STACKSIZE
KERNEL.C
void main(){
unsigned char* video = (unsigned char*) 0xB8000;
video[0] = 'O';
video[1] = 0x07;
video[2] = 'S';
video[3] = 0x07;
}
LINKER.LD
ENTRY (loader)
SECTIONS
{
. = 0x00100000;
.text ALIGN (0x1000) :
{
*(.text)
}
.rodata ALIGN (0x1000) :
{
*(.rodata*)
}
.data ALIGN (0x1000) :
{
*(.data)
}
.bss :
{
sbss = .;
*(COMMON)
*(.bss)
ebss = .;
}}
SINTASSI PER LA COMPILAZIONE USATI (DA TERMINALE):
LOADER: nasm -f elf -o loader.o loader.asm
KERNEL: gcc -o kernel.o -c Kernel.C -Wall -Wextra -nostdlib
LINKER: ld -T link.ld -o os.bin loader.o kernel.o
Ora mi sono stati creati 3 file (kernel.o/loader.o/os.bin) solo con un errore quando mi ha compilato il kernel, che mi dice "kernel.c:1: warning: return type of ‘main’ is not ‘int’
" però mi ha creato ugualmente il file. Ora io ho scaricato un pacchetto del GRUB nel quale c' erano dei file (stage1 e stage2) che servono per il prossimo passo (il link del pacchetto l' ho messo sotto per farvelo vedere meglio) e con il comando "dd if=/dev/zero of=pad bs=1 count=750" ho creato un il file "pad". Ora ho creato il file image.img con il comando "cat stage1 stage2 pad os.bin > image.img". Questo file l' ho montato con diversi emulatori. Mi parte il Grub ma non visualizza la scritta "OS" (allego la foto per far capire meglio) dove ho sbagliato ? I tentativi sono stati effettuati con Qemu con il comando da terminale "qemu -fda image.img",ma non sono riuscito a farlo partire mi sono fermato su una schermata uguale a quella che linko sotto. Cosa dovrei fare ? Grazie per l 'attenzione.
LINK FILE GRUB: GNU Project Archives [Settimo file dall' alto: grub-0.94-i386-pc.tar.gz]
LINK IMMAGINE GRUB: ImageShack® - Online Photo and Video Hosting