User Tools

Site Tools


start

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
start [2014-08-06 01:24]
joshtriplett Add link to projects page.
start [2020-07-06 21:27] (current)
joshtriplett Minor formatting updates
Line 1: Line 1:
-Over time, the Linux kernel has grown far more featureful, but it has also grown much larger, even with all the optional features turned off. The Linux Kernel Tinification project aims to reverse that trend, making the kernel much smaller, to enable ridiculously small embedded applications and other fun uses.+Over time, the Linux kernel has grown far more featureful, but it has also grown much larger, even with all the optional features turned off. The Linux Kernel Tinification project aims to reverse that trend, making the kernel much smaller, to enable ridiculously small embedded applications and other fun uses.  See the [[FAQ]]. 
 + 
 +====== Projects ======
  
 See [[projects]] for a list of kernel tinification projects; please add new projects to that page. See [[projects]] for a list of kernel tinification projects; please add new projects to that page.
Line 5: Line 7:
 ====== Building a tiny kernel ====== ====== Building a tiny kernel ======
  
-With Linux 3.15-rc1 and newer, ''​make ​allnoconfig''​ will produce ​an almost ​minimal kernel; however, you should additionally switch ​the allocator from SLUB to SLOB, change the kernel compression method, and set ''​CONFIG_CC_OPTIMIZE_FOR_SIZE=y''​.+With current ​Linux (since ​3.17-rc1 and newer, ''​make ​tinyconfig''​ will produce ​minimal kernel.  You can then turn on the minimal ​set of options you need.
  
 You'll want to target the most code-size-efficient architecture supported by your target machine; for instance, on x86 systems, build a 32-bit kernel rather than a 64-bit kernel. ​ On current kernels, ''​make allnoconfig''​ should do this automatically. You'll want to target the most code-size-efficient architecture supported by your target machine; for instance, on x86 systems, build a 32-bit kernel rather than a 64-bit kernel. ​ On current kernels, ''​make allnoconfig''​ should do this automatically.
Line 11: Line 13:
 ====== Submitting tinification changes ====== ====== Submitting tinification changes ======
  
-When submitting a change to make the kernel smaller, use '​scripts/​bloat-o-meter''​ to compare the size of the old and new vmlinux, overall and broken out by symbol. ​ Include the bloat-o-meter output in your commit message.+When submitting a change to make the kernel smaller, use ''​scripts/​bloat-o-meter''​ to compare the size of the old and new ''​vmlinux''​, overall and broken out by symbol. ​ Include the ''​bloat-o-meter'' ​output in your commit message
 + 
 +When introducing a new configuration option for an existing kernel feature, the new option should likely depend on ''​CONFIG_EXPERT''​. 
 + 
 +If your changes affect the size of the decompression stub, you may additionally need to run ''​bloat-o-meter''​ on the stub. 
 + 
 +When adding a new Kconfig symbol, to confirm that you've added any necessary dependencies on that symbol, build an ''​allyesconfig''​ kernel with only your new symbol (and anything depending on it) turned off.  Build failures related to the bits your new symbol compiles out will identify additional dependencies you need. 
 + 
 +You can find the latest tinification changes in Josh Triplett'​s tree at https://​git.kernel.org/​cgit/​linux/​kernel/​git/​josh/​linux.git/​ , in the ''​tiny/​*''​ branches. ​ Note that tiny/next gets reset for each new merge window, and other ''​tiny/​*''​ branches may be recreated or rebased.
  
-Most new configuration options added as part of this effort should depend on CONFIG_EMBEDDED.+====== Searching for tinification opportunities ====== 
 +On a built kernel, try running ''​nm --size-sort vmlinux''​. ​ This will show all the symbols in ''​vmlinux'',​ sorted by size.
  
-If your changes affect ​the size of the decompression stub, you may additionally need to run bloat-o-meter on the stub.+====== Use Cases ====== 
 +See the [[Use Cases]] page.
start.1407288295.txt.gz · Last modified: 2014-08-06 01:24 by joshtriplett