aboutsummaryrefslogtreecommitdiff
path: root/build-kernel
blob: 4ee87efa692c05e3c83d17b410d2015fd99d6dbe (plain)
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
#!/bin/bash

set -e

NUM_CPUS=${NUM_CPUS:-"$(getconf _NPROCESSORS_ONLN)"}
TOP=${TOP:-$(dirname $(pwd))}
FIT_NAME="kernel kernel_dtb"

KDIR=${KDIR:-$(pwd)}

clean_build=0
#ARCH=arm64
git_describe=$(git describe --long)
KERNEL_VERSION="linux-mainline"

usage() {
    echo -e "$0's help text"
    echo -e "   -a ARCH, specify the architecture to build, default: arm64"
    echo -e "   -c, cleanup output and staging dir before building, default: 0"
    echo -e "   -c CONFIG_URL, specify a url to a config file,"
    echo -e "      default: ${CONFIG_URL}"
    echo -e "   -k KERNEL_VERSION, kernel version that you want to build, default: linux-mainline"
    echo -e "      KERNEL_VERSION's to choose from:"
    echo -e "          linux-mainline,"
    echo -e "          linux-next,"
    echo -e "          linux-stable-4.14,"
    echo -e "          ..."
    echo -e "   -m MACHINE, add machine name"
    echo -e "   -h, prints out this help"
}

while getopts "a:cd:hk:m:" arg; do
    case $arg in
        a)
            ARCH="$OPTARG"
            ;;
        c)
            clean_build=1
            ;;
        d)
            CONFIG_URL="$OPTARG"
            ;;
        k)
            KERNEL_VERSION="$OPTARG"
            ;;
        m)
            MACHINE="$OPTARG"
            ;;
        h|*)
            usage
            exit 0
            ;;
    esac
done

case ${MACHINE} in
    am57xx-evm)
        ARCH=arm
        CONFIG_URL=${CONFIG_URL:-"http://snapshots.linaro.org/openembedded/lkft/morty/${MACHINE}/rpb/${KERNEL_VERSION}/latest/config"}
        image_name=zImage
        dtb_name="am57xx-beagle-x15"
        ;;
    hikey)
        ARCH=arm64
        CONFIG_URL=${CONFIG_URL:-"http://snapshots.linaro.org/openembedded/lkft/morty/${MACHINE}/rpb/${KERNEL_VERSION}/latest/config"}
        image_name=Image
        dtb_name="hi6220-hikey"
        ;;
    *)
        usage
        exit 1
        ;;
esac

OUTPUT=${OUTPUT:-"${TOP}/build_output/${ARCH}/${git_describe}"}
STAGING=${STAGING:-"${TOP}/staging/${ARCH}/${git_describe}"}

if [ $(grep -c "^WHAT IS LINUX" README) -ne 1 ] &&
    [  $(grep -c "^Linux kernel" README) -ne 1 ]; then
    echo -e "ERROR: Need to run this script $(basename $0),"
    echo -e "  from a kernel repository"
    echo ""
    usage
    exit 1
fi

case $ARCH in
    arm)
        CROSS_COMPILE=${CROSS_COMPILE:-arm-linux-gnueabihf-}
        ;;
    arm64)
        CROSS_COMPILE=${CROSS_COMPILE:-aarch64-linux-gnu-}
        ;;

    *)
esac

if [[ $clean_build -eq 1 ]]; then
    echo "Cleaning up output and staging dir before building!"
    rm -rf ${OUTPUT}
    rm -rf ${STAGING}
fi

curl -sSL -o .config ${CONFIG_URL}
yes '' |make -j ${NUM_CPUS} CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KDIR=${KDIR} O=${OUTPUT} oldconfig
rm .config
make -j ${NUM_CPUS} CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KDIR=${KDIR} O=${OUTPUT}
if [[ -d arch/${ARCH}/boot/dts ]]; then
    make -j ${NUM_CPUS} CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KDIR=${KDIR} O=${OUTPUT} INSTALL_DTBS_PATH=${STAGING}/dtbs dtbs_install
    for file in $(find ${STAGING}/dtbs -type f -name '*.dtb') ; do
        if [[ ! $(basename ${file}) =~ ${git_describe}.dtb ]]; then
            new_file=$(printf '%s\n' "${file%.dtb}-${git_describe}.dtb");
            mv ${file} ${new_file}
        fi
    done
fi
if [[ $(grep CONFIG_MODULES=y ${OUTPUT}/.config) ]]; then
    make -j ${NUM_CPUS} CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KDIR=${KDIR} O=${OUTPUT} INSTALL_MOD_PATH=${STAGING} modules_install
    pushd ${STAGING}
    tar -zcf modules-$(basename ${STAGING}).tar.gz lib/
    popd
fi

cp -f ${OUTPUT}/.config ${STAGING}/kernel-${git_describe}.config
make -j ${NUM_CPUS} CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KDIR=${KDIR} O=${OUTPUT} Image
cp -f ${OUTPUT}/arch/${ARCH}/boot/${image_name} ${STAGING}/${image_name}-${git_describe}
cp -f $(find ${STAGING} -type f -name "*${dtb_name}-${git_describe}.dtb") ${STAGING}/
## vim: set sw=4 sts=4 et foldmethod=syntax : ##