menu "Linux Kernel Tools"

# No prompt, this is sourced by linux/Config.in as this
# is no real package and really belongs to the kernel.
config BR2_PACKAGE_LINUX_TOOLS
	bool

config BR2_PACKAGE_LINUX_TOOLS_CPUPOWER
	bool "cpupower"
	select BR2_PACKAGE_LINUX_TOOLS
	select BR2_PACKAGE_PCIUTILS
	help
	  cpupower is a collection of tools to examine and tune power
	  saving related features of your processor.

config BR2_PACKAGE_LINUX_TOOLS_GPIO
	bool "gpio"
	select BR2_PACKAGE_LINUX_TOOLS
	help
	  gpio is a collection of tools to get information about,
	  control and monitor gpios present on system.

	  These tools use new gpio ABI which will deprecate sysfs gpio
	  interface in the future.

	  These tools are available only from kernel version 4.8.

config BR2_PACKAGE_LINUX_TOOLS_IIO
	bool "iio"
	select BR2_PACKAGE_LINUX_TOOLS
	help
	  iio is a collection of tools to get information about,
	  control and monitor iio devices present on system.

	  These tools are available only from kernel version 4.7.

config BR2_PACKAGE_LINUX_TOOLS_PCI
	bool "pci"
	select BR2_PACKAGE_LINUX_TOOLS
	help
	  pcitest is a tool for testing capabilities related to a
	  PCI Endpoint (only works with specific Endpoints).

	  These tools are available only from kernel version 4.20.

config BR2_PACKAGE_LINUX_TOOLS_PERF
	bool "perf"
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	select BR2_PACKAGE_LINUX_TOOLS
	help
	  perf (sometimes "Perf Events" or perf tools, originally
	  "Performance Counters for Linux") - is a performance
	  analyzing tool in Linux, available from kernel version
	  2.6.31. User-space controlling utility, called 'perf' has
	  git-like interface with subcommands. It is capable of
	  statistical profiling of entire system (both kernel and user
	  code), single CPU or severals threads.

	  This will build and install the userspace 'perf'
	  command.

	  Your kernel must have CONFIG_PERF_EVENTS enabled to use perf
	  profiling. Buildroot automatically enables this in the kernel
	  configuration.

	  https://perf.wiki.kernel.org/

if BR2_PACKAGE_LINUX_TOOLS_PERF

config BR2_PACKAGE_LINUX_TOOLS_PERF_TUI
	bool "enable perf TUI"
	depends on BR2_USE_MMU # slang
	select BR2_PACKAGE_SLANG
	help
	  Enable the TUI interface for perf which requires a TTY and
	  enables zooming into DSOs and threads as well as other
	  features.

endif

config BR2_PACKAGE_LINUX_TOOLS_SELFTESTS
	bool"selftests"
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash
	depends on BR2_USE_MMU  # bash
	depends on !BR2_STATIC_LIBS
	select BR2_PACKAGE_LINUX_TOOLS
	select BR2_PACKAGE_BASH # runtime
	select BR2_PACKAGE_NCURSES
	select BR2_PACKAGE_NCURSES_TARGET_PROGS # runtime (tput)
	select BR2_PACKAGE_KMOD
	select BR2_PACKAGE_KMOD_TOOLS # runtime (modprobe -n)
	select BR2_PACKAGE_POPT
	select BR2_PACKAGE_LIBCAP_NG
	select BR2_PACKAGE_UTIL_LINUX
	select BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS # runtime (taskset)
	help
	  Build and install (to /usr/lib/kselftests) kernel selftests.

	  Use of this option implies you know the process of using and
	  compiling the kernel selftests. The Makefile to build and
	  install these is very noisy and may appear to cause your
	  build to fail for strange reasons.

	  This is very much a use at your risk option and may not work
	  for every setup or every architecture.

comment "selftests needs BR2_PACKAGE_BUSYBOX_SHOW_OTHERS and a toolchain w/ dynamic library"
	depends on BR2_USE_MMU
	depends on !BR2_PACKAGE_BUSYBOX_SHOW_OTHERS || BR2_STATIC_LIBS

config BR2_PACKAGE_LINUX_TOOLS_TMON
	bool "tmon"
	select BR2_PACKAGE_LINUX_TOOLS
	select BR2_PACKAGE_NCURSES
	help
	  tmon is a terminal-based tool (using curses) that allows the
	  user to access thermal information about the system.

config BR2_PACKAGE_LINUX_TOOLS_HV
	bool "hv"
	depends on BR2_i386 || BR2_x86_64
	select BR2_PACKAGE_LINUX_TOOLS
	select BR2_PACKAGE_LINUX_TOOLS_HV_KVP_DAEMON if !BR2_PACKAGE_LINUX_TOOLS_HV_HAS_ONE
	help
	  Microsoft HyperV integration services

	  Relevant kernel configuration options: CONFIG_HYPERV,
	  CONFIG_HYPERV_UTILS.

if BR2_PACKAGE_LINUX_TOOLS_HV

config BR2_PACKAGE_LINUX_TOOLS_HV_HAS_ONE
	bool

config BR2_PACKAGE_LINUX_TOOLS_HV_KVP_DAEMON
	bool "hypervkvpd (hv_kvp_daemon)"
	help
	  HyperV uses hypervkvpd (Key/Value Pair daemon) to retrieve
	  status information from your virtualized guest OS

config BR2_PACKAGE_LINUX_TOOLS_HV_FCOPY_DAEMON
	bool "hypervfcopyd (hv_fcopy_daemon)"
	select BR2_PACKAGE_LINUX_TOOLS_HV_HAS_ONE
	help
	  HyperV uses hypervfcopyd (File Copy daemon) to easily transfer
	  files to and from your virtualized guest OS

config BR2_PACKAGE_LINUX_TOOLS_HV_VSS_DAEMON
	bool "hypervvssd (hv_vss_daemon)"
	select BR2_PACKAGE_LINUX_TOOLS_HV_HAS_ONE
	help
	  HyperV uses hypervvssd (Volume Snapshot Service daemon) to
	  freeze your filesystems during snapshots and backups

endif # BR2_PACKAGE_LINUX_TOOLS_HV

endmenu
