This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
As you know, the term "from scratch" refers to the fact that absolutely no arm cross-development tools, no pre-compiled arm system libraries, and no native arm development environment, of any kind, are assumed already available. Apart from the host-native tools, everything else will be built from sources. This is a very common case if the cross-toolchain is to be used for embedded-systems development.
Now I have a question in building arm-linux toolchain on xscale with
linux-2.4.21 kernel header files. Before building bootstrap gcc, I
need to collect kernel header files. It was done such like the
following:
patch linux-2.4.21 with linux-2.4.21-rmk1.patch and
linux-2.4.21-rmk1-xxx-board.patch (this patch will specify
CROSS_COMPILE=arm-linux-)
make xxx-board_config make ARCH=arm oldconfig make dep (this step will use arm-linux- tools)
make ARCH=arm symlinks include/linux/version.h
The question is: Since the step 'make dep' is mandatory for linux-2.4.21, how the
Toolchain From Scratch can be achieved?
A good question, and one which has been much on my mind :-) Crosstool does it by not actually running make dep. If you're using 2.4, it's easy; just do 'make symlinks include/linux/version.h', and copy a couple crucial include directories. If you're using 2.6, it's harder. Here's the interesting bit from http://kegel.com/crosstool/crosstool-0.28-rc37/crosstool.sh (it might not be completely right, but it seems to work):
if test -f "$KERNELCONFIG" ; then cp $KERNELCONFIG .config fi if test -f .config; then yes "" | make ARCH=$ARCH oldconfig fi
# autodetect kernel version from contents of Makefile KERNEL_VERSION=`awk '/^VERSION =/ { print $3 }' $LINUX_DIR/Makefile` KERNEL_PATCHLEVEL=`awk '/^PATCHLEVEL =/ { print $3 }' $LINUX_DIR/Makefile`
case "$KERNEL_VERSION.$KERNEL_PATCHLEVEL.x" in 2.2.x|2.4.x) make ARCH=$ARCH symlinks include/linux/version.h ;; 2.6.x) case $ARCH in sh*) # sh does secret stuff in 'make prepare' that can't be triggered separately, # but happily, it doesn't use target gcc, so we can use it. make ARCH=$ARCH prepare include/linux/version.h ;; arm*|cris*) make ARCH=$ARCH include/asm include/linux/version.h include/asm-$ARCH/.arch ;; mips*) # for linux-2.6, 'make prepare' for mips doesn't # actually create any symlinks. Hope generic is ok. # Note that glibc ignores all -I flags passed in CFLAGS, # so you have to use -isystem. make ARCH=$ARCH include/asm include/linux/version.h TARGET_CFLAGS="$TARGET_CFLAGS -isystem $LINUX_DIR/include/asm-mips/mach-generic" ;; *) make ARCH=$ARCH include/asm include/linux/version.h ;; esac ;; *) abort "Unsupported kernel version $KERNEL_VERSION.$KERNEL_PATCHLEVEL" esac
mkdir -p $HEADERDIR cp -r include/linux $HEADERDIR cp -r include/asm-${ARCH} $HEADERDIR/asm cp -r include/asm-generic $HEADERDIR/asm-generic
-- Trying to get a job as a c++ developer? See http://kegel.com/academy/getting-hired.html
------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |