OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 392|回复: 0

关于.ld和.dis文件的入口不正确

[复制链接]

6

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2021-10-1
在线时间
16 小时
发表于 2024-2-10 17:11:17 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 愈之 于 2024-2-10 17:13 编辑

刚学到裸机bsp那一节,编译下载点灯都没有问题,LED闪烁没有问题。但是点开.dis文件发现0x87800000地址中并不是_start入口函数而是87800000 <_start-0x8>:
87800000:        8780025c                         ; <UNDEFINED> instruction: 0x8780025c
87800004:        8780025c                         ; <UNDEFINED> instruction: 0x8780025c

87800008 <_start>:



如果我用arm-none-eabi编译器的话,则是
87800000 <_start-0x8>:
87800000:        87800320         strhi        r0, [r0, r0, lsr #6]
87800004:        87800320         strhi        r0, [r0, r0, lsr #6]

87800008 <_start>:


为什么0x87800000不是start函数?我参考stm32上电流程,觉得应该放sp的初始化值。但是应该只要4个字节就可以了,为什么有8个字节?
还有.ld文件中的ENTRY是指明入口函数,那他的作用究竟体现在哪里?

关键代码如下

startup_imx6ull.S
.word _sbss
.word _ebss

.global _start

_start:
    MRS R0, CPSR
    BIC R0, #0x1F
    ORR R0, #0x13
    MSR CPSR, R0

    LDR R2, =_sbss
    B LoopFillZerobss

FillZerobss:
    MOVS R3, #0
    STR R3, [R2], #4

LoopFillZerobss:
    LDR R3, = _ebss
    CMP R2, R3
    BCC FillZerobss

    LDR SP, =0x80200000
    BL SystemInit
    BL main



IMX6ULL_MCIMX6Y2_DDR3.ld
ENTRY(_start)

SECTIONS
{
    . = 0x87800000;

    .text :
    {
        . = ALIGN(4);
        obj/startup_imx6ull.o;
        *(.text)
        *(.text*)
        . = ALIGN(4);
    }

    .rodata :
    {
        . = ALIGN(4);
        *(.rodata)
        *(.rodata*)
        . = ALIGN(4);
    }

    .data :
    {
        . = ALIGN(4);
        *(.data)
        *(.data*)
        . = ALIGN(4);
    }

    .bss :
    {
        . = ALIGN(4);
        _sbss = .;
        __bss_start = _sbss;
        *(.bss)
        *(.bss*)
        *(COMMON)
        . = ALIGN(4);
        _ebss = .;
        __bss_end = _ebss;
    }
}


Makefile
COMPILER ?= arm-none-eabi-
TARGET ?= led

GCC := $(COMPILER)gcc
LD := $(COMPILER)ld
OBJCOPY := $(COMPILER)objcopy
OBJDUMP := $(COMPILER)objdump

INCDIRS := imx6ull\
                        project\
                        bsp/clk\
                        bsp/delay\
                        bsp/led
SRCDIRS := project\
                        imx6ull\
                        bsp/clk\
                        bsp/delay\
                        bsp/led
INCLUDE := $(patsubst %, -I %, $(INCDIRS))

SFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))

SFILENDIR := $(notdir  $(SFILES))
CFILENDIR := $(notdir  $(CFILES))

SOBJS := $(patsubst %, obj/%, $(SFILENDIR:.S=.o))
COBJS := $(patsubst %, obj/%, $(CFILENDIR:.c=.o))
OBJS := $(SOBJS) $(COBJS)

VPATH := $(SRCDIRS)

$(TARGET).bin : $(OBJS)
        $(LD) -TIMX6ULL_MCIMX6Y2_DDR3.ld -o $(TARGET).elf $^
        $(OBJCOPY) -O binary -S $(TARGET).elf $@
        $(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis

$(SOBJS) : obj/%.o : %.S
        $(GCC) -Wall -nostdlib -O0 $(INCLUDE) -c -o $@ $<

$(COBJS) : obj/%.o : %.c
        $(GCC) -Wall -nostdlib -O0 $(INCLUDE) -c -o $@ $<


clean :
        rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)

.PHONY : clean






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-10 21:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表