The process (in Ubuntu) I go through is as follows:
1. Write kernel.c, loader.s
2. Generate a pad file
3. Download other people's "stage1", "stage2", and "linker.ld" files (linker.ld to link everything)
4. Compile [gcc]
5. Link [ld]
6. Test.
However, on the linking process I get the following errors regarding kernel.o [compiled kernel.c]
Command:
- Code: Select all
ld -T linker.ld -o kernel.bin loader.o kernel.o
Error:
- Code: Select all
kernel.o: In function `kmain':
kernel.c:(.text+0x47): undefined reference to `gets'
My code for kernel.c (Compiled into kernel.o):
- Code: Select all
#define WHITE_TXT 0x07 // white on black text
#include <stdio.h>
unsigned int k_printf(char *message, unsigned int line);
void k_clear_screen();
void update_cursor(int row, int col);
void kmain( void* mbd, unsigned int magic )
{
if ( magic != 0x2BADB002 )
{
}
char * boot_loader_name =(char*) ((long*)mbd)[16];
/* Print a letter to screen to see everything is working: */
unsigned char *videoram = (unsigned char *) 0xb8000;
videoram[1] = 0x07; /* forground, background color. */
// TERMINAL TIMMMEEEEE!!!!!
char input[150];
k_clear_screen();
k_printf("Welcome to my simple OS! \nType some text and I'll echo it back for you: ", 4);
gets(input);
k_printf("You typed: %s", 6);
}
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 part with gets():
- Code: Select all
// TERMINAL TIMMMEEEEE!!!!!
char input[150];
k_clear_screen();
k_printf("Welcome to my simple OS! \nType some text and I'll echo it back for you: ", 4);
gets(input);
k_printf("You typed: %s", 6);
PS: Yes, I know it's unsafe to use gets() instead of fgets(), but I haven't gotten far enough into development where it matters yet.
Anyone know how to fix this/what the problem even is? thanks!



