代码调试平台:
MacBook pro
i386-elf-gcc
在对代码ucorebook tag proj5 进行编译调试的过程中,发现bootload 由于增加了物理内存探测代码,所以导致无法进行下去
但是对比较新的版本进行make,发现即使增加了内存探测功能汇编代码,但是仍然可以我编译通过;
对比二者的代码发现存在以下区别
# create bootblock
bootfiles = $(call listf_cc,boot)
$(foreach f,$(bootfiles),$(call cc_compile,$(f),$(CC),$(CFLAGS) -Os -nostdinc))bootblock = $(call totarget,bootblock)$(bootblock): $(call toobj,boot/bootasm.S) $(call toobj,$(bootfiles)) | $(call totarget,sign)@echo + ld $@
# $(V)$(LD) $(LDFLAGS) -N -e start -Ttext 0x7C00 $^ -o $(call toobj,bootblock)$(V)$(LD) $(LDFLAGS) -N -T tools/boot.ld $^ -o $(call toobj,bootblock)@$(OBJDUMP) -S $(call objfile,bootblock) > $(call asmfile,bootblock)@$(OBJCOPY) -S -O binary $(call objfile,bootblock) $(call outfile,bootblock)@$(call totarget,sign) $(call outfile,bootblock) $(bootblock)$(call create_target,bootblock)
boot.ld 文件代码
OUTPUT_FORMAT("elf32-i386")
OUTPUT_ARCH(i386)SECTIONS {
. = 0x7C00;.startup : {
*bootasm.o(.text)} .text : {
*(.text) }.data : {
*(.data .rodata) }/DISCARD/ : {
*(.eh_*) }
}
具体为什么替换这块代码就能够减少bootload.out 100字节的大小的
我也不知道是为什么,这个要留在后边进行分析了。