This is an old revision of the document!

Cross Compile Environment for DNS-323

Please feel free to update, cleanup or correct this page

What is this? This document shows how to build the D-LINK DNS-323 GPL toolchain, kernel and u-boot loader

Things you will need first

  • Development System x86 based Debian based Ubuntu “Dapper” (6.06)
  • You will need the following tools: bison flex gcc-3.4 byacc g++-3.4 gettext patch
    • Check your active compiler version with gcc -v
    • If your compiler is newer then gcc-3.4 then change the /usr/bin/gcc symlink to point to /usr/bin/gcc-3.4 for building the toolchain - restore it when you are done
    • If g++ is newer than version 3.4 also change the /usr/bin/g++ symlink accordingly.
  • Make sure libncurses5-dev is installed or you'll get termcap not found error
  • Create a directory to build your source in
mkdir GPL
  • Create a directory to download the sources into
mkdir GPL/zips
  • Change into the GPL directory
cd GPL
tar xzf build_dns323.tgz
  • Download the GPL sources:
  • Build the ARM UCLIBC toolchain

Fix the bug in the script build_uclibc: on line 24, replace .tar.gz with .tgz (obviously the extension of the tarballs changed)

The path to the gcc sources has changed, so we need to fix it:

tar xzf zips/uclibc-toolchain-src-20040609.tgz

edit the file: uclibc-toolchain-src-20040609/gcc-3.3.x/make/ Change the so that the path defined on line 23 reads:


Now, since we have already uncompressed the tar file, we comment out lines 23 and 24 of build_uclibc by adding a # to that start of each line.
Save the modified file, then run the script:


And now you must fix your symlinks. cd to $GPL/uclibc-toolchain-src-20040609/gcc-3.3.x/toolchain_arm/arm-linux-uclibc/lib and fix all broken links:

   for lib in crypt dl m nsl pthread resolv rt thread_db util; do ln -sf lib${lib}-* lib${lib}.so; done
   ln -sf

Note For each build script below - extract the corresponding file from the zips directory. Example:

   tar xzf zips/linux-

This creates a directory called linux- that build_kernel knows about.

  • Build the ARM kernel

fix bug in script build_kernel: on line 5, replace linux-2.6.6 by linux-

  • Build the u-boot loader. The script defaults to u-boot_1_1_1, but newer boxes use 1.7.3 - If you want to do so, you have to change the directory in the build_u-boot file accordingly and remove all .depend files from the u-boot_1_7_3 directory and its subdirectories.
  • Build busybox

The script needs a change; add line export CC=arm-linux-gcc, then execute.

  • Build at


The ./build_uclibc script creates a script called setpath that can be used to compile other ARM uclibc programs later on.

Many of the remaining D-LINK sources have not been configured for being cross-compiled. In fact, the “Readme.txt” file they supply with the GPL sources has instruction that are just plain wrong.


Personal Tools