Build Atmel ARM9 board Board Support Packets
guowenxue
2024-09-02 e766fcfbb4453d33abc4c2af1edd93fcdbfcb293
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
#!/bin/bash
# This shell script used to install system tools
 
# 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
 
# NXP document suggest cross compiler from ARM Developer:
#   https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
ARMTOOL_VER=10.3-2021.07
 
# 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 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 BSP_URL=`jq -r ".bsp.giturl" $CONF_FILE`
    export CROSS_COMPILE=`jq -r ".bsp.crosstool" $CONF_FILE`
}
 
function install_systools()
{
    if command -v jq > /dev/null 2>&1 ; then
        pr_info "All system tools already installed, skip it"
        return 0;
    fi
 
    pr_info "start apt install system tools(commands)"
 
    systools="coreutils jq wget curl tree gawk sed unzip cpio bc lzop zstd rsync kmod kpartx \
        desktop-file-utils iputils-ping xterm diffstat chrpath asciidoc docbook-utils help2man \
        build-essential gcc g++ make cmake automake groff socat flex texinfo bison texi2html \
        git cvs subversion mercurial autoconf autoconf-archive parted dosfstools fakeroot \
        python3 python3-pip python3-pexpect python3-git python3-jinja2 \
        lib32z1 libssl-dev libncurses-dev libgl1-mesa-dev libglu1-mesa-dev libsdl1.2-dev \
        u-boot-tools mtd-utils device-tree-compiler binfmt-support " 
 
    apt update > /dev/null 2>&1
    apt install -y $systools
}
 
function install_crosstool()
{
    # Crosstool installed path
    CROSSTOOL_PATH=`dirname $CROSS_COMPILE`
 
    # crosstool name and version
    tmp="${CROSS_COMPILE%/bin/*}"
    CROSSTOOL_NAME="${tmp##*/}"
 
    # crosstool installed path
    CROSSTOOL_DIR="${CROSS_COMPILE%%/$CROSSTOOL_NAME/*}/"
 
 
    if [ -d $CROSSTOOL_PATH ] ; then
        pr_info "Crosstool already installed to $CROSSTOOL_PATH, skip it"
        return ;
    fi
 
    wget $BSP_URL/at91/bsp/$BSP_VER/$CROSSTOOL_NAME.tar.xz 
 
    # decompress source code packet
    mkdir -p $CROSSTOOL_DIR
    do_unpack $CROSSTOOL_NAME.tar.xz $CROSSTOOL_DIR
 
    # show cross compiler version information
    ${CROSS_COMPILE}gcc -v
 
    rm -f $CROSSTOOL_NAME.tar.xz
}
 
if [ `id -u` != 0 ] ; then
    echo ""
    pr_error "This shell script must be excuted as root privilege"
    exit;
fi
 
export_env
 
install_systools
 
install_crosstool