DGND3700 V1 Rebuild Firmware Toolchain

From richud.com
Jump to navigation Jump to search

Download pre-built toolchain

If you just want to download pre-built working toolchain, click here, built 29/Oct/2013

(previous build 16/Feb/2013 )

Creating the toolchain manually

So you found the toolchain is missing in the GPL firmware 'package'!, you need to find it , fix it and build it!

Download Requirements

Hardy Heron 32bit

(You need a relatively old linux release as the build requirements are for old versions of various tools)

http://releases.ubuntu.com/8.04/ubuntu-8.04.4-desktop-i386.iso

Create a new virtual machine with defaults, 8 Gb HDD is fine and install Hardy.

Suggest installing Virtualbox additions (if using VrtualBox) which makes it resizable and easier to work with.

Don't try and share the working folder with your machine as output requires soft and hard links, which vboxsf nor samba support. (didn't try NFS?)

cd /media/cdrom
sudo ./VBoxLinuxAdditions.run

Install prerequistes packages for buildroot

Once installed get some needed packages. I think this is everything extra from a default install.

sudo apt-get install bison build-essential bzip2 dpkg-dev flex g++ g++-4.2 gawk gettext libbz2-1.0 libc6 libc6-dev libc6-i686 \
 libncurses5-dev libperl5.8 libstdc++6-4.2-dev libtimedate-perl linux-libc-dev m4 patch perl perl-base perl-modules texinfo

Toolchain buildroot

The readme says the correct toolchain is this, uclibc-crosstools-gcc-4.2.3-3_LFS.tar.bz2 found by [ali1234] from here;

ftp://downloads.netgear.com/files/GPL/EVG2000_v2.2.0.12_with_toolchain_src.tar.bz2.zip

From this spaghetti mess of a nested archive (a microcosm of how this firmware is constructed) extract contents of toolchain.tar.bz2 & keep all these files somewhere, discard all the other crap.

 > EVG2000_v2.2.0.12_with_toolchain_src.tar.bz2.zip
  > EVG2000_v2.2.0.12_with_toolchain_src.tar.bz2
   > EVG2000_v2.2.0.12_with_toolchain_src
    > toolchain_EVG2000.zip
     > toolchain.tar.bz2
      > toolchain

Which should contain 

toolchain
├── binutils-2.18.tar.bz2
├── buildroot.config
├── buildroot.src.tar.bz2
├── build_toolchain_readme.txt
├── gcc-4.2.3.tar.bz2
├── gdb-6.6.tar.bz2
├── HowTo.txt
├── uClibc-0.9.29.tar.tar
└── uClibc.config

configure, fix and add to the buildroot toolchain

  • the pre-built one doesn't work so you have to build it yourself!
  • although buildroot fetches files most of the sources are out of date so get them yourself first.
  • you need to create missing folders, fetch missing files, patch incorrect configs, get missing uClibc patches, rename incorrectly named files (.tar.tar wtf!)
#go to root of toolchain folder above
cd <wherever you extracted it>/toolchain

#extract buildroot
tar jxvf buildroot.src.tar.bz2 

#create output toolchains folder
sudo mkdir -p /opt/toolchains
sudo chmod -R a+rw /opt/toolchains

#create missing folders
mkdir -p buildroot/toolchain/ccache buildroot/dl
touch buildroot/toolchain/ccache/Config.in
touch buildroot/toolchain/ccache/Config.in.2
touch buildroot/toolchain/ccache/ccache.mk

#fix uClibc config file for 3 wrong options, and you must set correct location for KERNEL_HEADERS
cp uClibc.config uClibc.fixed.config
sed -i "s/UCLIBC_SUSV3_LEGACY=y/# UCLIBC_SUSV3_LEGACY is not set/" uClibc.fixed.config
sed -i "s/UCLIBC_HAS_FOPEN_LARGEFILE_MODE=y/# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set/" uClibc.fixed.config
sed -i "s/# UCLIBC_HAS_WCHAR is not set/UCLIBC_HAS_WCHAR=y/" uClibc.fixed.config
sed -i "s@KERNEL_HEADERS.*@KERNEL_HEADERS=\"$(pwd)/buildroot/toolchain_build_mips/linux/include\"@" uClibc.fixed.config

#populate dl folder as buildroot's auto-download liks are duff
cp uClibc-0.9.29.tar.tar buildroot/dl/uClibc-0.9.29.tar.bz2
cp gcc-4.2.3.tar.bz2 buildroot/dl
cp gdb-6.6.tar.bz2 buildroot/dl
cp binutils-2.18.tar.bz2 buildroot/dl
wget -P buildroot/dl http://ftp.gnu.org/gnu/gmp/gmp-4.2.2.tar.bz2 
wget -P buildroot/dl ftp://82.96.64.7/pub/linux/kernel/v2.6/linux-2.6.21.5.tar.bz2
wget -P buildroot/dl http://www.atmel.no/buildroot/source/mirror/mpfr-2.3.0.tar.bz2
wget -P buildroot/dl http://www.atmel.no/buildroot/source/mirror/mpfr-2.3.0.patch

#add newer patches from github
for i in 009-fix_getaddrinfo_infinite_loop.patch 100-termios.patch 110-compat_macros.patch 120-adjtimex.patch 130-compile_fixes.patch 130-sockets_throw.patch 140-fix-endless-recursion-in-pthread.patch 141-fix-daemon-to-support-pthread.patch 150-fix-ldso-text-realloc-segfault.patch 170-enable-getifaddrs.patch
do
	wget --no-check-certificate -O "buildroot/toolchain/uClibc/uClibc-0.9.29-$i" "https://raw.github.com/ninuxorg/SDK.UBNT.v5.5/master/toolchain/uClibc/patches/$i"
done

#copy the included buildroot config and FIXED uClibc config, and build, strictly in this order, toolchain_build_mips is created by making menu-config etc.
cp buildroot.config buildroot/.config
cd buildroot 
make menuconfig
make uclibc-menuconfig
cp ../uClibc.fixed.config toolchain_build_mips/uClibc-0.9.29/.config
make

#compress up the shiny new toolchain ready for copying to your main firmware building machine, use cmd line as file roller doesn't preserver hard links!
cd /opt/toolchains
tar -czf uclibc-crosstools-gcc-4.2.3-3.tar.gz uclibc-crosstools-gcc-4.2.3-3
  • The order of the build steps matter!
  • If these are all correctly downloaded in the right place buildroot shouldn't give any errors about not being able to find anything (as its source locations are out of data)

What some of the patches are for

  • These are vital to build transmission

009-fix_getaddrinfo_infinite_loop.patch

130-sockets_throw.patch

  • This is vital to build minidlna so its damonize process works (Netgear didn't manage to do this and ended up running it in debug mode spewing out tons of debug log data!)

141-fix-daemon-to-support-pthread.patch

  • This is vital to quite a few things (proper patch to replace the code Netgear mention in the Howto to be done manually afterwards, nice)

130-sockets_throw.patch

Other patch notes

These patces on github duplicate ones already present in the buildroot bundled ones

001-fix_mmap.patch
002-conditional_sched_affinity.patch
004-fix_gethostent_r_failure_retval.patch
005-fix_internal_function_definition.patch
006-rm_whitespace.patch
007-avr32.patch
008-avr32_fix_sa_onstack.patch

These are only present in the bundle and not on github

uClibc-0.9.29-filter-gnu99-from-assembly-flags.patch
uClibc-0.9.29-fix-fget_putc.diff
uClibc-0.9.29-linuxthreads.patch

Comments

blog comments powered by Disqus