I.MX6UL裸机开发(五)—— BSP工程管理

1、在工程目录下创建4个文件夹:
(1)bsp:存放驱动文件
(2)imx6ul:存放跟芯片有关的文件,比如NXP官方的SDK库文件
(3)obj:存放编译生成的.o文件
(4)project:存放start.S和main.c文件,也就是应用文件

2、BSP工程的Makefile:

CROSS_COMPILE 	?= arm-linux-gnueabihf-		#交叉编译工具
TARGET		  	?= bsp						#目标名字

CC 				:= $(CROSS_COMPILE)gcc		#编译工具
LD				:= $(CROSS_COMPILE)ld		#链接工具
OBJCOPY 		:= $(CROSS_COMPILE)objcopy	#格式转换工具
OBJDUMP 		:= $(CROSS_COMPILE)objdump	#反汇编工具

INCDIRS 		:= imx6ul \					#头文件目录
			   bsp/clk \
			   bsp/led \
			   bsp/delay 
			   			   
SRCDIRS			:= project \				#源文件目录
			   bsp/clk \
			   bsp/led \
			   bsp/delay 		  	   

INCLUDE			:= $(patsubst %, -I %, $(INCDIRS))	#给INCDIRS下的文件添加-I,指明头文件目录需要加上-I
SFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))	#提取工程下的所有.S文件(包含目录)
CFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))	#提取工程下的所有.c文件(包含目录)

SFILENDIR		:= $(notdir  $(SFILES))		#提取工程下的所有.S文件(不包含目录)
CFILENDIR		:= $(notdir  $(CFILES))		#提取工程下的所有.c文件(不包含目录)

SOBJS			:= $(patsubst %, obj/%, $(SFILENDIR:.S=.o))		#将SFILENDIR下所有.S文件替换为.o文件,再加上obj/
COBJS			:= $(patsubst %, obj/%, $(CFILENDIR:.c=.o))		#将CFILENDIR下所有.c文件替换为.o文件,再加上obj/
OBJS			:= $(SOBJS) $(COBJS)	#OBJS是SOBJS和COBJS的集合

VPATH			:= $(SRCDIRS)	#VPATH指定SRCDIRS为源文件搜索目录

.PHONY: clean	#指定伪目标clean

$(TARGET).bin : $(OBJS)	#将.o文件编译成.bin文件
	$(LD) -Timx6ul.lds -o $(TARGET).elf $^				#将.o文件链接成.elf文件
	$(OBJCOPY) -O binary -S $(TARGET).elf $@			#将.elf文件格式转换成.bin文件
	$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis	#将.elf反汇编成.dis文件

$(SOBJS) : obj/%.o : %.S	#将.S文件编译成.o文件
	$(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<
$(COBJS) : obj/%.o : %.c	#将.c文件编译成.o文件
	$(CC) -Wall -nostdlib -c -O2  $(INCLUDE) -o $@ $<

clean:		#删除编译过程中生成的文件
	rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)

3、链接文件:

SECTIONS{
	. = 0X87800000;
	.text :
	{
		obj/start.o 
		*(.text)
	}
	.rodata ALIGN(4) : {*(.rodata*)}     
	.data ALIGN(4)   : { *(.data) }    
	__bss_start = .;    
	.bss ALIGN(4)  : { *(.bss)  *(COMMON) }    
	__bss_end = .;
}

 

你可能感兴趣的:(I.MX6UL,嵌入式,linux)