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?
risposta
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.
Copia-e-incolla non funziona qui, ma indica l'errore: sembra "... kernel-using% 5F03.html", ma dovrebbe essere "... kernels-using_03.html". –
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. –
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. –
- 1. Come si costruisce un Visual Studio come l'interfaccia utente?
- 2. Visual Studio si blocca all'apertura del progetto
- 3. Come si avvia un'applicazione CUDA in Visual Studio 2010?
- 4. istruzioni su come compilare usando sassy studio in visual studio
- 5. Come eseguire il debug nel codice del kernel CUDA utilizzando Visual Studio 2008?
- 6. ricevendo un sacco di avvertimenti quando si costruisce con gli obiettivi in Visual Studio 2010
- 7. Come si costruisce una ConstraintViolationException?
- 8. File mancante di darice.cub Wix quando si costruisce da Visual Studio 2010
- 9. Come si annulla una build in corso in Visual Studio?
- 10. Visual Studio 2012 Remote Debug Kernel Virtual Machine
- 11. Come si costruisce una libreria di importazione (.lib) E una DLL in Visual C++?
- 12. Come "sbarazzarsi di" $ (SolutionDir) quando si costruisce vs progetto da esterno studio
- 13. Visual Studio si chiude sempre
- 14. Come rilevare se si costruisce con disinfettante indirizzi quando si costruisce con gcc 4.8?
- 15. Come compilare un modulo del kernel Linux usando -std = gnu99?
- 16. Visual Studio 2015 che non rileva Visual Studio 2010
- 17. Visual Studio che si blocca all'apertura del progetto
- 18. Come distribuire i moduli del kernel usando un RPM?
- 19. avviso del compilatore CS1607 quando si costruisce la versione x64
- 20. microsoft visual studio 2008 si basa tenere in mancanza
- 21. Come si costruisce questo xml in C#
- 22. Progetto Visual Studio 2010 in Visual Studio 2012
- 23. come posso creare un driver usando Visual Studio?
- 24. Il comando patch del kernel si blocca
- 25. Modifica del tema di Visual Studio 2010
- 26. Visual Studio/ReSharper formattazione del codice - C#
- 27. Come si profila e si ottimizzano i kernel CUDA?
- 28. creazione del file .lib in Visual Studio
- 29. Come si può navigare nello stack di chiamate in Visual Studio usando solo la tastiera?
- 30. URL.Action include id quando si costruisce l'URL
Sei davvero sicuro di voler percorrere il percorso MSVC? È un ottimo compilatore, ma penso che sarebbe molto più semplice con GCC/MingW –
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. –