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
|
#!/bin/bash
set -e
if [[ -f ${HOME}/.randomscripts.rc ]]; then
source ${HOME}/.randomscripts.rc
else
TOP=${TOP:-"${HOME}/random-scripts-artifacts"}
fi
mkdir -p ${TOP}
NUM_CPUS=${NUM_CPUS:-"$(getconf _NPROCESSORS_ONLN)"}
FIT_NAME="kernel kernel_dtb"
KDIR=${KDIR:-$(pwd)}
clean_build=0
build_deb_packages=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 " -d 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 " -i defconfig, defconfig to build in the src tree"
echo -e " -m MACHINE, add machine name"
echo -e " -p, build deb packages"
echo -e " -h, prints out this help"
}
while getopts "a:cd:hk:i:m:p" arg; do
case $arg in
a)
ARCH="$OPTARG"
;;
c)
clean_build=1
;;
d)
CONFIG_URL="$OPTARG"
;;
k)
KERNEL_VERSION="$OPTARG"
;;
i)
DEFCONFIG_FILENAME="$OPTARG"
;;
m)
MACHINE="$OPTARG"
;;
p)
build_deb_packages=1
;;
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
if [[ -z ${DEFCONFIG_FILENAME} ]]; then
curl -sSL -o .config ${CONFIG_URL}
yes '' |make -j ${NUM_CPUS} CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KDIR=${KDIR} O=${OUTPUT} oldconfig
rm .config
else
make -j ${NUM_CPUS} CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KDIR=${KDIR} O=${OUTPUT} ${DEFCONFIG_FILENAME}
fi
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}/
if [[ $build_deb_packages -eq 1 ]]; then
make -j ${NUM_CPUS} CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KDIR=${KDIR} O=${OUTPUT} bindeb-pkg
mv -f ${OUTPUT}/../*$(basename ${OUTPUT} |awk -F'-' '{print $1-$2}')*.* ${STAGING}
fi
## vim: set sw=4 sts=4 et foldmethod=syntax : ##
|