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.)
  • Turn contig_page_data into .bss since it needs so little of itself initialized.
  • Configure out writing time to the hardware clock (and in the process, compile out RTC_LIB)
  • Compile out kernel/time/ntp.c, along with adjtimex and similar syscalls.
  • Compile out arch/x86/boot/early_serial_console
  • Remove runtime extable sorting logic if CONFIG_BUILDTIME_EXTABLE_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.
  • Only include mm/highmem.c if CONFIG_HIGHMEM
  • Add size test for kselftest

Large 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
  • Kernel command-line constant folding
  • 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)

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.1408649485.txt.gz · Last modified: 2014-08-21 19:31 by tbird20d