how to create img?
Posted: Tue Nov 11, 2008 10:51 am
This is a simple c kernel from basickernel.
And use NASM for make kernel_start.o
OK I get ks.o file.
Create simple kernel.c
USE DJGPP for make kernel.o
Create link.ld
Make kernel.bin
Now I have 6 files
How to create img file for test on VMWare?
Code: Select all
;============kernel_start.asm file
[BITS 32]
[global start]
[extern _k_main] ; this is in the c file
start:
call _k_main
cli ; stop interrupts
hlt ; halt the CPU
Code: Select all
nasm -f aout kernel_start.asm -o ks.o
Create simple kernel.c
Code: Select all
;============kernel.c file
#define WHITE_TXT 0x07 // white on black text
void k_clear_screen();
unsigned int k_printf(char *message, unsigned int line);
void update_cursor(int row, int col);
k_main() // like main in a normal C program
{
k_clear_screen();
k_printf("Hi!\nWelcome to Andaman", 0);
};
void k_clear_screen() // clear the entire text screen
{
char *vidmem = (char *) 0xb8000;
unsigned int i=0;
while(i < (80*25*2))
{
vidmem[i]=' ';
i++;
vidmem[i]=WHITE_TXT;
i++;
};
};
unsigned int k_printf(char *message, unsigned int line) // the message and then the line #
{
char *vidmem = (char *) 0xb8000;
unsigned int i=0;
i=(line*80*2);
while(*message!=0)
{
if(*message=='\n') // check for a new line
{
line++;
i=(line*80*2);
*message++;
} else {
vidmem[i]=*message;
*message++;
i++;
vidmem[i]=WHITE_TXT;
i++;
};
};
return(1);
};
Code: Select all
gcc -c kernel.c -o kernel.o
Code: Select all
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
.text 0xFF800000 : {
*(.text)
}
.data : {
*(.data)
}
.bss :
{
*(.bss)
}
}
Code: Select all
ld -T link.ld -o kernel.bin ks.o kernel.o
Code: Select all
kernel.bin
kernel.c
kernel.o
kernel_start.asm
ks.o
link.ld