menu "System configuration"

config BR2_TARGET_GENERIC_HOSTNAME
       string "System hostname"
       default "buildroot"
       help
         Select system hostname to be stored in /etc/hostname.

config BR2_TARGET_GENERIC_ISSUE
       string "System banner"
       default "Welcome to Buildroot"
       help
         Select system banner (/etc/issue) to be displayed at login.

choice
	prompt "/dev management"
	default BR2_ROOTFS_DEVICE_CREATION_STATIC

config BR2_ROOTFS_DEVICE_CREATION_STATIC
	bool "Static using device table"

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS
	bool "Dynamic using devtmpfs only"

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV
	bool "Dynamic using mdev"
	select BR2_PACKAGE_BUSYBOX

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV
	bool "Dynamic using udev"
	depends on BR2_LARGEFILE # udev
	depends on BR2_USE_WCHAR # udev
	select BR2_PACKAGE_UDEV

comment "udev requires a toolchain with LARGEFILE + WCHAR support"
	depends on !(BR2_LARGEFILE && BR2_USE_WCHAR)

endchoice

config BR2_ROOTFS_DEVICE_TABLE
	string "Path to the permission tables"
	default "target/generic/device_table.txt"
	help
	  Specify a space-separated list of permission table locations,
	  that will be passed to the makedevs utility to assign
	  correct owners and permissions on various files in the
	  target filesystem.

	  See package/makedevs/README for details on the usage and
	  syntax of these files.

config BR2_ROOTFS_STATIC_DEVICE_TABLE
	string "Path to the device tables"
	default "target/generic/device_table_dev.txt"
	depends on BR2_ROOTFS_DEVICE_CREATION_STATIC
	help
	  Specify a space-separated list of device table locations,
	  that will be passed to the makedevs utility to create all
	  the special device files under /dev.

	  See package/makedevs/README for details on the usage and
	  syntax of these files.

choice
	prompt "Root FS skeleton"

config BR2_ROOTFS_SKELETON_DEFAULT
	bool "default target skeleton"
	help
	  Use default target skeleton

config BR2_ROOTFS_SKELETON_CUSTOM
	bool "custom target skeleton"
	help
	  Use custom target skeleton.

endchoice

if BR2_ROOTFS_SKELETON_CUSTOM
config BR2_ROOTFS_SKELETON_CUSTOM_PATH
	string "custom target skeleton path"
	default "fs/skeleton"
	help
	  Path custom target skeleton.
endif

if BR2_ROOTFS_SKELETON_DEFAULT

config BR2_TARGET_GENERIC_GETTY_PORT
	string "Port to run a getty (login prompt) on"
	default "ttyS0"
	help
	  Specify a port to run a getty (login prompt) on.

choice
	prompt "Baudrate to use"
	default BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200
	help
	  Select a baudrate to use.

config BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
       bool "keep kernel default"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600
	bool "9600"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200
	bool "19200"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400
	bool "38400"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600
	bool "57600"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200
	bool "115200"
endchoice

config BR2_TARGET_GENERIC_GETTY_BAUDRATE
	string
	default "0"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
	default "9600"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600
	default "19200"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200
	default "38400"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400
	default "57600"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600
	default "115200"	if BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200

config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
	bool "remount root filesystem read-write during boot"
	default y
	help
	  The root filesystem is typically mounted read-only at boot.
	  By default, buildroot remounts it in read-write mode early during the
	  boot process.
	  Say no here if you would rather like your root filesystem to remain
	  read-only.
	  If unsure, say Y.

endif # BR2_ROOTFS_SKELETON_DEFAULT

config BR2_ROOTFS_POST_BUILD_SCRIPT
	string "Custom script to run before creating filesystem images"
	default ""
	help
	  Specify a script to be run after the build has finished and before
	  Buildroot starts packing the files into selected filesystem images.

	  This gives users the oportunity to do board-specific cleanups,
	  add-ons and the like, so the generated files can be used directly
	  without further processing.

	  The script is called with the target directory name as first and
	  only argument. Make sure the exit code of that script is 0,
	  otherwise make will stop after calling it.

config BR2_TARGET_GENERIC_PLATFORM_NAME
	string "Platform name from defconfig"

config BR2_TARGET_GENERIC_PLATFORMS_SUPPORTED
	string "Supported hardware platforms for this image"
	help
	  Specify a list of hardware platforms that this image will run on.
	  This can go into the installer manifest.  If the image works on
	  multiple platforms, separate them with whitespace or commas.
	  For example:
	    GFMS100, GFHD100
	    GFHD200
	    GFLT110, GFLT200
	    etc.

endmenu
