asm+D build bootloader

lobo via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Oct 27 20:03:04 PDT 2015


On Tuesday, 27 October 2015 at 12:13:13 UTC, guodemone wrote:
> sorry,My english is poot.
>
> file asm.h
>
> [...]

Can ldc work with C header files? I don't think it can but I 
could be wrong.

Here's how I build my 32-bit bootloader and link with my kernel 
main (you will have to replace names etc.):

---
nasm -felf -o kickstart32.o kickstart32.s (I don't have an asm.h)
gdc -m32 -gdwarf-2 -nostdlib -fPIC -c -o kernel32.main.o kmain.d
ld -nodefaultlibs -melf_i386 -z max-page-size=0x1000 -T 
linker32.ld -o kernel32.bin kickstart32.o kernel32.main.o
---

For this build setup you will need a linker script. Here's mine 
in case you don't have one. 'kickstart' is the entry point in my 
kickstart.s. Replace names and offsets as required for your code.


---
/* Use -melf_i386 or -melf64_x86-64
  * to specify the architecture
  * ld -nodefaultlibs -melf_i386 -z max-page-size=0x1000 -T 
<linker_script> -o <output_binary>
*/
ENTRY (kickstart)

SECTIONS{
     . = 0x00100000;

     .text :{
         code = .; _code = .; __code = .;
         *(.text)
         *(.rodata)
     }

     .rodata ALIGN (0x1000) : {
         *(.rodata)
     }

     .data ALIGN (0x1000) : {
         data = .; _data = .; __data = .;
         *(.data)
         start_ctors = .; *(.ctors)   end_ctors = .;
         start_dtors = .; *(.dtors)   end_dtors = .;
     }

     .bss : {
         sbss = .;
         bss = .; _bss = .; __bss = .;
         *(COMMON)
         *(.bss)
         ebss = .;
     }
     end = .; _end = .; __end = .;
}
---

I got a lot of info from these sites:

https://www.cs.cmu.edu/~410-s07/p4/p4-boot.pdf
https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders

http://wiki.osdev.org/Bare_bones

(NOTE: wiki.osdev.org has a lot of incorrect information, but it 
was useful as a starting point when I got stuck moving to a 
64-bit kernel)


bye,
lobo


More information about the Digitalmars-d-learn mailing list