====== Toolchain to develop software for DNS-300 ======
**Toolchain** is set of tools to compile software for some device/platform.\\
Two types of toolchains are possible:
* toolchain for crosscompile - to compile software on PC compatible computer
* native toolchain - to compile software directly on DNS-300
I've created my toolchains using following software:
* binutils-2.17
* gcc-4.1.1
* glibc-2.2.5 (binaries from OpenRG toolchain)
* header files for glibc-2.2.5 from OpenRG toolchain
* Linux kernel header files from DLink's Linux kernel for DNS-312H
I've created this manual some time later after successful creating of toolchain, so I can forget something...
===== Toolchain for crosscompile =====
==== How to create Crosscompile toolchain ====
=== Prepare directories structure ===
mkdir -p /opt/src
mkdir -p /opt/build
mkdir -p /opt/toolchain
mkdir -p /opt/toolchain-native
=== Create symlinks for native compiler ===
cd /usr/bin/
ln -s ar i686-pc-linux-gnu-ar
ln -s as i686-pc-linux-gnu-as
ln -s cpp i686-pc-linux-gnu-cpp
ln -s gcc i686-pc-linux-gnu-gcc
ln -s gcov i686-pc-linux-gnu-gcov
ln -s ld i686-pc-linux-gnu-ld
ln -s ldd i686-pc-linux-gnu-ldd
ln -s nm i686-pc-linux-gnu-nm
ln -s objcopy i686-pc-linux-gnu-objcopy
ln -s objdump i686-pc-linux-gnu-objdump
ln -s ranlib i686-pc-linux-gnu-ranlib
=== Configure and make binutils ===
cd /opt/src
tar -xzf ./binutils-2.17.tar.gz
mkdir -p /opt/build/bilutils-2.17
cd /opt/build/binutils-2.17/
../../src/binutils-2.17/configure \
--prefix=/opt/toolchain \
--target=armv4lt-dns300-linux \
--with-sysroot=/opt/toolchain-native/usr/local/
make
make install
=== Configure GCC ===
cd /opt/src
tar -xzf ./gcc-4.1.1.tar.gz
mkdir -p /opt/build/gcc-4.1.1-cross
cd /opt/build/gcc-4.1.1-cross/
PATH=/opt/toolchain/bin:$PATH \
../../src/gcc-4.1.1/configure --prefix=/opt/toolchain \
--build=i686-pc-linux-gnu \
--host=i686-pc-linux-gnu \
--srcdir=../../src/gcc-4.1.1 \
--with-sysroot=/opt/toolchain/armv4lt-dns300-linux \
--with-as=/opt/toolchain/bin/armv4lt-dns300-linux-as \
--with-ld=/opt/toolchain/bin/armv4lt-dns300-linux-ld \
--enable-languages=c \
--target=armv4lt-dns300-linux \
--with-build-time-tools=/opt/toolchain/armv4lt-dns300-linux/bin \
--with-float=soft \
--disable-multilib
To be continued...
===== Native toolchain for DNS-300 =====
I've compiled native toolchain by my crosscompile toolchain.
Maybe sometime, I'll describe compilation procedure, but now you can just download my native toolchain and use it.
==== How to install native toolchain ====
- First you should have installed IPKG package **libfloat**, because it's necessary for my toolchain
- Download my archive [[http://dns-300.sergeyzh.org/files/dns300-toolchain-1.1.tar.gz]]
- Copy archive to DNS-300.
- Unpack this to somewhere. For example I have it in ''/home/sergey/toolchain/''.\\ ''cd /home/sergey/toolchain ; tar -xzf dns300-toolchain-1.1.tar.gz''
- Create symbolic link /opt/toolchan-native/ pointing to your unpacked toolchain.\\ For my system it is command: ''ln -s /home/sergey/toolchain /opt/toolchain-native''
==== How to use native toolchain ====
Note: my toolchain contains only compiler + gcc libraries from OpenRG. To compile most programs you should compile and install additional binaries like: awk, automake, findutils, etc...
- Add path to toolchain to PATH. ''export PATH=/opt/toolchain-native/usr/local/bin:$PATH''
- Run gcc. You should see message:
root@DNS-300:/# gcc
gcc: no input files
root@DNS-300:/#
So now you can use GCC to compile very simple programs, like hello-world.c. To compile complex project you should compile additional binaries. First try to compile sed to test.
==== How to compile sed for Toolchain ====
- Download sed archive from GNU FTP.
- Unpack it somewhere. For example: ''/home/sergey/src/sed/''
- Configure this with your toolchain.
./configure --prefix=/opt/toolchain-native/usr/local/
- Compile this: ''make''
- Install this: ''make install''. This step is unecessary, because toolchain contains sed already, but you can test how 'install' works.
==== How to compile something to use with IPKG system ====
- Configure source with --prefix=/home/root/opt/usr , because other programs in IPKG for DNS-300 are compiled with the same prefix.
- Install your program into /home/root/..., by ''make install''
- Test your program.
- Create IPKG module for this. :-)