====== 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" * 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 * Download and extract my {{howto:build_dns323.tgz|build_dns323.tgz}} the GPL directory tar xzf build_dns323.tgz * Download the GPL sources: ./wget_GPL * 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/gcc-uclibc-3.3.mk Change the so that the path defined on line 23 reads: \\ \\ GCC_SITE:=ftp://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION) \\ \\ 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: ./build_uclibc 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 libuClibc-0.9.28.so libc.so **Note** For each build script below - extract the corresponding file from the zips directory. Example: tar xzf zips/linux-2.6.12.6.tgz This creates a directory called **linux-2.6.12.6** 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-2.6.12.6 ./build_kernel * Build the **u-boot loader** ./build_u-boot * Build **busybox** The script needs a change; add line **export CC=arm-linux-gcc**, then execute. ./build_busybox * Build **at** ./build_at **Notes:** 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.