This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
start [2017-01-21 22:30] joshtriplett Fix typo. |
start [2020-07-06 21:24] joshtriplett Drop instructions for kernels older than 3.17-rc1, |
||
---|---|---|---|
Line 7: | Line 7: | ||
====== Building a tiny kernel ====== | ====== Building a tiny kernel ====== | ||
- | With Linux 3.17-rc1 and newer, ''make tinyconfig'' will produce a minimal kernel. You can then turn on the minimal set of options you need. | + | With current Linux (since 3.17-rc1 and newer, ''make tinyconfig'' will produce a minimal kernel. You can then turn on the minimal set of options you need. |
- | + | ||
- | On previous kernels, you'll need to take a few additional steps to make the kernel as small as possible: | + | |
- | + | ||
- | * Prior to 3.15-rc1, ''make allnoconfig'' did not turn off options behind CONFIG_EXPERT or CONFIG_EMBEDDED, so you'll have to do so manually. | + | |
- | * Change the allocator from SLUB to SLOB | + | |
- | * Change the kernel compression method from GZIP to XZ | + | |
- | * Disable HIGHMEM4G, using NOHIGHMEM instead | + | |
- | * Set ''CONFIG_OPTIMIZE_INLINING=y'' | + | |
- | * Set ''CONFIG_CC_OPTIMIZE_FOR_SIZE=y'' | + | |
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 31: | Line 22: | ||
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. | 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. | ||
+ | |||
+ | ====== 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. | ||
====== Use Cases ====== | ====== Use Cases ====== | ||
See the [[Use Cases]] page. | See the [[Use Cases]] page. |