add-board.sh 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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_BOARD_TYPE/$DST_BOARD_TYPE/g ${SDK_DIR}/u-boot/configs/${DST_BOARD_TYPE}_defconfig
  68. sed -i s/$SRC_DTB_FILE_NAME/$DST_DTB_FILE_NAME/g ${SDK_DIR}/u-boot/configs/${DST_BOARD_TYPE}_defconfig
  69. # copy dts file and add in Makefile
  70. UBOOT_DTS_PATH=${SDK_DIR}/u-boot/arch/arm/dts
  71. if [ -f ${SDK_DIR}/u-boot/arch/arm/dts/$SRC_DTS_FILE_NAME ];then
  72. cp -rf $UBOOT_DTS_PATH/$SRC_DTS_FILE_NAME $UBOOT_DTS_PATH/$DST_DTS_FILE_NAME
  73. fi
  74. grep "$DST_DTB_FILE_NAME" $UBOOT_DTS_PATH/Makefile > /dev/null
  75. if [ $? -ne 0 ]; then
  76. sed -i "/$SRC_DTB_FILE_NAME/{p;s/$SRC_DTB_FILE_NAME/$DST_DTB_FILE_NAME/}" $UBOOT_DTS_PATH/Makefile
  77. grep "$SRC_DTB_FILE_NAME" $UBOOT_DTS_PATH/Makefile | grep '\\' > /dev/null
  78. if [ $? -ne 0 ]; then
  79. sed -i "s/$SRC_DTB_FILE_NAME/$SRC_DTB_FILE_NAME \\\\/" $UBOOT_DTS_PATH/Makefile
  80. fi
  81. fi
  82. # modify arch/arm/mach-arkmicro/Kconfig file add source "board/arkmicro/$DST_BOARD_TYPE/Kconfig"
  83. UBOOT_ARCH_KCONFIG=${SDK_DIR}/u-boot/arch/arm/mach-arkmicro/Kconfig
  84. grep "TARGET_$DST_UBOOT_TARGET" $UBOOT_ARCH_KCONFIG > /dev/null
  85. if [ $? -ne 0 ]; then
  86. sed -i "/TARGET_$SRC_UBOOT_TARGET\>/,/^$/{
  87. H
  88. s/TARGET_$SRC_UBOOT_TARGET/TARGET_$DST_UBOOT_TARGET/
  89. s/bool \"[^\"]*\"/bool \"$DST_BOARD_TYPE board\"/
  90. /^$/g
  91. }" $UBOOT_ARCH_KCONFIG
  92. fi
  93. grep "$DST_BOARD_TYPE\/Kconfig" $UBOOT_ARCH_KCONFIG > /dev/null
  94. if [ $? -ne 0 ]; then
  95. sed -i "/$SRC_UBOOT_BOARD_DIR\/Kconfig/{h;s/$SRC_UBOOT_BOARD_DIR/$DST_BOARD_TYPE/;G}" $UBOOT_ARCH_KCONFIG
  96. fi
  97. # modify arch/arm/mach-arkmicro/Makefile file
  98. UBOOT_ARCH_MAKEFILE=${SDK_DIR}/u-boot/arch/arm/mach-arkmicro/Makefile
  99. grep "TARGET_$DST_UBOOT_TARGET" $UBOOT_ARCH_MAKEFILE > /dev/null
  100. if [ $? -ne 0 ]; then
  101. sed -i "/TARGET_$SRC_UBOOT_TARGET)/{p;s/$SRC_UBOOT_TARGET/$DST_UBOOT_TARGET/}" $UBOOT_ARCH_MAKEFILE
  102. fi
  103. # add board dir board/arkmicro/$DST_BOARD_TYPE
  104. mkdir -p $DST_UBOOT_BOARD_PATH
  105. cp -rf $SRC_UBOOT_BOARD_PATH/* $DST_UBOOT_BOARD_PATH/
  106. 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\
  107. config SYS_CONFIG_NAME\n\tdefault \"$DST_BOARD_TYPE\"\n\nendif" > $DST_UBOOT_BOARD_PATH/Kconfig
  108. if [ -f ${DST_UBOOT_BOARD_PATH}/${SRC_BOARD_TYPE}.c ];then
  109. mv ${DST_UBOOT_BOARD_PATH}/${SRC_BOARD_TYPE}.c ${DST_UBOOT_BOARD_PATH}/${DST_BOARD_TYPE}.c
  110. sed -i s/$SRC_BOARD_TYPE/$DST_BOARD_TYPE/g $DST_UBOOT_BOARD_PATH/Makefile
  111. fi
  112. # add configs header file
  113. SRC_UBOOT_CONFIG_HEADER_FILE=$(sed -n '/SYS_CONFIG_NAME/{n;p;}' $SRC_UBOOT_BOARD_PATH/Kconfig | awk '{print $2}')
  114. SRC_UBOOT_CONFIG_HEADER_FILE=${SRC_UBOOT_CONFIG_HEADER_FILE//\"/}
  115. cp ${SDK_DIR}/u-boot/include/configs/$SRC_UBOOT_CONFIG_HEADER_FILE.h ${SDK_DIR}/u-boot/include/configs/$DST_BOARD_TYPE.h
  116. #########################################################
  117. ########### board linux #################################
  118. DTS_PATH=${SDK_DIR}/linux/arch/arm/boot/dts
  119. LINUX_CONFIG_PATH=${SDK_DIR}/linux/arch/arm/configs
  120. # copy dts file and add in Makefile
  121. cp $DTS_PATH/$SRC_DTS_FILE_NAME $DTS_PATH/$DST_DTS_FILE_NAME
  122. grep "$DST_DTB_FILE_NAME" $DTS_PATH/Makefile > /dev/null
  123. if [ $? -ne 0 ]; then
  124. sed -i "/$SRC_DTB_FILE_NAME/{p;s/$SRC_DTB_FILE_NAME/$DST_DTB_FILE_NAME/}" $DTS_PATH/Makefile
  125. grep "$SRC_DTB_FILE_NAME" $DTS_PATH/Makefile | grep '\\' > /dev/null
  126. if [ $? -ne 0 ]; then
  127. sed -i "s/$SRC_DTB_FILE_NAME/$SRC_DTB_FILE_NAME \\\\/" $DTS_PATH/Makefile
  128. fi
  129. fi
  130. # copy config file
  131. cp $LINUX_CONFIG_PATH/$SRC_LINUX_CONFIG_FILE $LINUX_CONFIG_PATH/${DST_BOARD_TYPE}_defconfig
  132. #########################################################
  133. ########### board buildroot #############################
  134. BR_CONFIG_PATH=${SDK_DIR}/buildroot-external/configs
  135. BR_BOARD_PATH=${SDK_DIR}/buildroot-external/board/arkmicro
  136. # copy buildroot config file and modify to dst board
  137. SRC_BR_BOARD_DIR=$(grep "BR2_ROOTFS_OVERLAY" $BR_CONFIG_PATH/$SRC_BR_CONFIG_FILE | awk -F / '{print $4}')
  138. cp $BR_CONFIG_PATH/$SRC_BR_CONFIG_FILE $BR_CONFIG_PATH/${DST_BOARD_TYPE}_defconfig
  139. sed -i "s/$SRC_BR_BOARD_DIR/$DST_BOARD_TYPE/g" $BR_CONFIG_PATH/${DST_BOARD_TYPE}_defconfig
  140. # add board dir board/arkmicro/$DST_BOARD_TYPE
  141. mkdir -p $BR_BOARD_PATH/$DST_BOARD_TYPE
  142. cp -rf $BR_BOARD_PATH/$SRC_BR_BOARD_DIR/* $BR_BOARD_PATH/$DST_BOARD_TYPE
  143. sed -i "s/$SRC_BR_BOARD_DIR/$DST_BOARD_TYPE/g" $BR_BOARD_PATH/$DST_BOARD_TYPE/post_build.sh
  144. #########################################################