标签:soc ash 空间 obj star 技术分享 程序 常用 mod
在这张图中可以看出S5PV210的启动可大致分为五个步骤
#define WTCON 0xE2700000 #define SVC_STACK 0xD0037D80 // 把_start链接属性改为外部,这样其他文件就可以看见_start了 .global _start _start: // 第1步:关看门狗(向WTCON的bit5写入0即可),不是所有的BL0都关看门狗 ldr r0, =WTCON ldr r1, =0x0 str r1, [r0] // 第2步:设置SVC栈 默认使用满减栈 ldr sp, =SVC_STACK // 第3步:开/关icache mrc p15,0,r0,c1,c0,0; // 读出cp15的c1到r0中 //bic r0, r0, #(1<<12) // bit12 置0 关icache orr r0, r0, #(1<<12) // bit12 置1 开icache mcr p15,0,r0,c1,c0,0; // 第4步:调用入口函数 bl entry
链接脚本究竟要做什么?
链接脚本其实是个规则文件,他是程序员用来指挥链接器工作的。
链接器会参考链接脚本,并且使用其中规定的规则来处理.o文件中那些段,将其链接成一个可执行程序。
链接脚本的关键内容有2部分:段名 + 地址(作为链接地址的内存地址)
链接脚本的内容:
link.lds
SECTIONS { . = 0xd0020010; .text : { start.o * (.text) } .data : { * (.data) } .bss : { * (.bss) } }
NAME=led BIN=$(NAME).bin ELF=$(NAME).elf OBJ=start.o led.o CC=arm-linux-gcc LD=arm-linux-ld CFLAGS=-march=armv5te -nostdlib LDFLAGS=-nostartfiles -nostdlib OBJCOPY=arm-linux-objcopy bin:elf $(OBJCOPY) -O binary $(ELF) $(BIN) cp $(BIN) ~/shared/image/ elf:$(OBJ) $(LD) -T link.lds $(LDFLAGS) $(OBJ) -o $(ELF) %.o:%.c $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f $(OBJ) $(ELF) $(BIN)
标签:soc ash 空间 obj star 技术分享 程序 常用 mod
原文地址:https://www.cnblogs.com/xiehuan-blog/p/9712470.html