On Saturday 28 August 2010 08:12:20 Denys Vlasenko wrote: > On Saturday 28 August 2010 12:47, Salim Tyrewala wrote: > > Hi, > > > > I'm new to busybox. I'm having trouble cross-compiling busybox to ARM > > using arm-elf-gcc. It doesn't find some include files byteswap.h for > > instance.
Building with a --target=arm-elf-gcc tuple means you're building a compiler targeting the bare metal, with no Linux support. This means it can build things that boot on the bare metal, like the u-boot binary, vmlinux, or stuff where you supply your own OS support as part of the C library (newlib/libgloss). But it's not set up to build userspace Linux programs. (It won't automatically link them against crt1.o or libc.so, hasn't got a C library's header files in its default #include search path, etc.) > > I can compile natively just fine using native gcc. > > > > I'm not sure what is happening differently when I cross-compile. Why > > isn't the include path include /usr/include where it should find all > > the headers? > > Whom do you ask? Are people who built your toolchain on this list? Cross compiling is a giant evil pile of suck that takes a _long_ time to explain properly. It's a bit like c++: you can get a very shallow understanding in about 5 minutes, but everything you know is a polite fiction which doesn't match what actually happens when you move out of the shallow end of the pool. Actually understanding what _is_ going on under the covers takes weeks to explain and months if not years to learn. (Meaning having learned lots of it I could sit down and write up a course on it in a few weeks, but it would take you months to absorb all the information.) > > I think I'm doing something stupid. Please help! > > I tried to cross-compiling to arm using Rob's toolchain > from Aboriginal Linux and it worked. Here's the script: > > > > #!/bin/sh > > set -e > > test -f cross-compiler-armv5l.tar.bz2 \ > > || wget > || http://impactlinux.com/aboriginal/downloads/binaries/cross-compiler-armv > ||5l.tar.bz2 > > rm -rf cross-compiler-armv5l > tar xf cross-compiler-armv5l.tar.bz2 > > test -f busybox-1.17.2.tar.bz2 \ > > || wget http://busybox.net/downloads/busybox-1.17.2.tar.bz2 > > rm -rf busybox-1.17.2 > tar xf busybox-1.17.2.tar.bz2 > > CROSS_COMPILE="$PWD/cross-compiler-armv5l/bin/armv5l-" > > cd busybox-1.17.2 > make CROSS_COMPILE="$CROSS_COMPILE" defconfig > sed > "s:^CONFIG_CROSS_COMPILER_PREFIX.*:CONFIG_CROSS_COMPILER_PREFIX=\"$CROSS_CO >MPILE\":" -i .config make Just specify CROSS_COMPILE= on the actual make command line. The configure stage doesn't need to know where it is. (Busybox configure is just doing feature selection, it should be target-agnostic.) # Extract the cross compiler and add it to the $PATH. tar xvjf cross-compiler-armv5l.tar.bz2 export PATH=$(pwd)/bin:$PATH # Extract busybox and cd into it. tar xvjf busybox-1.17.2.tar.bz2 cd busybox-1.17.2 # Build the sucker, letting busybox know it needs to use the "armv5l-" # prefix on tool names like armv5l-cc and armv5l-strip. make defconfig make CROSS_COMPILE=armv5l- Rob -- GPLv3: as worthy a successor as The Phantom Menace, as timely as Duke Nukem Forever, and as welcome as New Coke. _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
