mirror of https://github.com/l4ka/hazelnut.git
514 lines
16 KiB
Plaintext
514 lines
16 KiB
Plaintext
######################################################################
|
|
##
|
|
## Copyright (C) 1999-2002, Karlsruhe University
|
|
##
|
|
## File path: xconfig/config.help
|
|
## Description: Help file for configuration tool.
|
|
##
|
|
## @LICENSE@
|
|
##
|
|
## $Id: config.help,v 1.30 2002/06/07 17:02:29 skoglund Exp $
|
|
##
|
|
######################################################################
|
|
|
|
architecture selection
|
|
CONFIG_ARCH_X86
|
|
Architecture selection
|
|
|
|
Those who don't know what this is all about shoudn't care about it at all.
|
|
_
|
|
|
|
platform selection for ARM
|
|
CONFIG_ARCH_ARM_DNARD
|
|
Select the flavour of your ARM-based box
|
|
|
|
DNARD: The Digital Network Appliance Reference Design
|
|
http://www.research.digital.com/SRC/iag/
|
|
|
|
Brutus: intel's SA-1100 based evaluation board
|
|
http://developer.intel.com/design/strong/quicklist/\
|
|
eval-plat/sa-1100me.htm
|
|
|
|
EP7211: Cirrus Logic's ARM7 based evaluation board
|
|
http://www.cirrus.com/design/products/overview/\
|
|
index.cfm?ProductID=110
|
|
_
|
|
|
|
platform selection for x86
|
|
CONFIG_ARCH_X86_I586
|
|
Select the flavour of your x86 box
|
|
|
|
i586: Pentium
|
|
i686: PII, PIII
|
|
P4: Pentium 4
|
|
_
|
|
|
|
CONFIG_ARCH_MIPS_R4000
|
|
Oooops. I feel as if someone had mentioned the word MIPS. What's that?
|
|
|
|
|
|
BUMMER!
|
|
_
|
|
|
|
CONFIG_JOCHEN_BUGS
|
|
Jochen-bug compatibility mode
|
|
|
|
Due to the possibility of interpreting the L4 specification differently,
|
|
certain operations might be implemented differently in kernels. Whether
|
|
a certain implementation is a bug or not heavily depends on your reading
|
|
of the specification.
|
|
|
|
Saying Y here implements some operations like the assembly kernel does:
|
|
- a thread is not allowed to do IPC with itself
|
|
- offset of actually transfered dwords in long messages
|
|
|
|
If you want to use Flick/L4 you have to say Y here.
|
|
|
|
Be warned that saying N here could break your existing software. However,
|
|
then this kernel implements _OUR_ understanding of the specification.
|
|
|
|
Note: This doesn't influence those parts of the specification that are
|
|
not implemented yet in this kernel.
|
|
_
|
|
|
|
default sigma0 entry point
|
|
CONFIG_SIGMA0_ENTRY
|
|
Turning this on initializes the kernel info page with the given
|
|
values. Hence, there's no need for the boot process to write the
|
|
sigma0 initial IP and SP values to the kernel info page.
|
|
|
|
src/global.c
|
|
_
|
|
|
|
default root task entry point
|
|
CONFIG_ROOTTASK_ENTRY
|
|
Turning this on initializes the kernel info page with the given
|
|
values. Hence, there's no need for the boot process to write the
|
|
initial IP and SP values for the root task to the kernel info page.
|
|
|
|
src/global.c
|
|
_
|
|
|
|
Architecture specific kmemory
|
|
CONFIG_HAVE_ARCH_KMEM
|
|
If set, the architecture specific kernel memory allocator will
|
|
be activeted instead of the generic one (i.e. kmem_alloc() and
|
|
kmem_free()).
|
|
|
|
src/kmemory.c
|
|
_
|
|
|
|
CONFIG_SMP
|
|
Symmetric Multi Processoring with L4 is considered HIGHLY EXPERIMENTAL.
|
|
Interfaces to control migration are still floating, semantics of some
|
|
system calls that are fine on uniprocessors are not completely defined
|
|
on SMPs (system calls executed serially before may run in parallel now),
|
|
scheduling relying on hard priorities renders halfways useless if there
|
|
are multiple parallel time axes, etc. ...
|
|
|
|
L4 on SMP is currently only tested on i440BX chipsets. In contrast to
|
|
what one would expect, an SMP kernel may not work on uniprocessors.
|
|
|
|
Despite that, everybody is encouraged to mess around with this feature.
|
|
_
|
|
|
|
CONFIG_SMP_MAX_CPU
|
|
Sometimes it may be desirable to limit the number of actived CPUs.
|
|
This is an upper limit only, not a must-have.
|
|
|
|
Btw, Intel's PIII systems seem to be limited to 15 processors anyway.
|
|
_
|
|
|
|
Marcus SMP XP IPC playground
|
|
CONFIG_MARCUS_XP_IPC
|
|
This is only effective, if the SMP Nucleus was configured. Turning
|
|
this on uses an experimental IPC path with proxy threads instead
|
|
of the normal IPI handler based approach.
|
|
_
|
|
|
|
CONFIG_X86_IOAPIC
|
|
The IO-APIC is the Advanced I/O Programmable Interrupt Controller found
|
|
in SMP PC boxes. It's required to distribute IRQs across multiple CPUs.
|
|
There is at least one IO-APIC per SMP system and one APIC in every CPU.
|
|
_
|
|
|
|
CONFIG_X86_APICTIMER
|
|
The APIC is the Advanced Programmable Interrupt Controller found in SMP-
|
|
capable IA32 CPUs. In contrast to the IO-APIC, there is an APIC per CPU.
|
|
|
|
In today's L4 user land, every device driver thinks that it must reenable
|
|
and sometimes even acknowledge/disable the IRQ on the PIC. Without proper
|
|
locking this can lead to totally messed up PIC states easily. If a driver
|
|
fails to handle the PIC correctly, timer interrupts could be disabled and
|
|
scheduling stops.
|
|
When using the APIC timer instead, a driver can no longer to accidently
|
|
disable the kernel timer. However, it still could disable IRQs ... :-(
|
|
_
|
|
|
|
CONFIG_X86_INKERNEL_PIC
|
|
Enables automatic PIC acknowledgement similar to the APIC (which is not
|
|
exported to user mode). When an interrupt occurs, the IRQ on the PIC is
|
|
is disabled. It is re-enabled on the next IPC which may potentially receive
|
|
an interrupt. (receive(#irq) or wait)
|
|
|
|
-
|
|
|
|
CONFIG_PERFMON
|
|
Allows kernel debugger to set up the Performance Monitoring Counters, and
|
|
user-level applications to access them using the RDPMC instruction.
|
|
_
|
|
|
|
CONFIG_X86_WBINVD_EMULATION
|
|
The wbinvd instruction flushes the internal caches. That is used by
|
|
some L4Linux drivers. This button allows to enable full emulation (i.e.
|
|
WBINVD is executed by the kernel). Otherwise, the instruction is simply
|
|
skipped.
|
|
-
|
|
|
|
CONFIG_X86_P4_BTS
|
|
Allow the the Pentium 4 Branch Trace Store to be enabled and accessed
|
|
from within in the kernel debugger. The branch trace store keeps track
|
|
of the most recent branches the processor has taken, and can be used for,
|
|
e.g., dubugging purposes. Enabling the trace store will, however,
|
|
seriously degrade the performance of your system.
|
|
_
|
|
|
|
CONFIG_X86_P4_BTS_BUFSIZE
|
|
The amount of memory used for storing branch traces (in KB). Each
|
|
branch trace is 12 bytes. A 4KB buffer can as such contain up to 341
|
|
branch trace records.
|
|
_
|
|
|
|
CONFIG_X86_P4_PEBS
|
|
Allow the Pentium 4 Precise Event-Based Sampling to be enabled and
|
|
accessed from within the kernel debugger. Precise Event-Based Sampling
|
|
requires the CPU to have an APIC.
|
|
_
|
|
|
|
CONFIG_X86_P4_PEBS_BUFSIZE
|
|
The amount of memory used for storing precise event samples (in KB).
|
|
Each branch trace is 40 bytes. A 64KB buffer can as such contain up to
|
|
1638 precise event samples.
|
|
_
|
|
|
|
CONFIG_ENABLE_PROFILING
|
|
Allows continuous profiling to be performed on user-level and kernel-
|
|
level code. The profiling may be triggered by various events, and
|
|
samples (registers or events) may be measured for single instructions.
|
|
Profiling requires the CPU to have an APIC.
|
|
_
|
|
|
|
CONFIG_PROFILING_WITH_NMI
|
|
Enables profiling events to be triggered using Non Maskable Interrupts.
|
|
This had the advantage that even the kernel or user-level drivers with
|
|
interrupts disabled can be profiled. Needless to say, if you want
|
|
to profile the kernel you must enable this option.
|
|
_
|
|
|
|
CONFIG_PROFILING_MAX_VAL
|
|
An upper limit on the number of value samples per instruction that
|
|
you can log in your profiling log. Raising this number means that
|
|
you can collect more statistics about each sampled instruction but
|
|
also that more memory will be used for each sample (i.e., it lowers
|
|
the maximum number of profile log entries).
|
|
_
|
|
|
|
CONFIG_IPC_FASTPATH
|
|
Hazelnut supports a fast IPC implementation which is 100% pure assembly.
|
|
This feature is currently still experimental but works in most cases.
|
|
_
|
|
|
|
CONFIG_ENABLE_SMALL_AS
|
|
Small address spaces is a mechanism for avoiding TLB flushes on address
|
|
space switches. Currently, small spaces is only implmented on IA-32. It
|
|
emulates tagged TLBs (and physically tagged Trace Caches in the case of
|
|
Pentium 4) using the IA-32 segmentation model.
|
|
_
|
|
|
|
CONFIG_GLOBAL_SMALL_SPACES
|
|
Put small spaces into global pages. This avoids TLB entries for small
|
|
address spaces to be flushed on normal TLB flush operations.
|
|
_
|
|
|
|
CONFIG_SMALL_AREA_512MB
|
|
The size of the area used for small spaces (default 512MB). The size of
|
|
the area also dictates the minimum size of a small space and the area
|
|
remaining to be used for large spaces.
|
|
|
|
Size Min. space size Used virtual area
|
|
---- --------------- -----------------
|
|
512MB 4MB 0xC0000000 - 0xE0000000
|
|
1GB 8MB 0xA0000000 - 0xE0000000
|
|
2GB 16MB 0x60000000 - 0xE0000000
|
|
|
|
Note that the user-level API for setting small spaces does not change
|
|
to reflect the larger small space area size. A request for a 4MB space
|
|
will thus be treated as a request for a 8MB or 16MB space for the 1GB
|
|
and 2GB case, respectively.
|
|
_
|
|
|
|
CONFIG_ENABLE_TCB_PAGER
|
|
This stuff is related to the persistence in L4 approach. Actually, it's
|
|
not ment to be in here.
|
|
|
|
It's considered somewhere between EXTREMELY EXPERIMENTAL and DANGEROUS.
|
|
Don't turn this on unless you are at least one of the probably not more
|
|
than 1.5 people that could know what it's all about. You've been warned!
|
|
_
|
|
|
|
CONFIG_CACHEABILITY_BITS
|
|
|
|
Enable ability to specify bits in the fpage of a map operation
|
|
controlling the cacheability and/or bufferability of the mapped page
|
|
frames. Note that the cacheability and bufferability bits are hardware
|
|
dependent and may not produce the desired result.
|
|
_
|
|
|
|
|
|
CONFIG_DEBUGGER_KDB
|
|
This enables the built-in kernel debugger. This is a must.
|
|
|
|
There was the idea of having alternative debugger interfaces like GDB,
|
|
but the need for that was not strong enough.
|
|
_
|
|
|
|
CONFIG_DEBUGGER_GDB
|
|
Forget this tunable. Reenable the L4/Ka Kernel Debugger!
|
|
_
|
|
|
|
CONFIG_DEBUGGER_NEW_KDB
|
|
The new debugger. Get more information at
|
|
http://i30www.ira.uka.de/~swagner
|
|
_
|
|
|
|
CONFIG_DEBUGGER_IO_INKBD
|
|
This option selects the input device for the kernel debugger.
|
|
|
|
-
|
|
|
|
CONFIG_DEBUGGER_IO_OUTSCRN
|
|
This option selects the output device for the kernel debugger.
|
|
|
|
-
|
|
|
|
CONFIG_DEBUGGER_COMPORT
|
|
Select the com-port address for the kernel debugger output. That
|
|
feature is only available if 'serial' was selected as input and/or
|
|
output device.
|
|
|
|
Common ports are:
|
|
COM1: 3F8
|
|
COM2: 2E8
|
|
|
|
-
|
|
|
|
CONFIG_DEBUGGER_COMSPEED
|
|
Selects the speed of the serial line for debugger output. This feature
|
|
is only available if 'serial' was selected as input and/or output device.
|
|
|
|
-
|
|
|
|
CONFIG_DEBUGGER_IO_SCREEN_VGA
|
|
Screen output device. This feature is only available if 'screen' was
|
|
selected as output device
|
|
|
|
-
|
|
|
|
CONFIG_DEBUGGER_IO_KBD_DE
|
|
Keyboard layout for the kernel debugger. (Not implemented ;)
|
|
|
|
-
|
|
|
|
Enable Disassembler
|
|
CONFIG_DEBUG_DISAS
|
|
This enables the disassembler in the built-in kernel debugger.
|
|
The disassembler uses binutil's libopcodes.
|
|
|
|
Be warned that this enlarges your kernel by ~60k for x86
|
|
and by ~13k for ARM.
|
|
_
|
|
|
|
CONFIG_KEEP_LAST_BRANCHES
|
|
Keep the state of the last-branch model specific registers upon
|
|
exceptions and enter kdebug instructions. Useful for seeing where the
|
|
last branch occured in user level (e.g., where a branch to an invalid
|
|
instruction occured).
|
|
|
|
_
|
|
Disable INTs in user mode
|
|
CONFIG_USERMODE_NOIRQ
|
|
Setting this option to YES creates all user threads with disabled
|
|
interrupts. This could easily disable timer triggered events like
|
|
scheduling, IPC timeouts, etc.
|
|
|
|
create_user_stack_frame in include/arch/thread.h
|
|
_
|
|
|
|
CONFIG_DEBUG
|
|
Enables debugging features and turns on ASSERT macros.
|
|
|
|
-
|
|
|
|
CONFIG_DEBUG_BREAKIN
|
|
Allows to remotely breakin into the kernel debugger by hitting ESC.
|
|
Currently, that feature is only available when using the serial line as
|
|
input device.
|
|
|
|
-
|
|
|
|
CONFIG_DEBUG_KDB_ONSTART
|
|
The kernel enters the kernel debugger before switching to the root task.
|
|
_
|
|
|
|
CONFIG_DEBUG_SANITY
|
|
Enables some sanity additional checks. Do not use this feature when
|
|
benchmarking - you may experience a major slow-down.
|
|
|
|
-
|
|
|
|
Trace kernel page faults
|
|
CONFIG_DEBUG_TRACE_KPF
|
|
If set to yes, kernel page faults are reported.
|
|
|
|
This means that also page faults in the temporary mapping area are
|
|
reported (which tends to confuse even experienced users from time to
|
|
time ;-).
|
|
|
|
src/arch/memory.c
|
|
_
|
|
|
|
Trace user page faults
|
|
CONFIG_DEBUG_TRACE_UPF
|
|
If set to yes, user page faults are reported.
|
|
|
|
src/arch/memory.c
|
|
_
|
|
|
|
Trace interrupts
|
|
CONFIG_DEBUG_TRACE_IRQS
|
|
If set, detection of an interrupt is reported.
|
|
|
|
src/arch/interrupt.c
|
|
_
|
|
|
|
CONFIG_DEBUG_TRACE_SYSCALLS
|
|
If set, system calls are traced with their parameters.
|
|
|
|
This will cause a major slowdown and the will also have influence on
|
|
the scheduling behaviour (Never assume that what you see with tracing
|
|
will happen the same way without syscall tracing!!!)
|
|
_
|
|
|
|
CONFIG_DEBUG_TRACE_IPC
|
|
Trace IPCs in a single-entry trace buffer. Depending on the KDB, all
|
|
the interesting parameters of the IPC system call are dumped with
|
|
optionally entering the kernel debugger.
|
|
|
|
Setting this to Y will cause a certain slowdown of the IPC system call
|
|
since the parameters are recorded. However activating IPC tracing in
|
|
the KDB then will cause a major slowdown because the messages are then
|
|
printed.
|
|
_
|
|
|
|
Trace Mapping Database
|
|
CONFIG_DEBUG_TRACE_MDB
|
|
If set, calls to mdb_map() and mdb_flush() are reported.
|
|
|
|
src/mapping.c
|
|
|
|
-
|
|
|
|
Trace SMP
|
|
CONFIG_DEBUG_TRACE_SMP
|
|
Traces SMP events (processor detection and startup)
|
|
-
|
|
|
|
CONFIG_DEBUG_TRACE_IPI
|
|
Enables IPI tracing - carefull, this is lots of output.
|
|
_
|
|
|
|
CONFIG_DEBUG_TRACE_MISC
|
|
Enable loads of informative/debugging output during normal operation.
|
|
|
|
This can induce major slowdown.
|
|
_
|
|
|
|
CONFIG_DEBUG_TRACE_INIT
|
|
Enable loads of informative/debugging output during initialization.
|
|
_
|
|
|
|
CONFIG_DEBUG_SPIN
|
|
Enables "spinning wheels" in the upper right corner of the screen. To
|
|
be honest, these are not really wheels. It's a simply an increment of
|
|
whatever value is in the video memory at that position.
|
|
On SMPs, the wheels are per CPU - CPU 0 is in the top line.
|
|
|
|
Horizontal positions (events may be disabled by other means):
|
|
|
|
79: idle loop schedule.c:362
|
|
78: end of timeslice schedule.c:301
|
|
77: hardware interrupt ipc.c:309
|
|
75: switch_to(L4_NIL_ID) schedule.c:378
|
|
_
|
|
|
|
CONFIG_TRACEBUFFER
|
|
Enables tracebuffer support. The tracebuffer is used by the kernel
|
|
to record the occurrence of certain events (such as syscalls, interrupts,
|
|
pagefaults...) together with an associated timestamp. This is useful
|
|
for debugging because the sequence of events that caused a particular
|
|
problem can be identified. The buffer is also mapped writable to user
|
|
level, so applications can record events as well.
|
|
|
|
This feature causes the kernel to run considerably slower.
|
|
If unsure, say N.
|
|
_
|
|
|
|
CONFIG_ENABLE_TRACEPOINTS
|
|
Enables tracepoint support in the kernel. Tracepoints can be used to
|
|
keep track of how often certain event occur in the kernel, and
|
|
optionally print debugging information and enter kernel debugger when
|
|
these events occur.
|
|
_
|
|
|
|
CONFIG_ENABLE_SWITCH_TRACE
|
|
Enables tracing of thread switches, recording the instruction pointers
|
|
and stack pointers of both the source and the destination thread.
|
|
_
|
|
|
|
CONFIG_SWITCH_TRACE_SIZE
|
|
Number of thread switches which are recorded. Traces are recorded in
|
|
a circular buffer. When the buffer overflows the oldest traces are
|
|
overwritten.
|
|
_
|
|
|
|
CONFIG_IO_FLEXPAGES
|
|
This enables support for IO-FlexPages
|
|
|
|
-
|
|
|
|
CONFIG_AUTO_IO_MAP
|
|
Saying yes to this option will create a default IO-mapping of 64K for
|
|
all new Tasks, which results in every task per default being able to
|
|
access IO ports. This behaviour is inheritant; a task lacking full
|
|
permissions to access all IO-ports creating a new task will result
|
|
in the new one having no access at all.
|
|
|
|
-
|
|
CONFIG_ENABLE_PVI
|
|
As cli and sti are IO instructions, too, enabling IO FlexPages will
|
|
result in only the kernel being able to clear and set interrupts
|
|
anymore; user tasks will raise an exception 13 instead. Protected
|
|
Mode Virtual Interrupts (PVI) solve that problem transparently.
|
|
If running in PVI mode, user level tasks can use cli and sti.
|
|
The PVI implementation is EXPERIMENTAL, rudimentary, and does not
|
|
care about priority problems at all.
|
|
-
|
|
|
|
CONFIG_MEASURE_INT_LATENCY
|
|
Turn on interrupt latency measurements. Upon each interrupt we store
|
|
the value of the local APIC timer (upon interrupt handler entry) in dw0
|
|
of the returned interrupt IPC. We store the rdtsc value of the
|
|
interrupt handler entry in dw1, and the rdtsc value just before returning
|
|
from sys_ipc() in dw2.
|
|
_
|