µ C l i b c

uClibc -- a C library for embedded systems
uClibc is a C library for embedded systems.

uClibc is maintained by Erik Andersen and is licensed under the GNU LIBRARY GENERAL PUBLIC LICENSE

It is my sincere hope that this is as useful to you as it is to me.

Mailing List
uClibc has a mailing list. To subscribe, go and visit this page.

Download
  • I now have a script that creats a daily snapshot tarball of uClibc and posts it on here.
  • uClibc now has its own publically browsable CVS tree (this CVS tree is also mirrored onto uclibc.org but they are both the same thing).
  • Anonymous CVS access, and
  • For those that are actively contributing there is even CVS write access.
Known Working Applications List
uClibc now has a list of applications that are known to work. If you have any applications to add to the list, submissions are welcome!
Help Support uClibc development
Do you like uClibc? Do you need support? Do you need some feature added to uClibc? Then why not help out? We are happy to accept donations, provide support contracts, and implement funded feature requests. Additionally, uClibc is looking for corporate sponsors to help sponsor development, pay for bandwidth, and help with hardware donations, especially donations of hardware for non-Intel architectures. Click here to help support uClibc and/or request features.
Latest News
  • 26 November 2001, powerpc shared libraries fully working
    Dave Schleef finished off the the work needed for shared library support on powerpc. There had been a few problems remaining, and those are now squashed. So shared libs on powerpc should be working fully now.

  • 14 November 2001, m68 compiles again, Large file support working
    About a month ago I synced the header files with glibc 2.2.4 for better C++ support and better standards compliance. I forgot to sync up m68k, sparc, powerpc, and mipsel. Dave Schleef fixed powerpc while he was fixing up the shared lib loader. I just fixed up m68k, sparc, and mipsel so they should all compile again.

    I also finished up fixing large file support (just enable DOLFS in your Config file to enable it) and it is working just great, and greatly increases the number of glibc applications that will work "out-of-the-tarball" without needing any changes.

  • 12 November 2001, powerpc shared lib support
    Thanks to David Schleef, uClibc now has full shared library support on powerpc. This brings full shared library support to x86, ARM, and now powerpc. Thanks Dave!

  • 7 November 2001, uClibc application list
    uClibc now has a list of applications that are known to work. If you have any applications to add to the list, submissions are welcome!

  • 18 October 2001, buildroot uClibc example system
    Those wanting an easy way to test out uClibc and give it a test drive can download and compile buildroot.tar.gz. This is a nifty buildsystem that will automagically download and build a User-Mode Linux kernel, and will then download source for and compile up a fully working uClibc based root filesystem. This should make it easy for people to create their own projects. I hope that this build system will allow people to more easily use and build uClibc based systems. As an example of how nicely this works, the Tuxscreen Project is using a slightly adjusted variant of the buildroot system to cross compile the blob bootloader, linux kernel, and a uClibc based jffs2 root filesystem (busybox, tinylogin, udhcp, lrzsz, pcmcia-cs and microwindows) for ARM. Pretty cool.

  • 11 October 2001, v850 architecture support
    Miles Bader has contributed support for the v850 architecture.

  • 25 Spetember 2001, header files updated
    uClibc's header files are now in sync with glibc 2.2.4, allowing better standards compliance, better portibility, and better C++ support.

  • 4 July 2001, ARM shared library support
    uClibc now has full shared library support on ARM.

  • 9 May 2001, libm added
    uClibc now has a very complete math library.

  • 9 May 2001, ld.so added
    uClibc now has a native ld.so. It currently is only ported to work on x86, but porting to other architectures should not be too difficult.

  • 15 March 2001, powerpc port added
    David Schleef contributed a powerpc port, which is now in CVS.

  • 19 February 2001, SH port added
    Jean-Yves Avenard contributed an SH port. See his email with the initial patch here.

  • 16 January 2001, uClibc as a shared library
    As if January 16, uClibc can now be used (at least on x86) as a shared library. See the email announcing this achievement.

  • 11 January 2001, gcc wrapper added
    Manuel Novoa III has created a wrapper for gcc that makes compiling apps vs uClibc as simple as just setting "CC" to gcc-uClibc-< arch>. This even works when cross compiling! Very cool.

  • 3 January 2001, uClibc now has a web page
    A lot of work has been going on under the hood with uClibc, so I decided to put together this webpage to let the world know that it exists and is getting to be very usable.
TODO
Here are a few things on the TODO list:
  • Shared library support for all supported architectures. We now have our own ld.so, but it needs to be ported to support each architecture.
  • Shared library support for mmu-less systems. This is very doable (think of C++ vtables for example), but will take some work.
  • Someone (hopefully) needs to volunteer to take the LSB Test Suite, pull out the C library testing stuff, and convert it (perl script, by hand, I don't care how) into a form that is usable without having it take over your entire system (i.e. similar to what is currently in the uClibc test suite). This will be enormously helpful!
  • other things as I think of them.
Other Open Source C libraries:
History
This history and origin of uClibc is long and twisty. In the beginning, there was GNU libc. Then, libc4 (which later became linux libc 5) forked from GNU libc version 1.07.4, with additions from 4.4BSD, in order to support Linux. Later, the Linux-8086 C library, which is part of the elks project, was created, which was, apparently, largely written from scratch but also borrowed code from libc4, glibc, some Atari library code, with bits and pieces from about 20 other places. Then uClibc forked off from the Linux-8086 C library in order to run on µClinux.

I had for some time been despairing over the state of C libraries in Linux. GNU libc, the standard, is very poorly suited to embedded systems (and it just gets bigger with every release). I spent quite a bit of time looking over the other Open Source C libraries that I knew of (listed below), and none of them really impressed me. I felt there was a real vacancy in the embedded Linux ecology. The closest library to what I imagined an embedded C library should be was uClibc. But that had a lot of problems too -- not the least of which was that, traditionally, uClibc had a complete source tree fork in order to support each and every new platform, resulting in a big mess of twisty versions, all different. I decided to fix it and the result is what you see here. My source tree has now become the official uClibc source tree and it now lives on cvs.uclinux.org.

To start with, (with some initial help from D. Jeff Dionne), I ported it to run on x86. I then grafted in the header files from glibc 2.1.3 and cleaned up the resulting breakage. This (plus some additional work) has made it almost completely independant of kernel headers, a large departure from its traditional tightly-coupled-to-the-kernel origins. I have written and/or rewritten a number of things that were missing or broken, and sometimes grafted in bits of code from the current glibc and libc5. I have also built a proper platform abstraction layer, so now you can simply edit the file "Config" and use that to decide which architecture you will be compiling for, and whether or not your target has an MMU, and FPU, etc. I have also added a test suite, which, though incomplete, is a good start. Several people have helped by contributing ports to new architectures, and a lot of work has been done on adding support for missing features.

Links to other useful stuff


Mail all comments, insults, suggestions and bribes to Erik Andersen
This site created with the vi editor Graphics by GIMP Linux Today

Slashdot

Freshmeat