User Tools

Site Tools


projects

This is an old revision of the document!


Small projects

  • Make individual syscalls or groups of syscalls optional. See the syscalls page for a list of syscalls that can't currently be compiled out. (Note that in most cases you'll want to compile out the underlying kernel functionality exposed by those syscalls; if that functionality is not already optional, this will likely turn into a large project.)
  • Compile out kernel/time/ntp.c, along with adjtimex and similar syscalls. (in progress)
  • Remove runtime extable sorting logic if CONFIG_BUILDTIME_EXTABLE_SORT (in progress)
  • Sort module extables at build time, as CONFIG_BUILDTIME_EXTABLE_SORT does for vmlinux, and drop the runtime sort.
  • Rip out the rest of kernel/smpboot.c if !CONFIG_SMP
  • Make SRCU optional; make portions of the kernel that define an srcu_struct depend on the resulting new Kconfig symbol.
  • Compile out printks below a certain priority level.
  • Compile out x86 CPU information printing and corresponding structure fields: model decoding, TLB size decoding. Add a config option for this, and make it depend on CONFIG_PRINTK.
  • Add size test for kselftest: boot a minimal kernel under qemu/kvm and capture the display of available memory from early boot, which also confirms that the kernel booted at all.
  • Reverse CONFIG_DISABLE_DEV_COREDUMP to have "default y" and use 'n' to force-disable, so allnoconfig and tinyconfig do the right thing.

Larger projects

  • Make ptrace optional.
  • Rip out more of the per-CPU infrastructure when CONFIG_SMP=n
  • Support configuring out kswapd.
  • Make the kernel's entire random number infrastructure optional.
  • Compile out mm/vmstat (need to stub out bits that obtain statistics used by other bits of the kernel)
  • Compile out signal handling.
  • Compile out support for capabilities; make capable always return true for root and false for non-root.
  • Compile out support for "personalities".
  • Compile out support for non-root users. When disabled, UID and GID effectively always equal 0, and all the syscalls involving UIDs and GIDs go away.
  • Compile out support for xattrs, and all the corresponding syscalls.
  • Compile out support for sockets and all the socket-related syscalls.
  • Support nommu on x86.
  • Revive the function-sections support.
  • Drop exports not used by the set of modules compiled with the kernel
  • Automatic syscall elimination: Given a specific userspace, automatically find out what syscalls it needs and compile everything else out.
  • Kernel command-line constant folding: Given a kernel command line at compile-time, parse it and turn all the variables it would end up in into compile-time constants.
  • Execute in place (XIP) for x86
  • Constant folding for unused mount options (for instance, drop ext4's dioread_lock options at build time)
  • Go look at patches in OpenWRT to make the kernel smaller
  • Analyze size of inlines (Andi Kleen has some scripts)
  • make kernel/pid.o configurable (replace pidhash system with simpler pid allocator (e.g. from 1.0))
  • Compile out TSC support and calibration.
  • Compile out types of video support from arch/x86/boot: VESA, VGA, and BIOS
  • Compile out MCA support from arch/x86/boot.
  • Revive and complete the patches to remove perf and the instruction decoder. Need to rework the config option structure.
  • review items in kernel/Makefile: obj-y target, and eliminate or reduce for tiny kernels
    • make most of sys.o configurable
    • make notifier.o configurable

Projects requiring toolchain changes

  • Modify GCC's __attribute__((section(...))) to support specifying different sections for initialized (.data) and uninitialized (.bss) data. Use that to put uninitialized __initdata or per-CPU data into .bss. (This will require very detailed exploration of the toolchain, Linux's linker scripts, and similar.)
  • Teach GCC to merge identical function bodies
  • Make link-time optimization work
  • Compress "cold" code paths (saves runtime memory)
  • Analysis to detect dead structure fields
  • Automatic structure re-layout to drop fields not referenced
  • Dropping structure field assignments; mark dead fields with an attribute, ignore writes, error on reads
projects.1413272270.txt.gz · Last modified: 2014-10-14 07:37 by joshtriplett