-
Notifications
You must be signed in to change notification settings - Fork 0
/
build_kernel
executable file
·141 lines (106 loc) · 2.86 KB
/
build_kernel
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
#!/bin/bash
# RMIT USAP Assignment 2 build_kernel
# Author : Aldo Irvine
# Email : s3692192@student.rmit.edu.au
# Pi Version : 4
# Command list :
ECHO=/bin/echo
GIT=/usr/bin/git
LS=/bin/ls
CP=/bin/cp
MAKE=/usr/bin/make
TAR=/bin/tar
RM=/bin/rm
MONITOR=./performance_monitoring
# Install pre-requisites tools
$ECHO "0. Installing pre-requisite package to compile"
$ECHO
sudo apt install raspberrypi-kernel-headers build-essential bc git wget bison flex libssl-dev make
# 1. Checkout private repo (https://github.com/AldoIrvine111/usapA3)
# Use if statement to check if repo is not existed, cloned else pull to update latest changes made in repo.
$ECHO
$ECHO "1. Checkout private repo"
if [ -d usapA3 ]
then
cd usapA3 || exit
# Pull any changes made
$ECHO "Directory usapA3 exist, pulling latest master branch"
$GIT pull
cd ..
else
$ECHO "Directory usapA3 does not exist, cloning repo using SSH"
$GIT clone git@github.com:AldoIrvine111/usapA3.git
$LS -a
$ECHO "Complete cloning repo (usapA3)"
fi
# 2. Checkout raspberry pi kernel repository
# Use if statement to check if repo is not existed, cloned else pull to update latest changes made in repo.
$ECHO
$ECHO "2. Checkout raspbbery pi kernel repository"
if [ -d linux ]
then
cd linux || exit
# Pull any changes made
$ECHO "Directory linux exist"
cd ..
else
$ECHO "Directory linux does not exist, cloning repo"
$GIT clone --depth=1 https://github.com/raspberrypi/linux
$ECHO "Complete cloning repo (linux)"
fi
$ECHO
$LS -a
$ECHO
# 3. Copy your ".config" file into the right place
# Copy .config file from usapA3 to linux
cd usapA3 || exit
if [ -e .config ]
then
$ECHO "3. Copying .config to ../linux"
$CP .config ../linux
else
$ECHO ".config file does not exist"
exit 1
fi
$ECHO
# 4. Build kernel
# Initiate performance_monitoring script
$ECHO "Starting performance script"
cd .. || exit
$MONITOR &
# Capture the ID of performance_monitoring script
SID=$(ps -A | awk '/performance_mon/{print $1}')
$ECHO "$SID"
sleep 5
cd linux/ || exit
# Compile kernel
# Set kernel based on Pi version 4
$ECHO "4. Compiling kernel"
KERNEL=kernel7l
$ECHO "Using $KERNEL for Pi4"
$MAKE -j4 zImage modules dtbs
$ECHO "Image is ready"
$ECHO
# Send USR1 signal to stop performance_monitoring through the ID
kill -USR1 "$SID"
cd .. || exit
# 5. Make backup for /boot before pasting new kernel
IMAGE_NAME=raspberry-pi-2020-backup.tar.gz
if [ -e "$IMAGE_NAME" ]
then
$ECHO "Deleting old backup and make new backup"
$RM "$IMAGE_NAME"
$TAR -zcvf "$IMAGE_NAME" /boot
else
$ECHO "Backup"
$TAR -zcvf "$IMAGE_NAME" /boot
fi
$ECHO
$ECHO "Backup complete"
# 6. Copy new kernel to /boot
cd linux/ || exit
sudo $MAKE modules_install
sudo $CP arch/arm/boot/dts/*.dtb /boot/
sudo $CP arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo $CP arch/arm/boot/dts/overlays/README /boot/overlays/
sudo $CP arch/arm/boot/zImage /boot/$KERNEL.img