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
|
#!/usr/bin/perl
use MDK::Common;
my @kernels = group_by2(
'smp' => 'SMP',
'xen0' => 'XEN0',
'default' => 'DEFAULT',
'legacy' => 'LEGACY',
'enterprise' => 'ENTERPRISE',
'secure' => 'SECURE',
'-i686-up-4GB' => 'I686_UP_4GB',
'-i686-up-64GB' => 'I686_UP_64GB',
'-p3-smp-64GB' => 'P3_SMP_64GB',
'-i586-up-1GB' => 'I586_UP_1GB',
'desktop' => 'DESKTOP',
'desktopsmp' => 'DESKTOPSMP',
'desktop-i586' => 'DESKTOP_I586',
'desktopsmp-i586' => 'DESKTOPSMP_I586',
'laptop' => 'LAPTOP',
'laptopsmp' => 'LAPTOPSMP',
'server' => 'SERVER',
'serversmp' => 'SERVERSMP',
'*' => 'UP', #- keep it the last
);
my $init_vars = join(';', map { "$_->[1]=0" } @kernels);
my $set_vars = join('',
map {
<<EOF
$_->[0])
$_->[1]=1;;
EOF
} @kernels);
my $defines = join("\n",
map {
<<EOF
#ifndef __BOOT_KERNEL_$_->[1]
#define __BOOT_KERNEL_$_->[1] \$$_->[1]
#endif
EOF
} @kernels);
printf(<<'KHEADER', $init_vars, $set_vars, $defines);
#!/bin/sh
# (c) Mandriva, Pixel <pixel@mandriva.com>
# $Id: kheader.pl 84121 2006-11-14 16:12:11Z pixel $
#
# kheader: Regenerates kernel headers
#
# chkconfig: 235 95 20
# description: This shell script regenerates the /boot/kernel.h header for \
# /usr/src/linux/include/{autoconf,version}.h
#
### BEGIN INIT INFO
# Provides: kheader
# Default-Start: 2 3 5
# Short-Description: Regenerates kernel headers
# Description: This shell script regenerates the /boot/kernel.h header for
# /usr/src/linux/include/{autoconf,version}.h
### END INIT INFO
. /etc/rc.d/init.d/functions
: ${KERNEL_H:=/boot/kernel.h}
: ${HEADERFILE:=${KERNEL_H}-`uname -r`}
[ -d $(dirname $HEADERFILE) ] || exit 0
table() {
%s
# this will do the trick until gprintf.py expands variables
echo_no_gprintf="echo"
ver=$(uname -r)
mdk="md[kv]"
k=$($echo_no_gprintf $ver|sed "s/.*$mdk//")
# for tmb & multimedia kernels
case $ver in
*-desktop-*)
k=desktop$k;;
*-laptop-*)
k=laptop$k;;
*-server-*)
k=server$k;;
esac
case $k in
%s
esac
# since 2.6.17-2mdv, default kernels can be SMP enabled by
# default, hence a new name
$echo_no_gprintf "$UP:$ver" | grep -q "^1:.*$mdk" && {
case $ver in
# XXX simpler to maintain a skip list
[01].*|2.[0-5].*|2.6.[0-9]-*|2.6.1[0-6]-*|2.6.17-1mdk);;
*) UP=0; DEFAULT=1;;
esac
}
unset echo_no_gprintf
}
generate () {
table;
# do not overwrite exsisting header, it confuses
# kernel make and forces it to recompile everything
cat > $HEADERFILE.tmp << EOF
/* This file is automatically generated at boot time. */
#ifndef __BOOT_KERNEL_H_
#define __BOOT_KERNEL_H_
%s
#endif
EOF
mv -f $HEADERFILE.tmp $HEADERFILE
if [ -f $KERNEL_H ] ; then
rm -f $KERNEL_H
fi
ln -sf $HEADERFILE $KERNEL_H
}
function remove_orphaned {
local version= i=
for i in /boot/kernel.h-* /boot/System.map-* /boot/config-*; do
version=${i#*-}
[[ -f /boot/vmlinuz-${version} ]] || rm -f ${i}
done
}
case $1 in
start)
# We don't log this command, because most users don't want to hear this (c) Chmou
generate
touch /var/lock/subsys/kheader
;;
restart)
;;
reload)
generate
;;
stop)
remove_orphaned;
rm -f /var/lock/subsys/kheader
;;
status)
;;
*)
gprintf "Usage: %%s\n" "$(basename $0) {start|stop|reload|restart}"
exit 0
;;
esac
KHEADER
|