注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
懒猫爱飞的个人空间 https://home.eeworld.com.cn/space-uid-238351.html [收藏] [复制] [分享] [RSS]
日志

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

已有 1401 次阅读2017-3-21 16:52 |个人分类:linux学习日志| Linux, 开发

版权声明:本文为博主原创文章,未经博主允许不得转载,交流QQ:2912615383

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

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

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

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

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

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

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

     把bootloader的makefile贴出来,学习一下吧,这个是裸机程序用的bootloader,不是uboot,后面日志中会记录关于uboot的学习。

     

  1. #  
  2. # Locating the root directory  
  3. # 定位到starterware的根目录,ROOT是声明的变量  
  4. #  
  5. ROOT=../../../../../../  
  6.   
  7. #  
  8. # Device and EVM definitions  
  9. # 定义设备和开发板版本,用于路径搜索  
  10. # DEVICE与EVM是声明的变量  
  11. #  
  12. DEVICE=am335x  
  13. EVM=beaglebone  
  14.   
  15. #  
  16. # Include the makefile definitions. This contains compiler, linker and  
  17. # archiver definitions and options  
  18. # 包含makedefs文件,该文件内定义了相关路径  
  19. # ${ROOT}是调用变量  
  20. #  
  21. include ${ROOT}/build/armv7a/gcc/makedefs  
  22.   
  23. #  
  24. # Target Directories that need to be built  
  25. # 指定编译所依赖的文件路径,该路径在上述makedefs中被定义  
  26. #  
  27. DIRS=${DRIVERS_BLD} ${PLATFORM_BLD} ${UTILITY_BLD} ${MMCSDLIB_BLD} ${NANDLIB_BLD}  
  28.   
  29. #  
  30. # The application directory and name  
  31. # 指定生成的文件名  
  32. #  
  33. APPDIR=bootloader  
  34. APPNAME=boot  
  35.   
  36. #  
  37. # Where the bootloader will be loaded to by the ROM code  
  38. # starting 1Kbyte cannot be used due to hardware limitation  
  39. # 生成的文件被装载的空间,重要的变量  
  40. START_ADDR=0x402F0400  
  41.   
  42. #  
  43. # Application Location  
  44. #  
  45. APP=${ROOT}bootloader/  
  46. APP_BIN=${ROOT}/binary/${TARGET}/${COMPILER}/${DEVICE}/sbc8600/$(APPDIR)  
  47.   
  48. #  
  49. # Application source files  
  50. # 应用源文件    
  51. #  
  52. COMMON=$(APP)src/bl_main.c\  
  53.        $(APP)src/bl_am335x.c\  
  54.        $(APP)src/bl_copy.c\  
  55.        $(APP)src/bl_pmI2c.c\  
  56.        $(APP)src/bl_pmic.c\  
  57.        $(APP)src/$(TARGET)/gcc/*.S  
  58.   
  59. #  
  60. # 如果是从SD卡启动,则需要编译下面的源文件  
  61. #  
  62. ifeq ($(BOOT), MMCSD)  
  63. SOURCE=$(APP)/src/bl_hsmmcsd.c \  
  64.        $(FATFS_SRC)/src/ff.c       \  
  65.        $(FATFS_SRC)/port/fat_mmcsd.c  
  66. endif  
  67.   
  68. #  
  69. # 如果是从UART卡启动,则需要编译下面的源文件  
  70. #  
  71. ifeq ($(BOOT), UART)  
  72. SOURCE=$(APP)/src/bl_uart.c \  
  73.        ${ROOT}/third_party/xmodem/xmodem.c \  
  74.        ${ROOT}/third_party/xmodem/crc16.c  
  75. endif  
  76.   
  77. APP_SRC=$(SOURCE) $(COMMON)  
  78.   
  79. #  
  80. # Required library files  
  81. # 所需要的库文件  
  82. #  
  83. APP_LIB=-ldrivers  \  
  84.     -lutils    \  
  85.     -lplatform \  
  86.     -lmmcsd   
  87.   
  88. #  
  89. # Rules for building the application and library  
  90. # 运行编译  
  91. #  
  92. all: debug release  
  93.   
  94. debug:  
  95.     make TARGET_MODE=debug lib  
  96.     make TARGET_MODE=Debug bin  
  97.   
  98. release:  
  99.     make TARGET_MODE=release lib  
  100.     make TARGET_MODE=Release bin  
  101.   
  102. lib:  
  103.     @for i in ${DIRS};              \  
  104.     do                      \  
  105.         if [ -f $${i}/makefile ] ;          \  
  106.         then                      \  
  107.             make $(TARGET_MODE) -C 
    i||exit
    ?; \  
  108.         fi;                    \  
  109.     done;  
  110.   
  111.   
  112. bin:  
  113.     $(CC)  $(CFLAGS) $(APP_SRC)  
  114.     @mkdir -p $(TARGET_MODE)/  
  115.     @mv *.o* $(TARGET_MODE)/  
  116.     $(LD) ${LDFLAGS} ${LPATH} -o $(TARGET_MODE)/$(APPNAME).out -Map $(TARGET_MODE)/$(APPNAME).map \  
  117.           $(TARGET_MODE)/*.o  --defsym BOOT_START_ADDR=$(START_ADDR) -T $(APPNAME).lds $(APP_LIB) -lc -lgcc $(APP_LIB) -lc -lgcc   
  118.     @mkdir -p $(APP_BIN)/$(TARGET_MODE)  
  119.     @cp $(TARGET_MODE)/$(APPNAME).out $(APP_BIN)/$(TARGET_MODE)/$(APPNAME).out  
  120.     $(BIN) $(BINFLAGS) $(APP_BIN)/$(TARGET_MODE)/$(APPNAME).out \  
  121.                $(APP_BIN)/$(TARGET_MODE)/$(APPNAME).bin   
  122.     cd $(ROOT)/tools/ti_image/; gcc tiimage.c -o a.out; cd -   
  123.            $(ROOT)/tools/ti_image/a.out $(START_ADDR) $(BOOT) \  
  124.                $(APP_BIN)/$(TARGET_MODE)/$(APPNAME).bin \  
  125.                $(APP_BIN)/$(TARGET_MODE)/$(APPNAME)_ti.bin; rm -rf $(ROOT)/tools/ti_image/a.out;  
  126.   
  127.   
  128. #  
  129. # Rules for cleaning  
  130. #  
  131. clean:  
  132.     @rm -rf Debug Release $(APP_BIN)/Debug $(APP_BIN)/Release  
  133.   
  134. clean+: clean  
  135.     @make TARGET_MODE=clean lib  

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

   

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

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

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

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章