Building an old uClibc version with gcc
Laurent Bercot
ska-dietlibc at skarnet.org
Tue Aug 23 03:35:02 UTC 2011
Hello Ian,
First, a quick and dirty solution to what you want to achieve:
- go to http://www.landley.net/aboriginal/ and download a prebuilt
binary toolchain from x86 to your appliance's architecture.
- download busybox (http://busybox.net/), select the tcpsvd and
httpd applets, fill in the "path to cross-compiler" field correctly
with your binary toolchain prefix, make sure you link busybox statically
to avoid relying on the appliance's libc.
- you're done: you have a small web server to run on your appliance.
Next, some comments and questions if you need to go further than that:
> I have an embedded appliance running linux that I am trying to build a tool
> chain for. The manufacturer supplies no tool chain, they don't even follow
> the GPL.
What does that mean ? If all they supply is binaries, they have to make
sure that the source code is easily accessible. If all the software they
use is free, and they document the versions they're using, then there is
no violation, because the source of free software is public. They have
to provide you with said source if you ask them, but they don't have to
provide you with a toolchain.
> I know that the appliance is based on the following software:
>
> linux-2.6.22.19
> gcc-3.4.2
> uClibc-0.9.27
What does that mean ? Is that software running on the platform ? Is that
the software that has been used to build the binaries running on the
platform ? Do you have a native gcc-3.4.2 running on your appliance, and
a binary libc.so coming from uClibc-0.9.27 ?
> I have a reasonable experience with linux and embedded systems, but I have
> never built a cross compiler before. I understand the easiest option is to
> use the buildroot system that will download the sources and compile a
> toolchain. In my instance I don't think this is possible because I am tied
> to using the specific versions above and they are not selectable options in
> the current buildroot system.
Why should you be tied to the specific versions above ? Maybe you cannot
upgrade the kernel and you're stuck with linux-2.6.22.19, which should not
be a problem for a huge majority of application. Maybe you have a shared
libc.so coming from uClibc-0.9.27 and think you have to use it, which is
not true unless it has been modified for your hardware (and in that case
your manufacturer has to provide you with the source code for the changes).
I do not understand what being tied to gcc-3.4.2 means since you're saying
you don't even have a toolchain. XD
Building a toolchain is a complex process. If you just want to build a
working web server, just grab a prebuilt toolchain (so you reuse the work
of other people who pout in the necessary effort) and build a small
static executable that will be independent from everything else on your
appliance (except the kernel but it should be ok).
--
Laurent
More information about the uClibc
mailing list