下面放一段可以启动的,位置无关的arm bootloader简易启动:
2016-06-29 17:18
405 查看
非常好,可借鉴。
下面放一段可以启动的,位置无关的bootloader启动:
//Makefile
FILE_NAME = zkj-loader
SCRIPT_FILE = zkjloader.lds
CROSS_COMPILE=arm-linux-
###################################################
#C compiler
CC = $(CROSS_COMPILE)gcc
#Assembler
AS = $(CROSS_COMPILE)as
#Linker
LD = $(CROSS_COMPILE)ld
#Liblary
AR = $(CROSS_COMPILE)ar
#Object dump
OBJDMP = $(CROSS_COMPILE)objdump
#Object copy
OBJCOPY = $(CROSS_COMPILE)objcopy
#clean
CL = rm -f
###################################################
OBJ_FILE = \
start.o \
main.o
.PHONY: all
all:$(OBJ_FILE)
$(LD) $(OBJ_FILE) -T $(SCRIPT_FILE) -o $(FILE_NAME).elf -Map $(FILE_NAME).map
$(OBJDMP) -S -d $(FILE_NAME).elf > $(FILE_NAME)_disassemble.txt
$(OBJCOPY) -O binary $(FILE_NAME).elf $(FILE_NAME).bin
@echo ========== zkj-loader Compile Complete==========
.PHONY: clean
clean:
$(CL) *.o *.elf *.bin *.txt *.map
/////////////////////////////////////////////////////////////////////////////////////////////////
//start.s
.global _start
.global c_runtime_go
_start:
ldr sp,=0xe633fffc
/*
* set the cpu to SVC32 mode , ke yao ke bu yao
*/
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr,r0
bl c_runtime_go
loop:
b loop
/////////////////////////////////////////////////////////////////////////////////////////////////
//main.c
//#include "board.h"
#define OUTDT3 0xE6053008 //GP3_26:TP139
#define INOUTSEL3 0xE6053004 //GP3_26:TP139
extern void c_runtime_go(void);
void c_runtime_go(void)
{
*(volatile unsigned int *)(INOUTSEL3) = 0xFFFFFFFF;
*(volatile unsigned int *)(OUTDT3) = 0xFFFFFFFF;
//*(volatile unsigned int *)(OUTDT3) = 0;
while(1);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//zkjloader.lds
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0xe6300000;
. = ALIGN(4);
.text :
{
_start = .;
start.o (.text*)
*(.text*)
}
}
下面放一段可以启动的,位置无关的bootloader启动:
//Makefile
FILE_NAME = zkj-loader
SCRIPT_FILE = zkjloader.lds
CROSS_COMPILE=arm-linux-
###################################################
#C compiler
CC = $(CROSS_COMPILE)gcc
#Assembler
AS = $(CROSS_COMPILE)as
#Linker
LD = $(CROSS_COMPILE)ld
#Liblary
AR = $(CROSS_COMPILE)ar
#Object dump
OBJDMP = $(CROSS_COMPILE)objdump
#Object copy
OBJCOPY = $(CROSS_COMPILE)objcopy
#clean
CL = rm -f
###################################################
OBJ_FILE = \
start.o \
main.o
.PHONY: all
all:$(OBJ_FILE)
$(LD) $(OBJ_FILE) -T $(SCRIPT_FILE) -o $(FILE_NAME).elf -Map $(FILE_NAME).map
$(OBJDMP) -S -d $(FILE_NAME).elf > $(FILE_NAME)_disassemble.txt
$(OBJCOPY) -O binary $(FILE_NAME).elf $(FILE_NAME).bin
@echo ========== zkj-loader Compile Complete==========
.PHONY: clean
clean:
$(CL) *.o *.elf *.bin *.txt *.map
/////////////////////////////////////////////////////////////////////////////////////////////////
//start.s
.global _start
.global c_runtime_go
_start:
ldr sp,=0xe633fffc
/*
* set the cpu to SVC32 mode , ke yao ke bu yao
*/
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr,r0
bl c_runtime_go
loop:
b loop
/////////////////////////////////////////////////////////////////////////////////////////////////
//main.c
//#include "board.h"
#define OUTDT3 0xE6053008 //GP3_26:TP139
#define INOUTSEL3 0xE6053004 //GP3_26:TP139
extern void c_runtime_go(void);
void c_runtime_go(void)
{
*(volatile unsigned int *)(INOUTSEL3) = 0xFFFFFFFF;
*(volatile unsigned int *)(OUTDT3) = 0xFFFFFFFF;
//*(volatile unsigned int *)(OUTDT3) = 0;
while(1);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//zkjloader.lds
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0xe6300000;
. = ALIGN(4);
.text :
{
_start = .;
start.o (.text*)
*(.text*)
}
}
相关文章推荐
- 后缀表达式计算算术表达式
- Hadoop经典案例Spark实现(一)——通过采集的气象数据分析每年的最高温度
- Thinkphp批量更新数据的方法汇总
- Swift学习—字符串&数组&字典
- IdHttpServer实现webservice
- Tarball-百度百科
- winpcap实现syn攻击
- 获取路径
- 专题四 · 1003
- 边缘检测与轮廓检测有什么区别?
- spark 学习笔记1
- 每天一个linux命令(41):route命令
- 南阳oj--素数距离问题
- 如何删除RMAN的CONFIGURE条目
- iOS-图片倒圆角的三种方式
- scala言语基础学习八
- DATASNAP REST WEBSERVICES中间件如何跨平台使用
- 如何删除RMAN的CONFIGURE条目
- 怎么在eclipse中安装properties插件使其显示中文
- MyBatis 常识-关联表查询