Enviado em 29/07/2017 - 08:55h
Olá Pessoal !
Fazia uma semana que estava tentando criar CD-ROM de boot ( boot loader ) com o "stage 0" e não sabia como compilar.
Depois de muita pesquisa ... Glória a Deus consegui ! ...
Vamos lá:
01: Primeiro criar a pasta( /temp/hello_boot )
02: Ao recompilar é indicado apagar todos os arquivos exceto ( hello.s, link.ld ) OK ?
Um simples exemplo do ("stage 0") Hello World:
01 - Testando no QEMU:
E sim o CD-ROM funcionou perfeitamente no boot ... até funcionou com as teclas ( CTRL + ALT + DEL ) ... talvez não funcione se acrescentar ( cli ) no código ( não testei com asm("cli"); ).
Se alguém gostou e se interessar depois vou tentar traduzir esse com BOOT e postarei aqui:
http://wiki.osdev.org/Real_mode_assembly_I
Para quem não sabe todos os bootloaders(grub, lilo, etc) iniciam em MODO REAL ( 16 bits ) e depois muda para 32/64 bits se necessário.
Compartilhando !!!
Fazia uma semana que estava tentando criar CD-ROM de boot ( boot loader ) com o "stage 0" e não sabia como compilar.
Depois de muita pesquisa ... Glória a Deus consegui ! ...
Vamos lá:
01: Primeiro criar a pasta( /temp/hello_boot )
02: Ao recompilar é indicado apagar todos os arquivos exceto ( hello.s, link.ld ) OK ?
Um simples exemplo do ("stage 0") Hello World:
Arquivo ( link.ld ):
//-------------------------------------------------------------------
//
// Um simples "Hello World" com BOOT:
//
// ARQUIVO:
// hello.s
//
// ##############################################
//
// COMPILA O BINARIO:
//
// cd /temp/hello_boot
//
// gcc -s -c hello.s -o hello.o -Wall
// ld hello.o -o hello.bin -T link.ld
// objcopy -O binary hello.bin bkernel
//
// GERA UM CD BOOTAVEL:
// mkdosfs -C hello.flp 1440 || exit
// dd status=noxfer conv=notrunc if=bkernel of=hello.flp || exit
// mkisofs -R -b hello.flp -o /temp/hello_boot.iso /temp/hello_boot
//
// ##############################################
//
// LIMITACAO:
// Programa maximo com 510 bytes.
//
// VANTAGEM:
// MODO REAL(16 bits): Pode-se usar interrupcao a vontade ...
//
// FONTES DO SCRIPT CD-ROM BOOT:
//
// Projeto MikeOS ( OS 16 bits ), arquivo ( build-linux.sh )
//
// https://github.com/mig-hub/mikeOS
//
// POR:
// Francisco - gokernel@hotmail.com
//
//-------------------------------------------------------------------
//
.code16
.text
.globl _start;
_start:
jmp _boot
nop
_boot:
// Display: "Hello"
//
mov $0xe,%ah
mov $72,%al
int $0x10
mov $101,%al
int $0x10
mov $108,%al
int $0x10
int $0x10
mov $111,%al
int $0x10
label_forever:
hlt
jmp label_forever
msgHello: .asciz "Hello World - CD BOOT MINI OS"
//-----------------------------------------------
//---------- ESSENCIAL: nao mudar aqui ----------
//-----------------------------------------------
. = _start + 510
.word 0xaa55
//-----------------------------------------------
Esse código vou utilizar como arranque do gardenOS ( CD-ROM BOOT ) sem o grub.
SECTIONS
{
. = 0x7c00;
.text :
{
_ftext = .;
} = 0
}
01 - Testando no QEMU:
Já gravei o CD-ROM e guardei esse como relíquia ..."COISA PRECIOSA" !
qemu -cdrom hello_boot.iso
E sim o CD-ROM funcionou perfeitamente no boot ... até funcionou com as teclas ( CTRL + ALT + DEL ) ... talvez não funcione se acrescentar ( cli ) no código ( não testei com asm("cli"); ).
Se alguém gostou e se interessar depois vou tentar traduzir esse com BOOT e postarei aqui:
http://wiki.osdev.org/Real_mode_assembly_I
Para quem não sabe todos os bootloaders(grub, lilo, etc) iniciam em MODO REAL ( 16 bits ) e depois muda para 32/64 bits se necessário.
Compartilhando !!!