公司的项目,处理器用的是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