凌云实验室推出的ARM Linux物联网网关开发板IGKBoard(IoT Gateway Kit Board)项目源码
guowenxue
2021-11-14 2808bf2f594f9ffb3017481b3f3b0940bbc29012
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
#!/bin/bash
 
INST_DRIVER=0
 
PRJ_PATH=`pwd`
 
IMG_PATH=${PRJ_PATH}/../images/bin
  
BOARD=imx6ull
 
CROSS_TOOL=/opt/buildroot/cortexA7/bin/arm-linux-
 
# linux kernel tarball path and branch
TAR_PATH=${PRJ_PATH}/../tarball
BSP_BRANCH=lf-5.10.52-2.1.0
 
BOOT=emmc
 
LINUX_SRC=linux-imx
 
PATCH_FILE=${PRJ_PATH}/patch/${LINUX_SRC}-${BOARD}.patch
 
CONF_FILE=.cfg-${BOARD}
 
JOBS=`cat /proc/cpuinfo | grep processor | wc -l`
 
set -u
set -e
 
STAGE=0
 
function msg_banner()
    STAGE=`expr $STAGE + 1`
    
    echo ""
    echo "+---------------------------------------------+" 
    printf " Stage $STAGE: $1\n" 
    echo "+---------------------------------------------+"
    echo ""
}
 
function do_fetch()
{
    msg_banner "Fetch ${LINUX_SRC} source code"
    if [ -d ${LINUX_SRC} ] ; then 
        printf "\n\n -- ${LINUX_SRC} fetched already -- \n\n"
        return 0;
    fi
 
    printf "\n -- decompress ${LINUX_SRC}-${BSP_BRANCH}.tar.xz now ... -- \n\n"
    tar -xJf ${TAR_PATH}/${LINUX_SRC}-${BSP_BRANCH}.tar.xz
}
 
function do_patch()
{
    msg_banner "Patch for ${LINUX_SRC} source code"
 
    cd ${LINUX_SRC}
 
    if [ ! -s $CONF_FILE -a  -s $PATCH_FILE ] ; then
        patch -p1 < $PATCH_FILE
    fi
 
    printf "\n\nModify cross compiler in Makefile: $CROSS_TOOL\n\n"
    sed -i -e "s|^CROSS_COMPILE=.*|CROSS_COMPILE=${CROSS_TOOL}|g" Makefile
 
    cd ${PRJ_PATH}
}
  
function do_build()
{
    msg_banner "Build for ${LINUX_SRC} source code"
 
    cd ${LINUX_SRC}
 
    if [ ! -f .config ] ; then 
        cp $CONF_FILE .config
    fi
 
    make -j ${JOBS}
 
 
    cd ${PRJ_PATH}
}
 
 
function do_install()
{
    msg_banner "Install linux kernel image"
 
    cd ${LINUX_SRC}
 
    mkdir -p ${IMG_PATH}
 
    cp arch/arm/boot/zImage ${IMG_PATH}
    cp arch/arm/boot/dts/imx6ul-14x14-evk-emmc.dtb ${IMG_PATH}/${BOARD}-${BOOT}.dtb
 
    cp arch/arm/boot/zImage /tftp
    cp arch/arm/boot/dts/imx6ul-14x14-evk-emmc.dtb /tftp/${BOARD}-${BOOT}.dtb
 
    if [ $INST_DRIVER != 0 ]  ;then
        make modules_install INSTALL_MOD_PATH=${PRJ_PATH}/../rootfs INSTALL_MOD_STRIP=1
    fi
 
    cd ${PRJ_PATH}
}
 
function do_clean()
{
    msg_banner "Clean ${LINUX_SRC} source code"
 
    cd ${LINUX_SRC}
 
    cp .config $CONF_FILE
    make distclean
 
    cd ${PRJ_PATH}
}
 
function gen_patch()
    do_clean
 
    mv ${LINUX_SRC} ${LINUX_SRC}-${BOARD} 
 
    do_fetch
 
    msg_banner "Generate ${LINUX_SRC} patch file"
 
    set +e
    diff -Nuar ${LINUX_SRC} ${LINUX_SRC}-${BOARD} > ${LINUX_SRC}-${BOARD}.patch
 
    rm -rf ${LINUX_SRC}
    mv ${LINUX_SRC}-${BOARD} ${LINUX_SRC}
}
 
if [[ $# == 1 ]] && [[ $1 == "patch" ]] ; then
    gen_patch
    exit 0;
fi
 
do_fetch
 
do_patch
 
do_build
 
do_install