2009-03-20 6 views
6

Mi piacerebbe creare un kernel incorporato per una macchina x86 usando Visual C++. Ho alcuni file di codice assembly e C da compilare e mi piacerebbe collegarli tutti insieme in un modo che sia compatibile con un bootloader Multiboot come GRUB.Come si costruisce un'immagine del kernel usando Visual Studio?

+0

Sei davvero sicuro di voler percorrere il percorso MSVC? È un ottimo compilatore, ma penso che sarebbe molto più semplice con GCC/MingW –

+0

Penso che GCC/MinGW genererà anche eseguibili PE. Dovrò apportare le modifiche necessarie per ELF a PE in entrambi gli ambienti. VS è proprio un piacere usare, penso che lo preferirei. –

risposta

6

OSDev ha un wiki entry on Visual Studio, che potrebbe fornire qualche informazione, in particolare con i link ai Kaushik Srenevasan di blogentries sul tema del kernel PE progettate per essere caricato da bootloader multiboot-based (come GRUB).

un paio di grandi, ampio colpi cose che dovreste sapere:

  • Nell'intestazione multiboot, è necessario utilizzare il kludge AOUT.
  • È necessario specificare l'argomento/BASE: 0x100000 sul linker, quindi il codice binario finale è basato sul punto in cui il bootloader lo inserisce.
  • Il punto di ingresso del tuo kernel (di solito chiamato "kmain") deve avere __declspec(noreturn) su di esso e sarà necessario eseguire un __asm { hlt } anziché restituirlo.
+0

Copia-e-incolla non funziona qui, ma indica l'errore: sembra "... kernel-using% 5F03.html", ma dovrebbe essere "... kernels-using_03.html". –

+0

Non so perché, ma sto copiando e incollandolo dalla barra degli indirizzi qui, e ha un letterale '_' quando modifico - SO sembra che lo stia sostituendo per qualsiasi motivo. –

+0

Ok, ho inviato una e-mail al Team SO, e hanno sottolineato che ci sono altri modi per creare un collegamento, quindi l'ho passato a uno che funziona. –