compilirane
2 отговора
138 прегледа
compilirane
kak triabva da kompiliram edna prosta programka sas gcc, taka che da moze da se startira bez OS, lilo da ia zarezda i startira ?
podobno na memtest86, na kojato razglezdam kodova sega
ili po-prosto?
podobno na memtest86, na kojato razglezdam kodova sega
ili po-prosto?
Re: compilirane
mi trjabwa da si napravish ruchna crt0.s sektzia - ili da minesh wuobshte bez neja.
tursi link-script w kojto ima w nego neshto ot tozi rod:
tursi link-script w kojto ima w nego neshto ot tozi rod:
_stack_size = 0x00100000;
_stack = -1;
_heap_size = -1;
GROUP(-lc -lkernl -lgcc)
ENTRY(ENTRYPOINT)
SECTIONS {
.text 0x00100000: {
crt0.o(.text)
*(.text)
*(.gnu.linkonce.t*)
}
.reginfo : { KEEP(*(.reginfo)) }
.data ALIGN(128): { *(.data) *(.vutext) *(.vudata) *(.gnu.linkonce.d*) }
.sndata ALIGN(128): { sn_dll_header_root = .; . += 16384; }
.rodata ALIGN(128): { *(.rodata) *(.gnu.linkonce.r*) }
.rdata ALIGN(128): { *(.rdata) }
.gcc_except_table ALIGN(128): { *(.gcc_except_table) }
_gp = ALIGN(128) + 0x7ff0;
.lit8 ALIGN(128): { *(.lit8) }
.lit4 ALIGN(128): { *(.lit4) }
.sdata ALIGN(128): { *(.sdata) *(.gnu.linkonce.s.*) }
.sbss ALIGN(128): { _fbss = .; *(.sbss) *(.scommon) }
.bss ALIGN(128): { *(.bss) *(.vubss) }
/*
.stack ALIGN(128)(NOLOAD): {
_stack = .;
. += _stack_size;
}
*/
end = .;
_end = .;
/* _heap_end = . + _heap_size */
.spad 0x70000000: {
crt0.o(.spad)
*(.spad)
}
}
един приятел прави такова чудо
ама номера е в линкера, на него трябва да му се укаже да генерира "чист" код. а иначе освен това трябва да си насочиш boot сектора да зарежда твоя бин файл. за съжаление не знам подробности, но му я гледах програмката на дискета, буутва от нея и тръгва. с него се мъчихме веднъж да видим линкера на vc дали не може да го направи, ама не успяхме.