Hi Philippe, I figured out where to link/copy every file. There was no need to modify any file in ksrc/...
Here is my patch. The new option to prepare-kernel.sh is: --outpatch=<patchfiletocreate> <tempdir> For instance you can run: > mkdir /tmp/temptree > ./scripts/prepare-kernel.sh --outpatch=/tmp/patch.diff /tmp/temptree I tested that at least I get the same result as before without using the new option. I have only tested with the Linux 2.6.15 source tree, not with Linux 2.4. But as you can see, my modifications are simple and conservative, so it should work. Regards, -- Romain LENGLET
--- xenomai/ChangeLog 2006-02-24 20:39:57.302874592 +0900 +++ xenomai-new/ChangeLog 2006-02-24 20:43:46.811983904 +0900 @@ -1,3 +1,10 @@ +2006-02-24 Romain Lenglet <[EMAIL PROTECTED]> + + * scripts/prepare-kernel.sh: Added option to generate a diff file + instead of actually modifying the Linux source tree. Cleanup to not + link / copy files for other architectures than the built architecture, + and to not link / copy some files twice. + 2006-02-22 Gilles Chanteperdrix <[EMAIL PROTECTED]> * include/nucleus/timer.h: Use binary heaps for the aperiodic --- xenomai/CREDITS 2006-02-22 10:28:53.229253976 +0900 +++ xenomai-new/CREDITS 2006-02-24 20:39:16.378096104 +0900 @@ -80,7 +80,7 @@ N: Romain Lenglet E: <[EMAIL PROTECTED]> -D: Man pages. +D: Man pages, and patch generation script changes. N: Heikki Lindholm E: [EMAIL PROTECTED] --- xenomai/scripts/prepare-kernel.sh 2006-02-24 19:48:17.038186464 +0900 +++ xenomai-new/scripts/prepare-kernel.sh 2006-02-24 20:38:32.647744128 +0900 @@ -1,37 +1,105 @@ #! /bin/bash set -e -do_links() { - ( if test -x $2; then - cd $2 && - find . \( -name Makefile -o -name $config_file -o -name '*.[chS]' \) | - while read f; do - if test ! -e $1/$f; then rm -f $f; fi - done; else true; fi && - cd $1 && - find . \( -name Makefile -o -name $config_file -o -name '*.[chS]' \) | - while read f; do - f=`echo $f | cut -d/ -f2-` - d=`dirname $f` - mkdir -p $2/$d && ln -sf $1/$f $2/$f - done ) +patch_copytempfile() { + file="$1" + if ! test -f "$temp_tree/$file"; then + subdir=`dirname "$file"` + mkdir -p "$temp_tree/$subdir" + cp "$linux_tree/$file" "$temp_tree/$file" + fi } -usage='usage: prepare-kernel --linux=<linux-tree> --adeos=<adeos-patch> [--arch=<arch>]' +patch_append() { + file="$1" + if test "x$output_patch" = "x"; then + realfile="$linux_tree/$file" + else + patch_copytempfile "$file" + realfile="$temp_tree/$file" + fi + cat >> "$realfile" +} + +patch_ed() { + file="$1" + if test "x$output_patch" = "x"; then + realfile="$linux_tree/$file" + else + patch_copytempfile "$file" + realfile="$temp_tree/$file" + fi + ed -s "$realfile" > /dev/null +} + +patch_link() { + recursive="$1" # "r" or "n" + link_makefiles="$2" # "m" or "n" + target_dir="$3" + link_dir="$4" + + ( + recursive_opt="" + if test x$recursive != xr; then + recursive_opt="-maxdepth 1" + fi + link_makefiles_opt="" + if test x$link_makefiles = xm; then + link_makefiles_opt="-name Makefile -o" + fi + + cd $xenomai_root/$target_dir && + find . $recursive_opt \ + \( $link_makefiles_opt -name $config_file -o -name '*.[chS]' \) | + while read f; do + f=`echo $f | cut -d/ -f2-` + d=`dirname $f` + if test "x$output_patch" = "x"; then + mkdir -p $linux_tree/$link_dir/$d && \ + rm -f $linux_tree/$link_dir/$f && \ + ln -sf $xenomai_root/$target_dir/$f $linux_tree/$link_dir/$f + else + mkdir -p $temp_tree/$link_dir/$d + cp $xenomai_root/$target_dir/$f $temp_tree/$link_dir/$f + fi + done + ) + +} + +generate_patch() { + ( + cd "$temp_tree" + find . -type f | + while read f; do + diff -Naurd "$linux_tree/$f" "$f" | + sed -e "s,^--- ${linux_tree}/\.\(/.*\)$,--- linux\1," \ + -e "s,^+++ \.\(/.*\)$,+++ linux-patched\1," + done + ) +} + + +usage='usage: prepare-kernel --linux=<linux-tree> --adeos=<adeos-patch> [--arch=<arch>] [--outpatch=<file> <tempdir>]' me=`basename $0` while test $# -gt 0; do case "$1" in --linux=*) - linux_tree=`echo $1|sed -e 's,--linux=\\(.*\\)$,\\1,g'`; + linux_tree=`echo $1|sed -e 's,^--linux=\\(.*\\)$,\\1,g'`; linux_tree=`eval "echo $linux_tree"` ;; --adeos=*) - adeos_patch=`echo $1|sed -e 's,--adeos=\\(.*\\)$,\\1,g'`; + adeos_patch=`echo $1|sed -e 's,^--adeos=\\(.*\\)$,\\1,g'`; adeos_patch=`eval "echo $adeos_patch"` ;; --arch=*) - linux_arch=`echo $1|sed -e 's,--arch=\\(.*\\)$,\\1,g'`; + linux_arch=`echo $1|sed -e 's,^--arch=\\(.*\\)$,\\1,g'`; + ;; + --outpatch=*) + output_patch=`echo $1|sed -e 's,^--outpatch=\\(.*\\)$,\\1,g'`; + shift + temp_tree=`echo $1|sed -e 's,^--tempdir=\\(.*\\)$,\\1,g'`; ;; --verbose) verbose=1 @@ -41,8 +109,8 @@ exit 0 ;; *) - echo "$me: unknown flag: $1" - echo "$usage" + echo "$me: unknown flag: $1" >&2 + echo "$usage" >&2 exit 1 ;; esac @@ -82,6 +150,22 @@ exit 2 fi +# Create an empty output patch file, and initialize the temporary tree. +if test "x$output_patch" != "x"; then + + if test ! -d $temp_tree; then + echo "$me: $temp_tree (temporary tree) is not an existing directory" + exit 2 + fi + temp_tree=`cd $temp_tree && pwd` + + patchdir=`dirname $output_patch` + patchdir=`cd $patchdir && pwd` + output_patch=$patchdir/`basename $output_patch` + echo > "$output_patch" + +fi + # Infer the default architecture if unspecified. if test x$linux_arch = x; then @@ -159,13 +243,17 @@ linux_version="$linux_VERSION.$linux_PATCHLEVEL.$linux_SUBLEVEL$linux_EXTRAVERSION" +if test x$verbose = x1; then echo "Preparing kernel $linux_version in $linux_tree..." +fi if test -r $linux_tree/include/linux/ipipe.h; then + if test x$verbose = x1; then echo "Adeos found - bypassing patch." + fi elif test -r $linux_tree/include/linux/adeos.h; then - echo "$me: Deprecated Adeos (oldgen) support found in $linux_tree;" - echo "Upgrade required to Adeos/I-pipe (newgen)." + echo "$me: Deprecated Adeos (oldgen) support found in $linux_tree;" >&2 + echo "Upgrade required to Adeos/I-pipe (newgen)." >&2 exit 2 else if test x$adeos_patch = x; then @@ -191,7 +279,7 @@ curdir=$PWD cd $linux_tree && patch --dry-run -p1 -f < $adeos_patch || { cd $curdir; - echo "$me: Unable to patch kernel $linux_version with `basename $adeos_patch`." + echo "$me: Unable to patch kernel $linux_version with `basename $adeos_patch`." >&2 exit 2; } patch -p1 -f -s < $adeos_patch @@ -201,9 +289,11 @@ adeos_version=`grep '^#define.*IPIPE_ARCH_STRING.*"' $linux_tree/include/asm-$linux_arch/ipipe.h|sed -e 's,.*"\(.*\)"$,\1,'` if test \! x$adeos_version = x; then + if test x$verbose = x1; then echo "Adeos/$linux_arch $adeos_version installed." + fi else - echo "$me: $linux_tree has no Adeos support for $linux_arch" + echo "$me: $linux_tree has no Adeos support for $linux_arch" >&2 exit 2 fi @@ -218,22 +308,23 @@ config_file=Kconfig if ! grep -q XENOMAI $linux_tree/init/Kconfig; then - sed -e "s,@LINUX_ARCH@,$linux_arch,g" $xenomai_root/scripts/Kconfig.frag >> $linux_tree/init/Kconfig + sed -e "s,@LINUX_ARCH@,$linux_arch,g" $xenomai_root/scripts/Kconfig.frag | + patch_append init/Kconfig fi if ! grep -q CONFIG_XENOMAI $linux_tree/arch/$linux_arch/Makefile; then p="drivers-\$(CONFIG_XENOMAI) += arch/$linux_arch/xenomai/" - ( echo ; echo $p ) >> $linux_tree/arch/$linux_arch/Makefile + ( echo ; echo $p ) | patch_append arch/$linux_arch/Makefile fi if ! grep -q CONFIG_XENOMAI $linux_tree/drivers/Makefile; then p="obj-\$(CONFIG_XENOMAI) += xenomai/" - ( echo ; echo $p ) >> $linux_tree/drivers/Makefile + ( echo ; echo $p ) | patch_append drivers/Makefile fi if ! grep -q CONFIG_XENOMAI $linux_tree/kernel/Makefile; then p="obj-\$(CONFIG_XENOMAI) += xenomai/" - ( echo ; echo $p ) >> $linux_tree/kernel/Makefile + ( echo ; echo $p ) | patch_append kernel/Makefile fi ;; @@ -247,7 +338,7 @@ config_file=Config.in if ! grep -q CONFIG_XENO $linux_tree/Makefile; then - ed -s $linux_tree/Makefile > /dev/null <<EOF + patch_ed Makefile <<EOF /DRIVERS := \$(DRIVERS-y) ^r $xenomai_root/scripts/Modules.frag @@ -255,10 +346,10 @@ wq EOF fi - for defconfig_file in .config $linux_tree/arch/$linux_arch/defconfig; do - if test -w $defconfig_file; then - if ! grep -q CONFIG_XENO $defconfig_file; then - ed -s $defconfig_file > /dev/null <<EOF + for defconfig_file in .config arch/$linux_arch/defconfig; do + if test -w $linux_tree/$defconfig_file; then + if ! grep -q CONFIG_XENO $linux_tree/$defconfig_file; then + patch_ed $defconfig_file <<EOF $ r $xenomai_root/scripts/defconfig.frag . @@ -268,7 +359,7 @@ fi done if ! grep -q CONFIG_XENO $linux_tree/arch/$linux_arch/Makefile; then - ed -s $linux_tree/arch/$linux_arch/Makefile > /dev/null <<EOF + patch_ed arch/$linux_arch/Makefile <<EOF $ a @@ -281,7 +372,7 @@ EOF fi if ! grep -q CONFIG_XENO $linux_tree/drivers/Makefile; then - ed -s $linux_tree/drivers/Makefile > /dev/null <<EOF + patch_ed drivers/Makefile <<EOF /include \$(TOPDIR)\/Rules.make i mod-subdirs := xenomai @@ -292,7 +383,7 @@ EOF fi if ! grep -q CONFIG_XENO $linux_tree/kernel/Makefile; then - ed -s $linux_tree/kernel/Makefile > /dev/null <<EOF + patch_ed kernel/Makefile <<EOF /include \$(TOPDIR)\/Rules.make i mod-subdirs := xenomai @@ -304,7 +395,7 @@ EOF fi if ! grep -iq xenomai $linux_tree/arch/$linux_arch/config.in; then - ed -s $linux_tree/arch/$linux_arch/config.in > /dev/null <<EOF + patch_ed arch/$linux_arch/config.in <<EOF $ a @@ -321,7 +412,7 @@ *) - echo "$me: Unsupported kernel version $linux_VERSION.$linux_PATCHLEVEL.x" + echo "$me: Unsupported kernel version $linux_VERSION.$linux_PATCHLEVEL.x" >&2 exit 2 ;; @@ -331,15 +422,34 @@ # there, so that we don't pollute the Xenomai source tree with # compilation files. -do_links $xenomai_root/ksrc/arch/$xenomai_arch $linux_tree/arch/$linux_arch/xenomai -do_links $xenomai_root/ksrc $linux_tree/kernel/xenomai -do_links $xenomai_root/ksrc/drivers $linux_tree/drivers/xenomai -do_links $xenomai_root/include/asm-$xenomai_arch $linux_tree/include/asm-$linux_arch/xenomai -do_links $xenomai_root/include/asm-generic $linux_tree/include/asm-generic/xenomai -do_links $xenomai_root/include $linux_tree/include/xenomai +patch_link r m ksrc/arch/$xenomai_arch arch/$linux_arch/xenomai +patch_link n m ksrc/ kernel/xenomai +patch_link n m ksrc/arch kernel/xenomai/arch +patch_link r m ksrc/arch/generic kernel/xenomai/arch/generic +patch_link r m ksrc/nucleus kernel/xenomai/nucleus +patch_link r m ksrc/skins kernel/xenomai/skins +patch_link r m ksrc/drivers drivers/xenomai +patch_link r n include/asm-$xenomai_arch include/asm-$linux_arch/xenomai +patch_link r n include/asm-generic include/asm-generic/xenomai +patch_link n n include include/xenomai +for d in include/* ; do + if test -d $d -a -z "`echo $d | grep '^include/asm-'`"; then + destdir=`echo $d | sed -e 's,^\(include\)\(/.*\)$,\1/xenomai\2,'` + patch_link r n $d $destdir + fi +done -echo 'Links installed.' +if test "x$output_patch" != "x"; then + if test x$verbose = x1; then + echo 'Generating patch.' + fi + generate_patch > "$output_patch" +fi +if test x$verbose = x1; then +echo 'Links installed.' echo 'Build system ready.' +fi exit 0 +
_______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core