huangcm
2025-08-25 2f2fd745743ad500687c6985119d523146531958
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/bin/bash
 
BOARD_CONFIG_DIR=longan/device/config/chips/
BOARD_CONFIG_FILE=longan/device/.BoardConfig.mk
DTS_DIR=$BOARD_CONFIG_DIR/a133/configs/c3
 
LCD_DTS=(
  "lcd-lvds-7-1024-600.dtsi"
  "lcd-lvds-21-1920-1080.dtsi"
  "lcd-mipi-10-800-1280-v1.dtsi"
  "lcd-mipi-10-800-1280-v2.dtsi"
  "lcd-mipi-8-800-1280.dtsi"
  "lcd-mipi-5-720-1280.dtsi"
)
 
function build_lunch() {
    TARGET_BOARD_PATH_ARRAY=($(find $BOARD_CONFIG_DIR -name "BoardConfig-a133*.mk" | sort))
    TARGET_BOARD_ARRAY=($(find $BOARD_CONFIG_DIR -name "BoardConfig-a133*.mk" | sed 's#.*/##' | sort))
    echo "======you are building a133 android======"
    echo "${TARGET_BOARD_ARRAY[@]}" | xargs -n 1 | sed "=" | sed "N;s/\n/. /"
 
    while true; do
        read -p "which board would you like (1-${#TARGET_BOARD_ARRAY[@]}): " INDEX
        if [[ "$INDEX" =~ ^[0-9]+$ ]] && ((INDEX >= 1 && INDEX <= ${#TARGET_BOARD_ARRAY[@]})); then
            INDEX=$(($INDEX - 1))
            BUILD_TARGET_BOARD="${TARGET_BOARD_PATH_ARRAY[$INDEX]}"
 
            break
        else
            echo "Invalid input. Please enter a number between 1 and ${#TARGET_BOARD_ARRAY[@]}."
        fi
    done
 
    cp -f $BUILD_TARGET_BOARD $BOARD_CONFIG_FILE
 
    echo -e "build target board configuration: $BUILD_TARGET_BOARD\n"
    #select partition table
    source $BOARD_CONFIG_FILE
    echo "you board is ${DTS_NAME}"
 
    ln -rsf "${DTS_DIR}/${DTS_NAME}.fex" "${DTS_DIR}/sys_config.fex"
    echo "Start clean kerenl"
 
    cd longan/kernel/linux-4.9 && make clean -j32 && cd -
    source $BOARD_CONFIG_FILE
    longan/build/mkcommon.sh autoconfig -i a133 -o android -b c3
}
 
function build() {
    DTS_FILE=${DTS_DIR}/${DTS_NAME}.dts
    for config in "${LCD_DTS[@]}"; do
      # 检查未被注释的配置行(支持行首空格)
      if grep -q -E "^[[:space:]]*#include \"${config}\"" "$DTS_FILE"; then
        # 提取 lcd- 之后 .dtsi 之前的内容(去除头尾字符)
        LCD_NAME=$(echo "$config" | sed 's/^lcd-\(.*\)\.dtsi$/\1/')
        break
      fi
    done
 
 
sed -i -E "
/^[[:space:]]*export LCD_NAME=/ {
  s|^(export LCD_NAME=).*$|\1${LCD_NAME}|
  h
  \$!{x;b};x
  b done
}
 
1 i export LCD_NAME=${LCD_NAME}
 
:done
" "${BOARD_CONFIG_FILE}"
 
 
    source $BOARD_CONFIG_FILE
 
    if [ x"$1" == "xuboot" ] || [ x"$1" == "xu" ] || [ x"$1" == "x" ]; then
        echo "Start build uboot"
        cd longan/brandy/brandy-2.0
        ./build.sh -p sun50iw10p1
        if [ $? -eq 0 ]; then
            echo "Build uboot ok!"
        else
            echo "Build uboot failed!"
            cd -
            exit 1
        fi
        cd -
    fi
 
    if [ x"$1" == "xkernel" ] || [ x"$1" == "xk" ] || [ x"$1" == "x" ]; then
        echo "Start build kernel"
        cd longan
        ./build.sh autoconfig -o android -i a133 -b c3
        ./build.sh
        if [ $? -eq 0 ]; then
            echo "Build kernel ok!"
        else
            echo "Build kernel failed!"
            cd -
            exit 1
        fi
        cd -
    fi
 
    # android envsetup
    cd android
    . ./build/envsetup.sh
    lunch ceres_c3-userdebug
    extract-bsp
    cd -
 
    if [ x"$1" == "xandroid" ] || [ x"$1" == "xa" ] || [ x"$1" == "x" ]; then
        echo "Start build Android"
        cd android
        make installclean
        make BUILD_NUMBER=ido-a133 -j32
        if [ $? -eq 0 ]; then
            echo "Build android ok!"
        else
            echo "Build android failed!"
            cd -
            exit 1
        fi
        cd -
    fi
 
    # pack image
    echo "Start pack image"
    cd android
    pack
    cd -
 
 
}
 
if [ "x$1" == "xlunch" ]; then
    build_lunch && exit 0
else
    source $BOARD_CONFIG_FILE
    if [ "x$1" == "xall" ]; then
        for config in "${LCD_DTS[@]}"; do
            echo "正在切换设备树: $config"
            # Step 1: 注释所有 LCD 相关行(无论原始是否已注释)
            sed -i -E '/#include "lcd-/s|^([[:space:]]*)(//)?|\1//|' "$DTS_DIR/$DTS_NAME.dts"
 
            # Step 2: 解除目标配置的注释
            sed -i -E "s|^([[:space:]]*)//#include \"$config\"|\1#include \"$config\"|" "$DTS_DIR/$DTS_NAME.dts"
 
            # # 提取 lcd- 之后 .dtsi 之前的内容(去除头尾字符)
            # LCD_DTS_FILE=$(echo "$config" | sed 's/^lcd-\(.*\)\.dtsi$/\1/')
 
            # 执行编译
            echo "开始编译..."
            build
        done
    else
        build $@  && exit 0
    fi
 
fi