add-board.sh 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #!/bin/bash
  2. SCRIPTS_DIR=`cd $(dirname $0); pwd -P`
  3. SDK_DIR=${SCRIPTS_DIR}/..
  4. BR_DIR=${SDK_DIR}/buildroot
  5. BR_EXTERNAL_DIR=${SDK_DIR}/buildroot-external
  6. TOOLCHAIN_DIR=${BR_EXTERNAL_DIR}/toolchain
  7. TOOLCHAIN_NAME=gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf
  8. TOOLCHAIN_PACKAGE_DIR=${BR_DIR}/dl/toolchain-external-linaro-arm
  9. OUTPUT_DIR=${SDK_DIR}/output/board/${BOARD_TYPE}
  10. UBOOT_OUTPUT_DIR=${OUTPUT_DIR}/u-boot
  11. LINUX_OUTPUT_DIR=${OUTPUT_DIR}/linux
  12. BR_OUTPUT_DIR=${OUTPUT_DIR}/buildroot
  13. IMAGES_DIR=${OUTPUT_DIR}/images
  14. usage() {
  15. echo "Usage: add-board.sh src_board_type dst_board_type"
  16. }
  17. if [ $# -ne 2 ]; then
  18. usage
  19. exit
  20. fi
  21. if [ ! -f $1.config ]; then
  22. echo "src board is not exist"
  23. exit
  24. fi
  25. DST_BOARD_TYPE=$2
  26. DST_BOARD_TYPE=${DST_BOARD_TYPE,,}
  27. echo "$DST_BOARD_TYPE" | grep "-" | grep "_" > /dev/null
  28. if [ $? -eq 0 ]; then
  29. DST_BOARD_TYPE=${DST_BOARD_TYPE//-/_}
  30. fi
  31. SRC_CONFIG_FILE=$1.config
  32. SRC_BOARD_TYPE=$(grep "BOARD_TYPE" $SRC_CONFIG_FILE | awk -F= '{print $2}')
  33. SRC_BOOTSTRAP_DIR=$(grep "BOOTSTRAP_DIR" $SRC_CONFIG_FILE | awk -F= '{print $2}')
  34. SRC_UBOOT_CONFIG_FILE=$(grep "UBOOT_CONFIG_FILE" $SRC_CONFIG_FILE | awk -F= '{print $2}')
  35. SRC_LINUX_CONFIG_FILE=$(grep "LINUX_CONFIG_FILE" $SRC_CONFIG_FILE | awk -F= '{print $2}')
  36. SRC_BR_CONFIG_FILE=$(grep "BR_CONFIG_FILE" $SRC_CONFIG_FILE | awk -F= '{print $2}')
  37. SRC_DTB_FILE_NAME=$(grep "DTB_FILE_NAME" $SRC_CONFIG_FILE | awk -F= '{print $2}')
  38. SRC_DTS_FILE_NAME=${SRC_DTB_FILE_NAME/dtb/dts}
  39. CONFIG_FILE=$SCRIPTS_DIR/$DST_BOARD_TYPE.config
  40. SRC_UBOOT_CONFIG_FILE_PATH=$SDK_DIR/u-boot/configs/$SRC_UBOOT_CONFIG_FILE
  41. SRC_UBOOT_TARGET=$(grep "CONFIG_TARGET_" $SRC_UBOOT_CONFIG_FILE_PATH | awk -F= '{print $1}')
  42. SRC_UBOOT_TARGET=${SRC_UBOOT_TARGET:14}
  43. SRC_UBOOT_BOARD_DIR=${SRC_UBOOT_TARGET,,}
  44. if [ ! -d $SDK_DIR/u-boot/board/arkmicro/$SRC_UBOOT_BOARD_DIR ];then
  45. SRC_UBOOT_BOARD_DIR=${SRC_UBOOT_BOARD_DIR//_/-}
  46. fi
  47. SRC_UBOOT_BOARD_PATH=$SDK_DIR/u-boot/board/arkmicro/$SRC_UBOOT_BOARD_DIR
  48. # board build config file
  49. touch $CONFIG_FILE
  50. echo "BOARD_TYPE=$DST_BOARD_TYPE" > $CONFIG_FILE
  51. echo "BOOTSTRAP_DIR=$SRC_BOOTSTRAP_DIR" >> $CONFIG_FILE
  52. echo "UBOOT_CONFIG_FILE=${DST_BOARD_TYPE}_defconfig" >> $CONFIG_FILE
  53. echo "LINUX_CONFIG_FILE=${DST_BOARD_TYPE}_defconfig" >> $CONFIG_FILE
  54. echo "BR_CONFIG_FILE=${DST_BOARD_TYPE}_defconfig" >> $CONFIG_FILE
  55. echo "DTB_FILE_NAME=$DST_BOARD_TYPE.dtb" >> $CONFIG_FILE
  56. sed -n /BR_DIR/p $1.config >> $CONFIG_FILE
  57. DST_DTB_FILE_NAME=$DST_BOARD_TYPE.dtb
  58. DST_DTS_FILE_NAME=$DST_BOARD_TYPE.dts
  59. DST_UBOOT_TARGET=${DST_BOARD_TYPE^^}
  60. DST_UBOOT_TARGET=${DST_UBOOT_TARGET//-/_}
  61. DST_UBOOT_BOARD_PATH=$SDK_DIR/u-boot/board/arkmicro/$DST_BOARD_TYPE
  62. # board bootstrap files is the same as the src
  63. ########### board u-boot ################################
  64. # add u-boot board config file
  65. cp -rf ${SDK_DIR}/u-boot/configs/${SRC_UBOOT_CONFIG_FILE} ${SDK_DIR}/u-boot/configs/${DST_BOARD_TYPE}_defconfig
  66. sed -i s/CONFIG_TARGET_$SRC_UBOOT_TARGET/CONFIG_TARGET_$DST_UBOOT_TARGET/g ${SDK_DIR}/u-boot/configs/${DST_BOARD_TYPE}_defconfig
  67. sed -i s/$SRC_DTB_FILE_NAME/$DST_DTB_FILE_NAME/g ${SDK_DIR}/u-boot/configs/${DST_BOARD_TYPE}_defconfig
  68. # copy dts file and add in Makefile
  69. UBOOT_DTS_PATH=${SDK_DIR}/u-boot/arch/arm/dts
  70. if [ -f ${SDK_DIR}/u-boot/arch/arm/dts/$SRC_DTS_FILE_NAME ];then
  71. cp -rf $UBOOT_DTS_PATH/$SRC_DTS_FILE_NAME $UBOOT_DTS_PATH/$DST_DTS_FILE_NAME
  72. fi
  73. grep "$DST_DTB_FILE_NAME" $UBOOT_DTS_PATH/Makefile > /dev/null
  74. if [ $? -ne 0 ]; then
  75. sed -i "/$SRC_DTB_FILE_NAME/{p;s/$SRC_DTB_FILE_NAME/$DST_DTB_FILE_NAME/}" $UBOOT_DTS_PATH/Makefile
  76. grep "$SRC_DTB_FILE_NAME" $UBOOT_DTS_PATH/Makefile | grep '\\' > /dev/null
  77. if [ $? -ne 0 ]; then
  78. sed -i "s/$SRC_DTB_FILE_NAME/$SRC_DTB_FILE_NAME \\\\/" $UBOOT_DTS_PATH/Makefile
  79. fi
  80. fi
  81. # modify arch/arm/mach-arkmicro/Kconfig file add source "board/arkmicro/$DST_BOARD_TYPE/Kconfig"
  82. UBOOT_ARCH_KCONFIG=${SDK_DIR}/u-boot/arch/arm/mach-arkmicro/Kconfig
  83. grep "TARGET_$DST_UBOOT_TARGET" $UBOOT_ARCH_KCONFIG > /dev/null
  84. if [ $? -ne 0 ]; then
  85. sed -i "/TARGET_$SRC_UBOOT_TARGET\>/,/^$/{
  86. H
  87. s/TARGET_$SRC_UBOOT_TARGET/TARGET_$DST_UBOOT_TARGET/
  88. s/bool \"[^\"]*\"/bool \"$DST_BOARD_TYPE board\"/
  89. /^$/g
  90. }" $UBOOT_ARCH_KCONFIG
  91. fi
  92. grep "$DST_BOARD_TYPE\/Kconfig" $UBOOT_ARCH_KCONFIG > /dev/null
  93. if [ $? -ne 0 ]; then
  94. sed -i "/$SRC_UBOOT_BOARD_DIR\/Kconfig/{h;s/$SRC_UBOOT_BOARD_DIR/$DST_BOARD_TYPE/;G}" $UBOOT_ARCH_KCONFIG
  95. fi
  96. # modify arch/arm/mach-arkmicro/Makefile file
  97. UBOOT_ARCH_MAKEFILE=${SDK_DIR}/u-boot/arch/arm/mach-arkmicro/Makefile
  98. grep "TARGET_$DST_UBOOT_TARGET" $UBOOT_ARCH_MAKEFILE > /dev/null
  99. if [ $? -ne 0 ]; then
  100. sed -i "/TARGET_$SRC_UBOOT_TARGET)/{p;s/$SRC_UBOOT_TARGET/$DST_UBOOT_TARGET/}" $UBOOT_ARCH_MAKEFILE
  101. fi
  102. # add board dir board/arkmicro/$DST_BOARD_TYPE
  103. mkdir -p $DST_UBOOT_BOARD_PATH
  104. cp -rf $SRC_UBOOT_BOARD_PATH/* $DST_UBOOT_BOARD_PATH/
  105. echo -e "if TARGET_$DST_UBOOT_TARGET\n\nconfig SYS_BOARD\n\tdefault \"$DST_BOARD_TYPE\"\n\nconfig SYS_VENDOR\n\tdefault \"arkmicro\"\n\n\
  106. config SYS_CONFIG_NAME\n\tdefault \"$DST_BOARD_TYPE\"\n\nendif" > $DST_UBOOT_BOARD_PATH/Kconfig
  107. # add configs header file
  108. SRC_UBOOT_CONFIG_HEADER_FILE=$(sed -n '/SYS_CONFIG_NAME/{n;p;}' $SRC_UBOOT_BOARD_PATH/Kconfig | awk '{print $2}')
  109. SRC_UBOOT_CONFIG_HEADER_FILE=${SRC_UBOOT_CONFIG_HEADER_FILE//\"/}
  110. cp ${SDK_DIR}/u-boot/include/configs/$SRC_UBOOT_CONFIG_HEADER_FILE.h ${SDK_DIR}/u-boot/include/configs/$DST_BOARD_TYPE.h
  111. #########################################################
  112. ########### board linux #################################
  113. DTS_PATH=${SDK_DIR}/linux/arch/arm/boot/dts
  114. LINUX_CONFIG_PATH=${SDK_DIR}/linux/arch/arm/configs
  115. # copy dts file and add in Makefile
  116. cp $DTS_PATH/$SRC_DTS_FILE_NAME $DTS_PATH/$DST_DTS_FILE_NAME
  117. grep "$DST_DTB_FILE_NAME" $DTS_PATH/Makefile > /dev/null
  118. if [ $? -ne 0 ]; then
  119. sed -i "/$SRC_DTB_FILE_NAME/{p;s/$SRC_DTB_FILE_NAME/$DST_DTB_FILE_NAME/}" $DTS_PATH/Makefile
  120. grep "$SRC_DTB_FILE_NAME" $DTS_PATH/Makefile | grep '\\' > /dev/null
  121. if [ $? -ne 0 ]; then
  122. sed -i "s/$SRC_DTB_FILE_NAME/$SRC_DTB_FILE_NAME \\\\/" $DTS_PATH/Makefile
  123. fi
  124. fi
  125. # copy config file
  126. cp $LINUX_CONFIG_PATH/$SRC_LINUX_CONFIG_FILE $LINUX_CONFIG_PATH/${DST_BOARD_TYPE}_defconfig
  127. #########################################################
  128. ########### board buildroot #############################
  129. BR_CONFIG_PATH=${SDK_DIR}/buildroot-external/configs
  130. BR_BOARD_PATH=${SDK_DIR}/buildroot-external/board/arkmicro
  131. # copy buildroot config file and modify to dst board
  132. SRC_BR_BOARD_DIR=$(grep "BR2_ROOTFS_OVERLAY" $BR_CONFIG_PATH/$SRC_BR_CONFIG_FILE | awk -F / '{print $4}')
  133. cp $BR_CONFIG_PATH/$SRC_BR_CONFIG_FILE $BR_CONFIG_PATH/${DST_BOARD_TYPE}_defconfig
  134. sed -i "s/$SRC_BR_BOARD_DIR/$DST_BOARD_TYPE/g" $BR_CONFIG_PATH/${DST_BOARD_TYPE}_defconfig
  135. # add board dir board/arkmicro/$DST_BOARD_TYPE
  136. mkdir -p $BR_BOARD_PATH/$DST_BOARD_TYPE
  137. cp -rf $BR_BOARD_PATH/$SRC_BR_BOARD_DIR/* $BR_BOARD_PATH/$DST_BOARD_TYPE
  138. sed -i "s/$SRC_BR_BOARD_DIR/$DST_BOARD_TYPE/g" $BR_BOARD_PATH/$DST_BOARD_TYPE/post_build.sh
  139. #########################################################