make CC=gcc CFLAGS="-Os"
This is important, because some rules will invoke CC for things other than compilation, and the parameters will not make sense and result in an error.
After selecting the C library, all of the code in the root filesystem needs to be compiled with the new compiler, so that code can take advantage of the newer, smaller C library. At this point, it's worth evaluating whether static versus shared libraries are the right choice for the target. Shared libraries work best if the device will have arbitrary code running and if that code isn't known at the time of deployment; for example, the device may expose an API and allow end users or field engineers to write modules. In this case, having the libraries on the device would afford the greatest flexibility for those implementing new features.
Shared libraries also would be a good choice if the system contained many separate programs instead of one or two programs. In this case, having one copy of the shared code would be smaller than the same code duplicated in several files.
Systems with a few programs merit closer consideration. When only a few programs are in use, the best thing to do is create a system each way and compare the resulting size. In most cases, the smaller system is the one with no shared libraries. As an added benefit, systems without shared libraries load and start running programs faster (as there's no linking step), so users benefit from an efficiency perspective as well.
Although there's no magic tool for making a system smaller, there is no shortage of tools to help make a system as small as possible. Furthermore, making Linux “small” is more than reducing the size of the kernel; the root filesystem needs to be examined critically and paired down, as this component usually consumes more space than the kernel. This article concentrated on the executable image size; reducing the memory requirements of the program once it is running constitutes a separate project.
Linux-tiny Patches: www.selenic.com/linux-tiny. A series of small patches to the kernel to reduce the image size and runtime resources. Many of these patches already have made their way into the kernel.
GNU C Library: www.gnu.org/software/libc. The GNU C Standard Library is the canonical implementation of the C library. The need for this to run on nearly every platform with backward compatibility resulted in a Lib C that's bigger than most.
uClibc: www.uclibc.org. A well supported smaller implementation of Lib C.
Newlib: sourceware.org/newlib. Red Hat's small C library.
dietlibc: www.fefe.de/dietlibc. The smallest C library of the bunch. It works well with an existing cross-compiler, as the install creates a “wrapper” program for GCC, invoking it with the right parameters to make building with dietlibc very easy.
Gene Sally has been working with all facets of embedded Linux for the last seven years and is co-host of LinuxLink Radio, the most popular embedded Linux podcast. Gene can be reached at firstname.lastname@example.org.
|Dynamic DNS—an Object Lesson in Problem Solving||May 21, 2013|
|Using Salt Stack and Vagrant for Drupal Development||May 20, 2013|
|Making Linux and Android Get Along (It's Not as Hard as It Sounds)||May 16, 2013|
|Drupal Is a Framework: Why Everyone Needs to Understand This||May 15, 2013|
|Home, My Backup Data Center||May 13, 2013|
|Non-Linux FOSS: Seashore||May 10, 2013|
- Dynamic DNS—an Object Lesson in Problem Solving
- Making Linux and Android Get Along (It's Not as Hard as It Sounds)
- Using Salt Stack and Vagrant for Drupal Development
- New Products
- Drupal Is a Framework: Why Everyone Needs to Understand This
- Validate an E-Mail Address with PHP, the Right Way
- Download the Free Red Hat White Paper "Using an Open Source Framework to Catch the Bad Guy"
- A Topic for Discussion - Open Source Feature-Richness?
- New Products
- The Secret Password Is...
3 hours 2 min ago
- Keeping track of IP address
4 hours 53 min ago
- Roll your own dynamic dns
10 hours 6 min ago
- Please correct the URL for Salt Stack's web site
13 hours 18 min ago
- Android is Linux -- why no better inter-operation
15 hours 33 min ago
- Connecting Android device to desktop Linux via USB
16 hours 2 min ago
- Find new cell phone and tablet pc
17 hours 19 sec ago
18 hours 29 min ago
- Automatically updating Guest Additions
19 hours 37 min ago
- I like your topic on android
20 hours 24 min ago