summaryrefslogtreecommitdiffstats
path: root/init/Kconfig
diff options
context:
space:
mode:
authorJoel Fernandes (Google) <joel@joelfernandes.org>2019-04-26 15:04:29 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-04-29 10:48:03 -0400
commit43d8ce9d65a54846d378545770991e65838981e0 (patch)
tree72ec41f939d8f4dd3310f6312481991a3f0ff077 /init/Kconfig
parent1fd7c3b438a2e4741435ed4d45546c03abf045b2 (diff)
Provide in-kernel headers to make extending kernel easier
Introduce in-kernel headers which are made available as an archive through proc (/proc/kheaders.tar.xz file). This archive makes it possible to run eBPF and other tracing programs that need to extend the kernel for tracing purposes without any dependency on the file system having headers. A github PR is sent for the corresponding BCC patch at: https://github.com/iovisor/bcc/pull/2312 On Android and embedded systems, it is common to switch kernels but not have kernel headers available on the file system. Further once a different kernel is booted, any headers stored on the file system will no longer be useful. This is an issue even well known to distros. By storing the headers as a compressed archive within the kernel, we can avoid these issues that have been a hindrance for a long time. The best way to use this feature is by building it in. Several users have a need for this, when they switch debug kernels, they do not want to update the filesystem or worry about it where to store the headers on it. However, the feature is also buildable as a module in case the user desires it not being part of the kernel image. This makes it possible to load and unload the headers from memory on demand. A tracing program can load the module, do its operations, and then unload the module to save kernel memory. The total memory needed is 3.3MB. By having the archive available at a fixed location independent of filesystem dependencies and conventions, all debugging tools can directly refer to the fixed location for the archive, without concerning with where the headers on a typical filesystem which significantly simplifies tooling that needs kernel headers. The code to read the headers is based on /proc/config.gz code and uses the same technique to embed the headers. Other approaches were discussed such as having an in-memory mountable filesystem, but that has drawbacks such as requiring an in-kernel xz decompressor which we don't have today, and requiring usage of 42 MB of kernel memory to host the decompressed headers at anytime. Also this approach is simpler than such approaches. Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'init/Kconfig')
-rw-r--r--init/Kconfig10
1 files changed, 10 insertions, 0 deletions
diff --git a/init/Kconfig b/init/Kconfig
index 4592bf7997c0..47c0db6e63a5 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -580,6 +580,16 @@ config IKCONFIG_PROC
580 This option enables access to the kernel configuration file 580 This option enables access to the kernel configuration file
581 through /proc/config.gz. 581 through /proc/config.gz.
582 582
583config IKHEADERS_PROC
584 tristate "Enable kernel header artifacts through /proc/kheaders.tar.xz"
585 depends on PROC_FS
586 help
587 This option enables access to the kernel header and other artifacts that
588 are generated during the build process. These can be used to build eBPF
589 tracing programs, or similar programs. If you build the headers as a
590 module, a module called kheaders.ko is built which can be loaded on-demand
591 to get access to the headers.
592
583config LOG_BUF_SHIFT 593config LOG_BUF_SHIFT
584 int "Kernel log buffer size (16 => 64KB, 17 => 128KB)" 594 int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
585 range 12 25 595 range 12 25