Build Atmel ARM9 board Board Support Packets
guowenxue
2024-05-22 5ded927eaaa7ac0651cfabff5b9ce13ef6235b66
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
#!/bin/bash
# Description: This shell script used to generate patch file
#      Author: guowenxue <guowenxue@gmail.com>
#     Version: 1.0.0  
 
# this project absolute path
PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}")/.. && pwd)
 
# top project absolute path
TOP_PATH=$(realpath $PRJ_PATH/..)
 
# config file path
CONF_FILE=$TOP_PATH/config.json
 
# download taballs path
TARBALL_PATH=$PRJ_PATH/tarballs
 
# shell script will exit once get command error
#set -e
 
#+-------------------------+
#| Shell script functions  |
#+-------------------------+
 
function pr_error() {
    echo -e "\033[40;31m $1 \033[0m"
}
 
function pr_warn() {
    echo -e "\033[40;33m $1 \033[0m"
}
 
function pr_info() {
    echo -e "\033[40;32m $1 \033[0m"
}
 
# decompress a packet to destination path
function do_unpack()
{
    tarball=$1
    dstpath=`pwd`
 
    if [[ $# == 2 ]] ; then
        dstpath=$2
    fi
 
    pr_info "decompress $tarball => $dstpath"
 
    mkdir -p $dstpath
    case $tarball in
        *.tar.gz)
            tar -xzf $tarball -C $dstpath
            ;;
 
        *.tar.bz2)
            tar -xjf $tarball -C $dstpath
            ;;
 
        *.tar.xz)
            tar -xJf $tarball -C $dstpath
            ;;
 
        *.tar.zst)
            tar -I zstd -xf $tarball -C $dstpath
            ;;
 
        *.tar)
            tar -xf $tarball -C $dstpath
            ;;
 
        *.zip)
            unzip -qo $tarball -d $dstpath
            ;;
 
        *)
            pr_error "decompress Unsupport packet: $tarball"
            return 1;
            ;;
    esac
}
 
# parser configure file and export environment variable
function export_env()
{
    export SRC=$(basename $1)
 
    export BOARD=`jq -r ".bsp.board" $CONF_FILE | tr 'A-Z' 'a-z'`
    export BSP_VER=`jq -r ".bsp.version" $CONF_FILE | tr 'A-Z' 'a-z'`
    export CROSS_COMPILE=`jq -r ".bsp.crosstool" $CONF_FILE`
 
    export DEF_CONFIG=${BOARD}_defconfig
    export IMG_KER=linuxrom-${BOARD}.itb
 
    export ARCH=arm
    export PATCH=$SRC-$BSP_VER.patch
}
 
function do_clean()
{
    cd $SRC
 
    if [ -f .config ] ; then
        pr_info "save default configure to $DEF_CONFIG"
        make savedefconfig ARCH=$ARCH CROSS_COMPILE=${CROSS_COMPILE}
        mv defconfig arch/arm/configs/${DEF_CONFIG}
    fi
 
    rm -f $IMG_KER
    make distclean ARCH=$ARCH CROSS_COMPILE=${CROSS_COMPILE} 
    cd $PRJ_PATH
}
 
function do_patch()
{
    if [ ! -d $PRJ_PATH/$SRC ] ;  then
        pr_error "\nERROR: source code $SRC not exist, exit now\n\n"
        exit;
    fi
 
    # rename new source code
    mv ${SRC} ${SRC}-${BOARD}
 
    # decompress orignal soruce code packet
    do_unpack ${TARBALL_PATH}/${SRC}.tar.xz
 
    pr_info "generate patch file $PATCH"
 
    # generate patch file
    diff -Nuar -x "include-prefixes" -x ".gitignore" ${SRC} ${SRC}-${BOARD}  > $PATCH
 
    # remove orignal soruce code
    rm -rf ${SRC}
 
    # recover new source code
    mv ${SRC}-${BOARD} ${SRC} 
}
 
if [ $# != 1 ] ; then
    pr_info "$0 usage example:"
    pr_info "$0 at91bootstrap"
    pr_info "$0 u-boot-at91"
    exit
fi
 
export_env $1
 
do_clean
 
do_patch