2 # Copyright (C) 2003 Erik Andersen <andersen@uclibc.org>
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Library General Public
6 # License as published by the Free Software Foundation; either
7 # version 2 of the License, or (at your option) any later
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU Library General Public License for more details.
15 # You should have received a copy of the GNU Library General
16 # Public License along with this program; if not, write to the
17 # Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 # Boston, MA 02111-1307 USA
22 echo "usage: "`basename $0`" -k KERNEL_SOURCE_DIRECTORY -t TARGET_ARCH"
24 echo "This utility scans the KERNEL_SOURCE_DIRECTORY directory and"
25 echo "checks that it contains well formed kernel headers suitable"
26 echo "for inclusion as the include/linux/ directory provided by"
29 echo "If the specified kernel headers are present and already"
30 echo "configured for the architecture specified by TARGET_ARCH,"
31 echo "they will be used as-is."
33 echo "If the specified kernel headers are missing entirely, this"
34 echo "script will return an error."
36 echo "If the specified kernel headers are present, but are either"
37 echo "not yet configured or are configured for an architecture"
38 echo "different than that specified by TARGET_ARCH, this script"
39 echo "will attempt to 'fix' the kernel headers and make them"
40 echo "suitable for use by uClibc. This fixing process may fail."
41 echo "It is therefore best to always provide kernel headers that"
42 echo "are already configured for the selected architecture."
44 echo "Most Linux distributions provide 'kernel-headers' packages"
45 echo "that are suitable for use by uClibc."
54 -k ) shift; if [ -n "$1" ]; then KERNEL_SOURCE=$1; shift; else usage; fi; ;;
55 -t ) shift; if [ -n "$1" ]; then TARGET_ARCH=$1; shift; else usage; fi; ;;
56 -n ) shift; HAS_MMU="n"; ;;
62 if [ ! -f "$KERNEL_SOURCE/Makefile" -a ! -f "$KERNEL_SOURCE/include/linux/version.h" ]; then
65 echo "The file $KERNEL_SOURCE/Makefile or $KERNEL_SOURCE/include/linux/version.h is missing!";
66 echo "Perhaps your kernel source is broken?"
72 if [ ! -d "$KERNEL_SOURCE" ]; then
75 echo "$KERNEL_SOURCE is not a directory";
81 if [ -f "$KERNEL_SOURCE/Makefile" ] ; then
82 # set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
83 eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile`
85 ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2`
86 VERSION=`echo "$ver" | cut -d '.' -f 1`
87 PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2`
88 if echo "$ver" | grep -q '-' ; then
89 SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1`
90 EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"`
92 SUBLEVEL=`echo "$ver" | cut -d '.' -f 3`
96 if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ]
98 echo "Unable to determine version for kernel headers"
99 echo -e "\tprovided in directory $KERNEL_SOURCE"
103 echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}"
107 echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'"
108 echo -e "\tprovided in directory $KERNEL_SOURCE"
111 # Create a symlink to include/asm
114 if [ ! -d "$KERNEL_SOURCE/include/asm" ]; then
117 echo "The symlink $KERNEL_SOURCE/include/asm is missing\!";
118 echo "Perhaps you forgot to configure your kernel source?";
119 echo "You really should configure your kernel source tree so I";
120 echo "do not have to try and guess about this sort of thing.";
122 echo "Attempting to guess a usable value....";
127 if [ "$TARGET_ARCH" = "powerpc" ];then
129 ln -fs $KERNEL_SOURCE/include/asm-ppc include/asm;
131 elif [ "$TARGET_ARCH" = "mips" ];then
133 ln -fs $KERNEL_SOURCE/include/asm-mips include/asm;
135 elif [ "$TARGET_ARCH" = "arm" ];then
137 ln -fs $KERNEL_SOURCE/include/asm-arm include/asm;
139 if [ ! -L $KERNEL_SOURCE/include/asm-arm/proc ] ; then
140 if [ ! -L proc ] ; then
142 ln -fs proc-armv proc;
143 ln -fs arch-ebsa285 arch);
146 elif [ "$TARGET_ARCH" = "cris" ]; then
148 ln -fs $KERNEL_SOURCE/include/asm-cris include/asm;
150 elif [ "$HAS_MMU" != "y" ]; then
151 if [ -d $KERNEL_SOURCE/include/asm-${TARGET_ARCH}nommu ] ; then
153 ln -fs $KERNEL_SOURCE/include/asm-${TARGET_ARCH}nommu include/asm;
157 ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm;
162 ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm;
166 # No guessing required.....
167 ln -fs $KERNEL_SOURCE/include/asm include/asm
171 # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory
172 if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then
173 ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic
177 # Create the include/linux symlink.
179 ln -fs $KERNEL_SOURCE/include/linux include/linux