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