Sto scrivendo un piccolo, anzi piccolissimo, bootloader per un mio
microkernel in modalita protetta . Tutto il codice è scritto per andare
sotto x86.
Ho già progettato il microkernel, ma sono bloccato al bootloader. Il
bootloader (per adesso) consiste in un settore di avvio che a sua volta
carica
un elf32 a 0x100000 . Con ld gli aggiunto la rilocazione
(-Ttext=0x100000) e lo ho compilato in formato completamente binario
(--oformat=binary) .
Soltanto che quando jumpo nel codice del stage2 del bootloader, bochs
esce con un errore del genere: Prefetch queue running in bogus memory .
Penso significhi che il mio programma va per le verze ....
Ma non capisco il perche . Per ora lo Stage2 è formato da una sola
funzione (_start) con dentro queste linee di codice:
void _start()
{
unsigned char* VideoMem = (unsigned char*)0xB8000; //
Puntatore alla memoria video
// Stampa sul video la scritta 'PM'
VideoMem[0] = 'P';
VideoMem[1] = 0x7;
VideoMem[2] = 'M';
VideoMem[3] = 0x7;
// Loop forever
for (;;) { };
};
In questa funzione chiamo niente e non faccio niente ... Insomma,
proprio non so perchè non debba andare. Dimenticavo: nella GDT ci sono
solo 2
entry: un segmento lineare da 4gb, 32bit, data e un segmento lineare da
4gb,32bit, code . Entrambi con priv 0 ... Tutti i registri dati sono
caricati con il
segmento dati lineare. Non ho abilitato il paging ...
Se qualcuno è in grado di darmi una mano, ne sarei molto molto molto
felice ...
Grazie in anticipo ....
Paolo
-- Per iscriversi (o disiscriversi), basta spedire un messaggio con SOGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx