add-board.sh 7.3 KB

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