Linux学习日志(5) - am335x开发BootLoad的makefile学习

        公司的项目,处理器用的是AM335X,核心板是用深圳某家公司的,所以要学习linux,俺对linux是个大白,但项目所驱使,不得不学,这两天在vmware上折腾安装ubuntu16.04,

先安装的是64位的系统,用着也是蛮爽的,可是在安装ARM交叉编译环境时会报错,按照给的文档安装还是出错,于是重新安装系统,还是会出错,最后没办法找售后,售后折腾

了一下行,说别的客户没有这个问题,然后,这样指导一下让我试试,那样指导一下让我试试,搞了一下午也没有搞定。

        晚上7点多的时候,售后说可能是系统的问题(不得不说售后这人还是蛮负责的,点个赞微笑),我一看我的是64位系统,可能与系统有关,今天果断安装ubuntu 16.04

 32bit,再次安装交叉编译环境,一次OK,非常完美。

        然后按文档中写的步骤,试着编译了一下例程,编译没有问题,可以没找到生成了bin文件,于是又开始上网查资料,问网友,最后终于知道原来是生成在了别的目录……

后来研究了一下makfile文件,果真是设置在了别的文件夹下,哎,怪自己是生人,当然,文档中没有指明也是一大失误,毕竟我是新手,好多地方可能会忽略,好吧,不说了,

把bootloader的makefile贴出来,学习一下吧。

  

#
# Locating the root directory
# 定位到starterware的根目录,ROOT是声明的变量
#
ROOT=../../../../../../

#
# Device and EVM definitions
# 定义设备和开发板版本,用于路径搜索
# DEVICE与EVM是声明的变量
#
DEVICE=am335x
EVM=beaglebone

#
# Include the makefile definitions. This contains compiler, linker and
# archiver definitions and options
# 包含makedefs文件,该文件内定义了相关路径
# ${ROOT}是调用变量
#
include ${ROOT}/build/armv7a/gcc/makedefs

#
# Target Directories that need to be built
# 指定编译所依赖的文件路径,该路径在上述makedefs中被定义
#
DIRS=${DRIVERS_BLD} ${PLATFORM_BLD} ${UTILITY_BLD} ${MMCSDLIB_BLD} ${NANDLIB_BLD}

#
# The application directory and name
# 指定生成的文件名
#
APPDIR=bootloader
APPNAME=boot

#
# Where the bootloader will be loaded to by the ROM code
# starting 1Kbyte cannot be used due to hardware limitation
# 生成的文件被装载的空间,重要的变量
START_ADDR=0x402F0400

#
# Application Location
#
APP=${ROOT}bootloader/
APP_BIN=${ROOT}/binary/${TARGET}/${COMPILER}/${DEVICE}/sbc8600/$(APPDIR)

#
# Application source files
# 应用源文件  
#
COMMON=$(APP)src/bl_main.c\
       $(APP)src/bl_am335x.c\
       $(APP)src/bl_copy.c\
       $(APP)src/bl_pmI2c.c\
       $(APP)src/bl_pmic.c\
       $(APP)src/$(TARGET)/gcc/*.S

#
# 如果是从SD卡启动,则需要编译下面的源文件
#
ifeq ($(BOOT), MMCSD)
SOURCE=$(APP)/src/bl_hsmmcsd.c \
       $(FATFS_SRC)/src/ff.c       \
       $(FATFS_SRC)/port/fat_mmcsd.c
endif

#
# 如果是从UART卡启动,则需要编译下面的源文件
#
ifeq ($(BOOT), UART)
SOURCE=$(APP)/src/bl_uart.c \
       ${ROOT}/third_party/xmodem/xmodem.c \
       ${ROOT}/third_party/xmodem/crc16.c
endif

APP_SRC=$(SOURCE) $(COMMON)

#
# Required library files
# 所需要的库文件
#
APP_LIB=-ldrivers  \
	-lutils    \
	-lplatform \
	-lmmcsd 

#
# Rules for building the application and library
# 运行编译
#
all: debug release

debug:
	make TARGET_MODE=debug lib
	make TARGET_MODE=Debug bin

release:
	make TARGET_MODE=release lib
	make TARGET_MODE=Release bin

lib:
	@for i in ${DIRS};				\
	do						\
		if [ -f $${i}/makefile ] ;		    \
		then					  \
			make $(TARGET_MODE) -C $${i} || exit $$?; \
		fi;					   \
	done;


bin:
	$(CC)  $(CFLAGS) $(APP_SRC)
	@mkdir -p $(TARGET_MODE)/
	@mv *.o* $(TARGET_MODE)/
	$(LD) ${LDFLAGS} ${LPATH} -o $(TARGET_MODE)/$(APPNAME).out -Map $(TARGET_MODE)/$(APPNAME).map \
	      $(TARGET_MODE)/*.o  --defsym BOOT_START_ADDR=$(START_ADDR) -T $(APPNAME).lds $(APP_LIB) -lc -lgcc $(APP_LIB) -lc -lgcc 
	@mkdir -p $(APP_BIN)/$(TARGET_MODE)
	@cp $(TARGET_MODE)/$(APPNAME).out $(APP_BIN)/$(TARGET_MODE)/$(APPNAME).out
	$(BIN) $(BINFLAGS) $(APP_BIN)/$(TARGET_MODE)/$(APPNAME).out \
               $(APP_BIN)/$(TARGET_MODE)/$(APPNAME).bin 
	cd $(ROOT)/tools/ti_image/; gcc tiimage.c -o a.out; cd - 
	       $(ROOT)/tools/ti_image/a.out $(START_ADDR) $(BOOT) \
               $(APP_BIN)/$(TARGET_MODE)/$(APPNAME).bin \
               $(APP_BIN)/$(TARGET_MODE)/$(APPNAME)_ti.bin; rm -rf $(ROOT)/tools/ti_image/a.out;


#
# Rules for cleaning
#
clean:
	@rm -rf Debug Release $(APP_BIN)/Debug $(APP_BIN)/Release

clean+: clean
	@make TARGET_MODE=clean lib

      水平有限,只能注释这么多了, 在网上下了《跟我一起学习makefile》,正在学习,这次先做个笔记,慢慢研究。

   

最后,再吼一下俺的口号:

每天进步一点点,开心多一点^_^

--2017年3月8日 15:39:38






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值