微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读

GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读

时间:11-26 来源:互联网 点击:

      1. ######
      2. #
      3. #CreateincludefileforMake
      4. #
      5. echo"ARCH=${arch}">config.mk
      6. echo"CPU=${cpu}">>config.mk
      7. echo"BOARD=${board}">>config.mk
      8. ["${vendor}"]&&echo"VENDOR=${vendor}">>config.mk
      9. ["${soc}"]&&echo"SOC=${soc}">>config.mk
      10. ######################################################################
      11. #上面几句的作用在注释中描述的很清楚
      12. #include/config.mk的文件如下:
      13. #ARCH=arm
      14. #CPU=arm920t
      15. #BOARD=smdk2410
      16. #VENDOR=samsung
      17. #SOC=s3c24x0
      18. ######################################################################
      19. #AssignboarddirectorytoBOARDIRvariable
      20. if[-z"${vendor}"];then
      21. BOARDDIR=${board}
      22. else
      23. BOARDDIR=${vendor}/${board}
      24. fi
      25. echo${BOARDDIR}
      26. #######################################################################
      27. #因为vendor变量不为空,所以执行else
      28. #BOARDDIR的值为samsung/s3c24x0
      29. ########################################################################
      30. #
      31. #Createboardspecificheaderfile
      32. #
      33. if["$APPEND"="yes"]#Appendtoexistingconfigfile
      34. then
      35. echo>>config.h
      36. else
      37. >config.h#Createnewconfigfile
      38. fi
      39. ########################################################################
      40. #在文件的最开头可以看到APPEND为no,所以这里我们在include文件夹下建立config.h文件
      41. #######################################################################
      42. echo"/*Automaticallygenerated-donotedit*/">>config.h
      43. echo${TARGETS}
      44. foriin${TARGETS};do
      45. i="`echo${i}|sed/=/{s/=//;q;};{s/$/1/;}`"
      46. echo"#defineCONFIG_${i}">>config.h;
      47. done
      48. ###################################################
      49. #这里我们TARGETS为空,上面不执行了
      50. ##################################################
      51. echo"#defineCONFIG_SYS_ARCH"${arch}"">>config.h
      52. echo"#defineCONFIG_SYS_CPU"${cpu}"">>config.h
      53. echo"#defineCONFIG_SYS_BOARD"${board}"">>config.h
      54. ["${vendor}"]&&echo"#defineCONFIG_SYS_VENDOR"${vendor}"">>config.h
      55. ["${soc}"]&&echo"#defineCONFIG_SYS_SOC"${soc}"">>config.h
      56. cat>config.h
      57. #defineCONFIG_BOARDDIRboard/$BOARDDIR
      58. #include
      59. #include
      60. #include
      61. #include
      62. #include
      63. EOF
      64. ######################################################
      65. #生成config.h文件如下:
      66. #/*Automaticallygenerated-donotedit*/
      67. ##defineCONFIG_SYS_ARCH"arm"
      68. ##defineCONFIG_SYS_CPU"arm920t"
      69. ##defineCONFIG_SYS_BOARD"smdk2410"
      70. ##defineCONFIG_SYS_VENDOR"samsung"
      71. ##defineCONFIG_SYS_SOC"s3c24x0"
      72. ##defineCONFIG_BOARDDIRboard/samsung/smdk2410
      73. ##include
      74. ##include
      75. ##include
      76. ##include
      77. ##include
      78. #####################################################
      79. exit0

      make xxx_config后,主要的变化是多了几个文件:

      1.include/asm --> arch/arm/include/arm

      2.include/asm/arch --> arch-s3c24x0

      3.include/asm/proc --> proc-armv
      4.在include目录下新建了config.mk文件,文件内容是ARCH CPU BOARD VENDOR SOC的定义

      5.在include目录下新建了config.h文件

      接着看make:

      给出部分makefile中的注释,主要是一些变量的定义:

      [cpp]view plaincopy

      1. VERSION=2012
      2. PATCHLEVEL=07
      3. SUBLEVEL=
      4. EXTRAVERSION=
      5. ifneq"$(SUBLEVEL)"""
      6. U_BOOT_VERSION=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
      7. else
      8. U_BOOT_VERSION=$(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
      9. endif
      10. ################################
      11. #定义U_BOOT_VERSION为2012.07
      12. #####################################
      13. TIMESTAMP_FILE=$(obj)include/generated/timestamp_autogenerated.h
      14. VERSION_FILE=$(obj)include/generated/version_autogenerated.h
      15. ###############################
      16. #因为obj为空,所以定义TIMESTAMP_FILE为include/generated/timestamp_autogenerated.h
      17. #定义VERSION_FILE为include/generated/version_autogenerated.h
      18. #****************
      19. HOSTARCH:=$(shelluname-m|
      20. sed-es/i.86/x86/
      21. -es/sun4u/sparc64/
      22. -es/arm.*/arm/
      23. -es/sa110/arm/
      24. -es/ppc64/powerpc/
      25. -es/ppc/powerpc/
      26. -es/macppc/powerpc/
      27. -es/sh.*/sh/)
      28. HOSTOS:=$(shelluname-s|tr[:upper:][:lower:]|
      29. sed-es/.*/cygwin/)
      30. #Setshelltobashifpossible,otherwisefallbacktosh
      31. SHELL:=$(shellif[-x"$$BASH"];thenecho$$BASH;
      32. elseif[-x/bin/bash];thenecho/bin/bash;
      33. elseechosh;fi;fi)
      34. exportHOSTARCHHOST

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top