build.sh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. #!/bin/bash -e
  2. SCRIPTS_DIR=`cd $(dirname $0); pwd -P`
  3. if [ ! -f "$SCRIPTS_DIR/$1.config" ]; then
  4. echo "Error! No such board config file $1.config."
  5. exit -1
  6. fi
  7. source $SCRIPTS_DIR/$1.config
  8. SDK_DIR=${SCRIPTS_DIR}/..
  9. if [[ $BR_DIR == "" ]]; then
  10. BR_DIR=${SDK_DIR}/buildroot-2024.02.11
  11. else
  12. BR_DIR=${SDK_DIR}/$BR_DIR
  13. fi
  14. if [[ $TOOLCHAIN_NAME == "" ]]; then
  15. TOOLCHAIN_NAME=arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-linux-gnueabihf
  16. fi
  17. BR_EXTERNAL_DIR=${SDK_DIR}/buildroot-external
  18. TOOLCHAIN_DIR=${BR_EXTERNAL_DIR}/toolchain
  19. if [[ $TOOLCHAIN_PACKAGE == "" ]]; then
  20. TOOLCHAIN_PACKAGE_DIR=${BR_DIR}/dl/toolchain-external-arm-arm
  21. else
  22. TOOLCHAIN_PACKAGE_DIR=${BR_DIR}/dl/${TOOLCHAIN_PACKAGE}
  23. fi
  24. OUTPUT_DIR=${SDK_DIR}/output/board/${BOARD_TYPE}
  25. UBOOT_OUTPUT_DIR=${OUTPUT_DIR}/u-boot
  26. LINUX_OUTPUT_DIR=${OUTPUT_DIR}/linux
  27. BR_OUTPUT_DIR=${OUTPUT_DIR}/buildroot
  28. IMAGES_DIR=${OUTPUT_DIR}/images
  29. ubootclean() {
  30. cd ${UBOOT_OUTPUT_DIR}
  31. make distclean
  32. }
  33. linuxclean() {
  34. cd ${LINUX_OUTPUT_DIR}
  35. make distclean
  36. }
  37. brclean() {
  38. cd ${BR_OUTPUT_DIR}
  39. make clean
  40. #cd ${BR_OUTPUT_DR}
  41. #rm -rf target
  42. #find ${BR_OUTPUT_DR}/ -name ".stamp_target_installed" | xargs rm -rf
  43. }
  44. ubootbuild() {
  45. cd $SDK_DIR/u-boot
  46. make O=${UBOOT_OUTPUT_DIR} ${UBOOT_CONFIG_FILE}
  47. make O=${UBOOT_OUTPUT_DIR}
  48. make O=${UBOOT_OUTPUT_DIR} envtools
  49. if [ -f "${UBOOT_OUTPUT_DIR}/spl/u-boot-spl.bin" ]; then
  50. cp -rf ${UBOOT_OUTPUT_DIR}/spl/u-boot-spl.bin $IMAGES_DIR/ubootspl.bin
  51. fi
  52. if [ -f "${UBOOT_OUTPUT_DIR}/u-boot.img" ]; then
  53. cp -rf ${UBOOT_OUTPUT_DIR}/u-boot.img $IMAGES_DIR
  54. fi
  55. cp -rf ${UBOOT_OUTPUT_DIR}/u-boot.bin $IMAGES_DIR
  56. touch $IMAGES_DIR/update-magic
  57. echo "ada7f0c6-7c86-11e9-8f9e-2a86e4085a59" > $IMAGES_DIR/update-magic
  58. }
  59. linuxbuild() {
  60. cd $SDK_DIR/linux
  61. make O=${LINUX_OUTPUT_DIR} ${LINUX_CONFIG_FILE}
  62. make O=${LINUX_OUTPUT_DIR} -j$(nproc)
  63. cp -rf ${LINUX_OUTPUT_DIR}/arch/arm/boot/dts/arkmicro/${DTB_FILE_NAME} $IMAGES_DIR
  64. cp -rf ${LINUX_OUTPUT_DIR}/arch/arm/boot/zImage $IMAGES_DIR
  65. }
  66. brbuild() {
  67. cd $BR_DIR
  68. make BR2_EXTERNAL=${BR_EXTERNAL_DIR} ${BR_CONFIG_FILE} O=${BR_OUTPUT_DIR}
  69. make O=${BR_OUTPUT_DIR}
  70. if [ -f "${BR_OUTPUT_DIR}/images/rootfs.ubi" ]; then
  71. cp -rf ${BR_OUTPUT_DIR}/images/rootfs.ubi $IMAGES_DIR
  72. fi
  73. if [ -f "${BR_OUTPUT_DIR}/images/rootfs.ext2" ]; then
  74. cp -rf ${BR_OUTPUT_DIR}/images/rootfs.ext2 $IMAGES_DIR
  75. fi
  76. }
  77. ubootconfig() {
  78. cd $SDK_DIR/u-boot
  79. make O=${UBOOT_OUTPUT_DIR} ${UBOOT_CONFIG_FILE}
  80. cd ${UBOOT_OUTPUT_DIR}
  81. make menuconfig
  82. make savedefconfig
  83. cp defconfig $SDK_DIR/u-boot/configs/${UBOOT_CONFIG_FILE}
  84. }
  85. linuxconfig() {
  86. cd $SDK_DIR/linux
  87. make O=${LINUX_OUTPUT_DIR} ${LINUX_CONFIG_FILE}
  88. cd ${LINUX_OUTPUT_DIR}
  89. make menuconfig
  90. make savedefconfig
  91. cp defconfig $SDK_DIR/linux/arch/arm/configs/${LINUX_CONFIG_FILE}
  92. }
  93. brconfig() {
  94. cd $BR_DIR
  95. make BR2_EXTERNAL=${BR_EXTERNAL_DIR} ${BR_CONFIG_FILE} O=${BR_OUTPUT_DIR}
  96. cd ${BR_OUTPUT_DIR}
  97. make menuconfig
  98. make savedefconfig
  99. }
  100. if [ "$2" == "clean" ] ; then
  101. if [ "$3" == "" ] ; then
  102. echo "clean all..."
  103. ubootclean
  104. linuxclean
  105. brclean
  106. exit $?
  107. elif [ "$3" == "uboot" ] ; then
  108. echo "clean u-boot..."
  109. ubootclean
  110. exit $?
  111. elif [ "$3" == "linux" ] ; then
  112. echo "clean linux..."
  113. linuxclean
  114. exit $?
  115. elif [ "$3" == "buildroot" ] ; then
  116. echo "clean buildroot..."
  117. brclean
  118. exit $?
  119. fi
  120. elif [ "$2" == "build" ] ; then
  121. if [ ! -d $TOOLCHAIN_DIR/$TOOLCHAIN_NAME ] ; then
  122. mkdir -p $TOOLCHAIN_DIR
  123. if [ -f $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME.tar.xz ] ; then
  124. xz -vkd $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME.tar.xz
  125. tar -xvf $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME.tar -C $TOOLCHAIN_DIR
  126. rm -rf $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME.tar
  127. else
  128. TOOLCHAIN_NAME_LOWER=$(echo "$TOOLCHAIN_NAME" | tr '[:upper:]' '[:lower:]')
  129. xz -vkd $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME_LOWER.tar.xz
  130. tar -xvf $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME_LOWER.tar -C $TOOLCHAIN_DIR
  131. rm -rf $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME_LOWER.tar
  132. fi
  133. fi
  134. source $SDK_DIR/env.source
  135. mkdir -p $IMAGES_DIR
  136. cp -rf $SDK_DIR/bootstrap/${BOOTSTRAP_DIR}/* $IMAGES_DIR
  137. cp -rf $SDK_DIR/tools/crc/crc.sh $IMAGES_DIR
  138. cp -rf $SDK_DIR/tools/crc/crc32app $IMAGES_DIR
  139. if [ "$3" == "" ] ; then
  140. echo "build all..."
  141. ubootbuild
  142. linuxbuild
  143. brbuild
  144. cd $IMAGES_DIR
  145. ./crc.sh
  146. rm -rf $IMAGES_DIR/crc.sh
  147. rm -rf $IMAGES_DIR/crc32app
  148. exit $?
  149. elif [ "$3" == "uboot" ] ; then
  150. echo "build u-boot..."
  151. ubootbuild
  152. cd $IMAGES_DIR
  153. ./crc.sh
  154. rm -rf $IMAGES_DIR/crc.sh
  155. rm -rf $IMAGES_DIR/crc32app
  156. exit $?
  157. elif [ "$3" == "linux" ] ; then
  158. echo "build linux..."
  159. linuxbuild
  160. cd $IMAGES_DIR
  161. ./crc.sh
  162. rm -rf $IMAGES_DIR/crc.sh
  163. rm -rf $IMAGES_DIR/crc32app
  164. exit $?
  165. elif [ "$3" == "buildroot" ] ; then
  166. echo "build buildroot..."
  167. brbuild
  168. cd $IMAGES_DIR
  169. ./crc.sh
  170. rm -rf $IMAGES_DIR/crc.sh
  171. rm -rf $IMAGES_DIR/crc32app
  172. exit $?
  173. fi
  174. elif [ "$2" == "config" ] ; then
  175. if [ ! -d $TOOLCHAIN_DIR/$TOOLCHAIN_NAME ] ; then
  176. mkdir -p $TOOLCHAIN_DIR
  177. if [ -f $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME.tar.xz ] ; then
  178. xz -vkd $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME.tar.xz
  179. tar -xvf $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME.tar -C $TOOLCHAIN_DIR
  180. rm -rf $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME.tar
  181. else
  182. TOOLCHAIN_NAME_LOWER=$(echo "$TOOLCHAIN_NAME" | tr '[:upper:]' '[:lower:]')
  183. xz -vkd $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME_LOWER.tar.xz
  184. tar -xvf $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME_LOWER.tar -C $TOOLCHAIN_DIR
  185. rm -rf $TOOLCHAIN_PACKAGE_DIR/$TOOLCHAIN_NAME_LOWER.tar
  186. fi
  187. fi
  188. source $SDK_DIR/env.source
  189. if [ "$3" == "uboot" ] ; then
  190. echo "config u-boot..."
  191. ubootconfig
  192. exit $?
  193. elif [ "$3" == "linux" ] ; then
  194. echo "config linux..."
  195. linuxconfig
  196. exit $?
  197. elif [ "$3" == "buildroot" ] ; then
  198. echo "config buildroot..."
  199. brconfig
  200. exit $?
  201. fi
  202. fi