From GNUstepWiki

Revision as of 09:15, 27 November 2006; view current revision
←Older revision | Newer revision→

Embedded GNUstep: mySTEP

There is a "fork" of GNUstep with optimizations for embedded systems. It is called "mySTEP" - my being the German pronunciation of the greek letter mu (for micro). More information can be found at and the source file tree at

Linksys NSLU2

The first thing you need to do is to generate a gcc cross compiler with Objective-C enabled. The GCC currently used on nslu2 only has C and C++ enabled when building the crosstool-native package.

  • Check out unslung source using follow command
cvs -z3 co unslung
  • Add in Objective-C as a language that needs to be enabled
perl -pi -e 's!^GCC_LANGUAGES=.*!GCC_LANGUAGES="c,c++,objc"!' toolchain/crosstool/
perl -pi -e 's!^GCC_LANGUAGES=.*!GCC_LANGUAGES="c,c++,objc"!' sources/crosstool-native/
  • Compile the cross-compiler for an ARM CPU using gcc (here: on Debian 3.1 Linux)
tjyang@debian:~/unslung$ pwd
tjyang@debian:~/unslung$ rm toolchain/crosstool/.configured
tjyang@debian:~/unslung$ rm toolchain/crosstool/.built
tjyang@debian:~/unslung$ unset LD_LIBRARY_PATH
tjyang@debian:~/unslung$ make toolchain
tjyang@debian:~/unslung$ /export/home/tjyang/slug/unslung/toolchain/armv5b-softfloat-linux/gcc-3.3.5-glibc-2.2.5/bin/armv5b-softfloat-linux-gcc -v

Reading specs from /export/home/tjyang/slug/unslung/toolchain/armv5b-softfloat-linux/gcc-3.3.5-glibc-2.2.5/lib/gcc-lib/armv5b-softfloat-linux/3.3.5/specs
Configured with: /export/home/tjyang/slug/unslung/toolchain/crosstool/build/armv5b-softfloat-linux/gcc-3.3.5-glibc-2.2.5/gcc-3.3.5/configure --target=armv5b-softfloat-linux --host=i686-host_pc-linux-gnu --prefix=/export/home/tjyang/slug/unslung/toolchain/armv5b-softfloat-linux/gcc-3.3.5-glibc-2.2.5 --with-float=soft --with-cpu=xscale --enable-cxx-flags=-mcpu=xscale --with-headers=/export/home/tjyang/slug/unslung/toolchain/armv5b-softfloat-linux/gcc-3.3.5-glibc-2.2.5/armv5b-softfloat-linux/include --with-local-prefix=/export/home/tjyang/slug/unslung/toolchain/armv5b-softfloat-linux/gcc-3.3.5-glibc-2.2.5/armv5b-softfloat-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++,objc --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.3.5
[tjyang@dual unslung]$
  • Do a simple test on the host machine
 [tjyang@dual bin]$ pwd
 [tjyang@dual bin]$
 [tjyang@dual bin]$ cat helloworld.m
 #include <stdio.h>
 int main(void)
    printf("Hello World\n");
 [tjyang@dual bin]$ ./gcc helloworld.m -lobjc -o helloworld
 [tjyang@dual bin]$ file helloworld
 hellow: ELF 32-bit MSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped
 [tjyang@dual bin]$ uname -a
 Linux dual 2.4.21-9.ELsmp #1 SMP Thu Jan 8 17:08:56 EST 2004 i686 i686 i386 GNU/Linux
 [tjyang@dual bin]$
  • The second step is to use this cross-compiler which only generates binaries for ARM CPUs to compile a native compiler. This compiler can only be run on a native ARM machine (here: nslu2).
[tjyang@dual unslung]$ make crosstool-native;make crosstool-native-ipk
[tjyang@dual unslung]$ ls -lrt builds/*.ipk
-rw-rw-r--    1 tjyang   tjyang    5569523 Feb 17 13:32 builds/crosstool-native-bin_0.28-rc37-3_armeb.ipk
-rw-rw-r--    1 tjyang   tjyang   12677163 Feb 17 13:33 builds/crosstool-native-lib_0.28-rc37-3_armeb.ipk
-rw-rw-r--    1 tjyang   tjyang    1722660 Feb 17 13:33 builds/crosstool-native-inc_0.28-rc37-3_armeb.ipk
-rw-rw-r--    1 tjyang   tjyang    7049858 Feb 17 13:34 builds/crosstool-native-arch-bin_0.28-rc37-3_armeb.ipk
-rw-rw-r--    1 tjyang   tjyang    9032668 Feb 17 13:34 builds/crosstool-native-arch-lib_0.28-rc37-3_armeb.ipk
-rw-rw-r--    1 tjyang   tjyang    7483945 Feb 17 13:35 builds/crosstool-native-arch-inc_0.28-rc37-3_armeb.ipk
-rw-rw-r--    1 tjyang   tjyang       1058 Feb 17 13:35 builds/crosstool-native_0.28-rc37-3_armeb.ipk

[tjyang@dual unslung]$ cp  /export/home/tjyang/slug/unslung/builds/*.ipk  /disk76/nslu2/tmp/
[tjyang@dual unslung]$

login into your nslu2, cd to where the ipk packages are.
run following commands.
bash-2.05b# for i in *.ipk
> do
> ipkg -force-overwrite install $i
> done
Upgrading crosstool-native-arch-bin on root from 0.28-rc37-3 to 0.28-rc37-5...
Configuring crosstool-native-arch-bin
Upgrading crosstool-native-arch-inc on root from 0.28-rc37-3 to 0.28-rc37-5...
Configuring crosstool-native-arch-inc
Upgrading crosstool-native-arch-lib on root from 0.28-rc37-3 to 0.28-rc37-5...
Configuring crosstool-native-arch-lib
Upgrading crosstool-native-bin on root from 0.28-rc37-3 to 0.28-rc37-5...
Configuring crosstool-native-bin
Upgrading crosstool-native-inc on root from 0.28-rc37-3 to 0.28-rc37-5...
Configuring crosstool-native-inc
Upgrading crosstool-native-lib on root from 0.28-rc37-3 to 0.28-rc37-5...
Configuring crosstool-native-lib
Upgrading crosstool-native on root from 0.28-rc37-3 to 0.28-rc37-5...
Configuring crosstool-native
bash-2.05b# date
Sat Feb 19 01:04:07 CST 2005
  • Try to compile the helloworld.m Objective-C file and run the helloworld binary on nslu2.
bash-2.05b# gcc helloworld.m -lobjc -o helloworld
bash-2.05b# file helloworld
helloworld: ELF 32-bit MSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped
bash-2.05b# ./helloworld
./helloworld: error while loading shared libraries: cannot open shared object file: No such file or directory
bash-2.05b# is in /opt/armeb/armv5b-softfloat-linux/lib, this path need to be in LD_LIBRARY_PATH.

bash-2.05b# ./helloworld
Hello World
bash-2.05b# uname -a
Linux LKG7BFA96 2.4.22-xfs #1 Sat Jan 1 21:34:54 HST 2005 armv5b unknown unknown GNU/Linux
bash-2.05b# date
Thu Feb 17 11:35:19 CST 2005
bash-2.05b# cat
/opt/armeb/armv5b-softfloat-linux/bin/gcc  helloworld.m -o helloworld -lobjc
bash-2.05b# cat /etc/profile
export LD_LIBRARY_PATH=/opt/lib:/lib:/opt/armeb/armv5b-softfloat-linux/lib
export PATH TERM

You can now use the Objective-C enabled GCC to compile the GNUstep core packages and GNUstep software. However, more strong testing is needed. Please add instructon below if you know how to run objective-c's testsuite in crosstool.


LiveCD for Intel

Current version is 1.0

Find the instructions to install and the CD itself at GNUSTEP LiveCD Homepage