-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreduce-kernel-size.sh
executable file
·168 lines (147 loc) · 3.19 KB
/
reduce-kernel-size.sh
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#!/bin/bash
#This script will reduce the storage size of the kernel by tuning kernel configuration.
SH_NAME=$0
OP_FLAG=$1
CONFIG_FILE=$2
DISABLE_OPTIONS="
CONFIG_KERNEL_GZIP
CONFIG_KERNEL_LZMA
CONFIG_KERNEL_LZO
CONFIG_SYSCTL_SYSCALL
CONFIG_KALLSYMS
CONFIG_KALLSYMS_ALL
CONFIG_BUG
CONFIG_ELF_CORE
CONFIG_KPROBES
CONFIG_MAGIC_SYSRQ
CONFIG_STACKTRACE
CONFIG_DEBUG_INFO
CONFIG_LATENCYTOP
CONFIG_FTRACE
CONFIG_KGDB
CONFIG_DEBUG_LL
"
ENABLE_OPTIONS="
CONFIG_KERNEL_XZ
CONFIG_CC_OPTIMIZE_FOR_SIZE
"
help_info()
{
# get the basename of this scripts
local shell_name=`basename $SH_NAME`
echo -e "v1.0\n"
echo -e "This script will downsize the kernel or check the downsizing result!\n"
echo -e "\033[32mUsage:\n\t./$shell_name <op_flag> <kernel_config_file>\033[0m\n"
echo -e "\t<op_flag>: operation.\n\t\t d - downsize kernel\n\t\t c - check the downsizing result"
echo -e "\t<kernel_config_file>: the configuration of your kernel.\n"
}
disable_config()
{
for var in $@
do
grep $var $CONFIG_FILE > /dev/null
if [ $? -eq 0 ]
then
grep "# $var is not set" $CONFIG_FILE > /dev/null
if [ $? -ne 0 ]
then
sed -i "s/$var\=y/\#\ $var\ is\ not\ set/g" $CONFIG_FILE
#echo "$var enable -> disable."
fi
else
echo "# $var is not set" >> $CONFIG_FILE
fi
done
}
enable_config()
{
for var in $@
do
grep $var $CONFIG_FILE > /dev/null
if [ $? -eq 0 ]
then
grep "$var=y" $CONFIG_FILE > /dev/null
if [ $? -ne 0 ]
then
sed -i "s/\#\ $var\ is\ not\ set/$var\=y/g" $CONFIG_FILE
#echo "$var disable -> enable."
fi
else
echo "$var=y" >> $CONFIG_FILE
#echo "$var none -> enable."
fi
done
}
disable_config_check()
{
for var in $@
do
grep $var $CONFIG_FILE > /dev/null
if [ $? -eq 0 ]
then
grep "# $var is not set" $CONFIG_FILE > /dev/null
if [ $? -eq 0 ]
then
echo -e "$var disabled?\n\tCheck result:\033[32m == RIGHT ==\033[0m\n"
else
echo -e "$var disabled?\n\tCheck result:\033[31m == ERROR ==\033[0m\n"
fi
else
echo -e "$var disabled?\n\tCheck result:\033[32m == RIGHT ==\033[0m\n"
fi
done
}
enable_config_check()
{
for var in $@
do
grep $var $CONFIG_FILE > /dev/null
if [ $? -eq 0 ]
then
grep "$var=y" $CONFIG_FILE > /dev/null
if [ $? -eq 0 ]
then
echo -e "$var enabled?\n\tCheck result: \033[32m == RIGHT ==\033[0m\n"
else
echo -e "$var enabled?\n\tCheck result: \033[31m == ERROR ==\033[0m\n"
fi
else
echo -e "$var enabled?\n\tCheck result: \033[31m == ERROR ==\033[0m\n"
fi
done
}
###############################################################################
if [ $# -ne 2 ]
then
help_info
exit
fi
if [ "x$OP_FLAG" != "xd" ]
then
if [ "x$OP_FLAG" != "xc" ]
then
help_info
echo -e "\t\033[31m== ERROR ==\033[0m <op_flag>: '$OP_FLAG' should be 'd' or 'c'"
exit
fi
fi
if [ ! -f "$CONFIG_FILE" ]
then
help_info
echo -e "\t\033[31m== ERROR ==\033[0m <kernel_config_file>: '$CONFIG_FILE' does not exist!"
exit
fi
case "$OP_FLAG" in
d)
disable_config $DISABLE_OPTIONS
enable_config $ENABLE_OPTIONS
;;
c)
disable_config_check $DISABLE_OPTIONS
enable_config_check $ENABLE_OPTIONS
;;
*)
help_info
echo -e "\t\033[31m== ERROR ==\033[0m <op_flag>: '$OP_FLAG' should be 'd' or 'c'"
;;
esac