unified: initial unified kernel implementation
Summary of what this includes:
initialization:
Copy from nano_init.c, with the following changes:
- the main thread is the continuation of the init thread, but an idle
thread is created as well
- _main() initializes threads in groups and starts the EXE group
- the ready queues are initialized
- the main thread is marked as non-essential once the system init is
done
- a weak main() symbol is provided if the application does not provide a
main() function
scheduler:
Not an exhaustive list, but basically provide primitives for:
- adding/removing a thread to/from a wait queue
- adding/removing a thread to/from the ready queue
- marking thread as ready
- locking/unlocking the scheduler
- instead of locking interrupts
- getting/setting thread priority
- checking what state (coop/preempt) a thread is currenlty running in
- rescheduling threads
- finding what thread is the next to run
- yielding/sleeping/aborting sleep
- finding the current thread
threads:
- Add operationns on threads, such as creating and starting them.
standardized handling of kernel object return codes:
- Kernel objects now cause _Swap() to return the following values:
0 => operation successful
-EAGAIN => operation timed out
-Exxxxx => operation failed for another reason
- The thread's swap_data field can be used to return any additional
information required to complete the operation, such as the actual
result of a successful operation.
timeouts:
- same as nano timeouts, renamed to simply 'timeouts'
- the kernel is still tick-based, but objects take timeout values in
ms for forward compatibility with a tickless kernel.
semaphores:
- Port of the nanokernel semaphores, which have the same basic behaviour
as the microkernel ones. Semaphore groups are not yet implemented.
- These semaphores are enhanced in that they accept an initial count and a
count limit. This allows configuring them as binary semaphores, and also
provisioning them without having to "give" the semaphore multiple times
before using them.
mutexes:
- Straight port of the microkernel mutexes. An init function is added to
allow defining them at runtime.
pipes:
- straight port
timers:
- amalgamation of nano and micro timers, with all functionalities
intact.
events:
- re-implementation, using semaphores and workqueues.
mailboxes:
- straight port
message queues:
- straight port of microkernel FIFOs
memory maps:
- straight port
workqueues:
- Basically, have all APIs follow the k_ naming rule, and use the _timeout
subsystem from the unified kernel directory, and not the _nano_timeout
one.
stacks:
- Port of the nanokernel stacks. They can now have multiple threads
pending on them and threads can wait with a timeout.
LIFOs:
- Straight port of the nanokernel LIFOs.
FIFOs:
- Straight port of the nanokernel FIFOs.
Work by: Dmitriy Korovkin <dmitriy.korovkin@windriver.com>
Peter Mitsis <peter.mitsis@windriver.com>
Allan Stephens <allan.stephens@windriver.com>
Benjamin Walsh <benjamin.walsh@windriver.com>
Change-Id: Id3cadb3694484ab2ca467889cfb029be3cd3a7d6
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
2016-09-02 18:55:39 -04:00
|
|
|
# Kconfig - nanokernel configuration options
|
|
|
|
|
|
|
|
#
|
|
|
|
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
#
|
|
|
|
|
|
|
|
menu "Unified Kernel Options"
|
|
|
|
|
|
|
|
config KERNEL_V2_DEBUG
|
|
|
|
bool
|
|
|
|
prompt "Kernel V2 debug help"
|
|
|
|
default n
|
|
|
|
depends on KERNEL_V2
|
|
|
|
select INIT_STACKS
|
|
|
|
|
|
|
|
config NUM_COOP_PRIORITIES
|
|
|
|
int
|
|
|
|
prompt "Kernel V2: number of coop priorities"
|
|
|
|
default 16
|
|
|
|
help
|
|
|
|
Number of cooperative priorities configured in the system. Gives access
|
|
|
|
to priorities:
|
|
|
|
|
|
|
|
K_PRIO_COOP(0) to K_PRIO_COOP(CONFIG_NUM_COOP_PRIORITIES - 1)
|
|
|
|
|
|
|
|
or seen another way, priorities:
|
|
|
|
|
|
|
|
-CONFIG_NUM_COOP_PRIORITIES to -1
|
|
|
|
|
|
|
|
This can be set to zero to disable cooperative scheduling. Cooperative
|
|
|
|
threads always preempt preemptible threads.
|
|
|
|
|
|
|
|
Each priority requires an extra 8 bytes of RAM. If there are more than
|
|
|
|
32 total priorities, an extra 4 bytes is required.
|
|
|
|
|
|
|
|
config NUM_PREEMPT_PRIORITIES
|
|
|
|
int
|
|
|
|
prompt "Kernel V2: number of preemptible priorities"
|
|
|
|
default 15
|
|
|
|
help
|
|
|
|
Number of preemptible priorities available in the system. Gives access
|
|
|
|
to priorities 0 to CONFIG_NUM_PREEMPT_PRIORITIES - 1.
|
|
|
|
|
|
|
|
This can be set to 0 to disable preemptible scheduling.
|
|
|
|
|
|
|
|
The idle thread is always installed as a preemptible thread of the
|
|
|
|
lowest priority.
|
|
|
|
|
|
|
|
Each priority requires an extra 8 bytes of RAM. If there are more than
|
|
|
|
32 total priorities, an extra 4 bytes is required.
|
|
|
|
|
|
|
|
config PRIORITY_CEILING
|
|
|
|
int
|
|
|
|
prompt "Kernel V2: priority inheritance ceiling"
|
|
|
|
default 0
|
|
|
|
|
|
|
|
config BOOT_BANNER
|
|
|
|
bool
|
|
|
|
prompt "Boot banner"
|
|
|
|
default n
|
|
|
|
select PRINTK
|
|
|
|
depends on EARLY_CONSOLE
|
|
|
|
help
|
|
|
|
This option outputs a banner to the console device during boot up. It
|
|
|
|
also embeds a date & time stamp in the kernel and in each USAP image.
|
|
|
|
|
|
|
|
config BUILD_TIMESTAMP
|
|
|
|
bool
|
|
|
|
prompt "Build Timestamp"
|
|
|
|
help
|
|
|
|
Build timestamp and add it to the boot banner.
|
|
|
|
|
|
|
|
config INT_LATENCY_BENCHMARK
|
|
|
|
bool
|
|
|
|
prompt "Interrupt latency metrics [EXPERIMENTAL]"
|
|
|
|
default n
|
|
|
|
depends on ARCH="x86"
|
|
|
|
help
|
|
|
|
This option enables the tracking of interrupt latency metrics;
|
|
|
|
the exact set of metrics being tracked is board-dependent.
|
|
|
|
Tracking begins when int_latency_init() is invoked by an application.
|
|
|
|
The metrics are displayed (and a new sampling interval is started)
|
|
|
|
each time int_latency_show() is called thereafter.
|
|
|
|
|
|
|
|
config MAIN_THREAD_PRIORITY
|
|
|
|
int
|
|
|
|
prompt "Priority of initialization/main thread"
|
|
|
|
default 0
|
|
|
|
default -1 if NUM_PREEMPT_PRIORITIES = 0
|
|
|
|
help
|
|
|
|
Priority at which the initialization thread runs, including the start
|
|
|
|
of the main() function. main() can then change its priority if desired.
|
|
|
|
|
|
|
|
config MAIN_STACK_SIZE
|
|
|
|
int
|
|
|
|
prompt "Size of stack for initialization and main thread"
|
|
|
|
default 1024
|
|
|
|
help
|
|
|
|
When the intitialization is complete, the thread executing it then
|
|
|
|
executes the main() routine, so as to reuse the stack used by the
|
|
|
|
initialization, which would be wasted RAM otherwise.
|
|
|
|
|
|
|
|
After initialization is complete, the thread runs main().
|
|
|
|
|
|
|
|
config ISR_STACK_SIZE
|
|
|
|
int
|
|
|
|
prompt "ISR and initialization stack size (in bytes)"
|
|
|
|
default 2048
|
|
|
|
help
|
|
|
|
This option specifies the size of the stack used by interrupt
|
|
|
|
service routines (ISRs), and during nanokernel initialization.
|
|
|
|
|
|
|
|
config THREAD_CUSTOM_DATA
|
|
|
|
bool
|
|
|
|
prompt "Task and fiber custom data"
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
This option allows each task and fiber to store 32 bits of custom data,
|
|
|
|
which can be accessed using the sys_thread_custom_data_xxx() APIs.
|
|
|
|
|
|
|
|
config NANO_TIMEOUTS
|
|
|
|
bool
|
|
|
|
prompt "Enable timeouts on nanokernel objects"
|
|
|
|
default y
|
|
|
|
depends on SYS_CLOCK_EXISTS
|
|
|
|
help
|
|
|
|
Allow fibers and tasks to wait on nanokernel objects with a timeout, by
|
|
|
|
enabling the nano_xxx_wait_timeout APIs, and allow fibers to sleep for a
|
|
|
|
period of time, by enabling the fiber_sleep API.
|
|
|
|
|
|
|
|
config NANO_TIMERS
|
|
|
|
bool
|
|
|
|
prompt "Enable nanokernel timers"
|
|
|
|
default y
|
|
|
|
depends on SYS_CLOCK_EXISTS
|
|
|
|
help
|
|
|
|
Allow fibers and tasks to wait on nanokernel timers, which can be
|
|
|
|
accessed using the nano_timer_xxx() APIs.
|
|
|
|
|
|
|
|
config NUM_DYNAMIC_TIMERS
|
|
|
|
int
|
|
|
|
prompt "Number of timers available for dynamic allocation"
|
2016-09-23 10:08:54 -07:00
|
|
|
default 0
|
unified: initial unified kernel implementation
Summary of what this includes:
initialization:
Copy from nano_init.c, with the following changes:
- the main thread is the continuation of the init thread, but an idle
thread is created as well
- _main() initializes threads in groups and starts the EXE group
- the ready queues are initialized
- the main thread is marked as non-essential once the system init is
done
- a weak main() symbol is provided if the application does not provide a
main() function
scheduler:
Not an exhaustive list, but basically provide primitives for:
- adding/removing a thread to/from a wait queue
- adding/removing a thread to/from the ready queue
- marking thread as ready
- locking/unlocking the scheduler
- instead of locking interrupts
- getting/setting thread priority
- checking what state (coop/preempt) a thread is currenlty running in
- rescheduling threads
- finding what thread is the next to run
- yielding/sleeping/aborting sleep
- finding the current thread
threads:
- Add operationns on threads, such as creating and starting them.
standardized handling of kernel object return codes:
- Kernel objects now cause _Swap() to return the following values:
0 => operation successful
-EAGAIN => operation timed out
-Exxxxx => operation failed for another reason
- The thread's swap_data field can be used to return any additional
information required to complete the operation, such as the actual
result of a successful operation.
timeouts:
- same as nano timeouts, renamed to simply 'timeouts'
- the kernel is still tick-based, but objects take timeout values in
ms for forward compatibility with a tickless kernel.
semaphores:
- Port of the nanokernel semaphores, which have the same basic behaviour
as the microkernel ones. Semaphore groups are not yet implemented.
- These semaphores are enhanced in that they accept an initial count and a
count limit. This allows configuring them as binary semaphores, and also
provisioning them without having to "give" the semaphore multiple times
before using them.
mutexes:
- Straight port of the microkernel mutexes. An init function is added to
allow defining them at runtime.
pipes:
- straight port
timers:
- amalgamation of nano and micro timers, with all functionalities
intact.
events:
- re-implementation, using semaphores and workqueues.
mailboxes:
- straight port
message queues:
- straight port of microkernel FIFOs
memory maps:
- straight port
workqueues:
- Basically, have all APIs follow the k_ naming rule, and use the _timeout
subsystem from the unified kernel directory, and not the _nano_timeout
one.
stacks:
- Port of the nanokernel stacks. They can now have multiple threads
pending on them and threads can wait with a timeout.
LIFOs:
- Straight port of the nanokernel LIFOs.
FIFOs:
- Straight port of the nanokernel FIFOs.
Work by: Dmitriy Korovkin <dmitriy.korovkin@windriver.com>
Peter Mitsis <peter.mitsis@windriver.com>
Allan Stephens <allan.stephens@windriver.com>
Benjamin Walsh <benjamin.walsh@windriver.com>
Change-Id: Id3cadb3694484ab2ca467889cfb029be3cd3a7d6
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
2016-09-02 18:55:39 -04:00
|
|
|
depends on NANO_TIMERS
|
|
|
|
help
|
|
|
|
Number of timers available for dynamic allocation via the
|
|
|
|
k_timer_alloc()/k_timer_free() API.
|
|
|
|
|
|
|
|
config NANOKERNEL_TICKLESS_IDLE_SUPPORTED
|
|
|
|
bool
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
To be selected by an architecture if it does support tickless idle in
|
|
|
|
nanokernel systems.
|
|
|
|
|
|
|
|
config ERRNO
|
|
|
|
bool
|
|
|
|
prompt "Enable errno support"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Enable per-thread errno in the kernel. Application and library code must
|
|
|
|
include errno.h provided by the C library (libc) to use the errno
|
|
|
|
symbol. The C library must access the per-thread errno via the
|
|
|
|
_get_errno() symbol.
|
|
|
|
|
|
|
|
config NANO_WORKQUEUE
|
|
|
|
bool "Enable nano workqueue support"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
Nano workqueues allow scheduling work items to be executed in a fiber
|
|
|
|
context. Typically such work items are scheduled from ISRs, when the
|
|
|
|
work cannot be executed in interrupt context.
|
|
|
|
|
|
|
|
config SYSTEM_WORKQUEUE
|
|
|
|
bool "Start a system workqueue"
|
|
|
|
default y
|
|
|
|
depends on NANO_WORKQUEUE
|
|
|
|
help
|
|
|
|
Start a system-wide nano_workqueue that can be used by any system
|
|
|
|
component.
|
|
|
|
|
|
|
|
config SYSTEM_WORKQUEUE_STACK_SIZE
|
|
|
|
int "System workqueue stack size"
|
|
|
|
default 1024
|
|
|
|
depends on SYSTEM_WORKQUEUE
|
|
|
|
|
|
|
|
config SYSTEM_WORKQUEUE_PRIORITY
|
|
|
|
int "System workqueue priority"
|
|
|
|
default -1
|
|
|
|
depends on SYSTEM_WORKQUEUE
|
|
|
|
|
2016-09-20 16:18:20 -04:00
|
|
|
config OFFLOAD_WORKQUEUE_STACK_SIZE
|
|
|
|
int "Workqueue stack size for thread offload requests"
|
|
|
|
default 1024
|
|
|
|
|
|
|
|
config OFFLOAD_WORKQUEUE_PRIORITY
|
|
|
|
int "Offload requests workqueue priority"
|
|
|
|
default -1
|
|
|
|
|
unified: initial unified kernel implementation
Summary of what this includes:
initialization:
Copy from nano_init.c, with the following changes:
- the main thread is the continuation of the init thread, but an idle
thread is created as well
- _main() initializes threads in groups and starts the EXE group
- the ready queues are initialized
- the main thread is marked as non-essential once the system init is
done
- a weak main() symbol is provided if the application does not provide a
main() function
scheduler:
Not an exhaustive list, but basically provide primitives for:
- adding/removing a thread to/from a wait queue
- adding/removing a thread to/from the ready queue
- marking thread as ready
- locking/unlocking the scheduler
- instead of locking interrupts
- getting/setting thread priority
- checking what state (coop/preempt) a thread is currenlty running in
- rescheduling threads
- finding what thread is the next to run
- yielding/sleeping/aborting sleep
- finding the current thread
threads:
- Add operationns on threads, such as creating and starting them.
standardized handling of kernel object return codes:
- Kernel objects now cause _Swap() to return the following values:
0 => operation successful
-EAGAIN => operation timed out
-Exxxxx => operation failed for another reason
- The thread's swap_data field can be used to return any additional
information required to complete the operation, such as the actual
result of a successful operation.
timeouts:
- same as nano timeouts, renamed to simply 'timeouts'
- the kernel is still tick-based, but objects take timeout values in
ms for forward compatibility with a tickless kernel.
semaphores:
- Port of the nanokernel semaphores, which have the same basic behaviour
as the microkernel ones. Semaphore groups are not yet implemented.
- These semaphores are enhanced in that they accept an initial count and a
count limit. This allows configuring them as binary semaphores, and also
provisioning them without having to "give" the semaphore multiple times
before using them.
mutexes:
- Straight port of the microkernel mutexes. An init function is added to
allow defining them at runtime.
pipes:
- straight port
timers:
- amalgamation of nano and micro timers, with all functionalities
intact.
events:
- re-implementation, using semaphores and workqueues.
mailboxes:
- straight port
message queues:
- straight port of microkernel FIFOs
memory maps:
- straight port
workqueues:
- Basically, have all APIs follow the k_ naming rule, and use the _timeout
subsystem from the unified kernel directory, and not the _nano_timeout
one.
stacks:
- Port of the nanokernel stacks. They can now have multiple threads
pending on them and threads can wait with a timeout.
LIFOs:
- Straight port of the nanokernel LIFOs.
FIFOs:
- Straight port of the nanokernel FIFOs.
Work by: Dmitriy Korovkin <dmitriy.korovkin@windriver.com>
Peter Mitsis <peter.mitsis@windriver.com>
Allan Stephens <allan.stephens@windriver.com>
Benjamin Walsh <benjamin.walsh@windriver.com>
Change-Id: Id3cadb3694484ab2ca467889cfb029be3cd3a7d6
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
2016-09-02 18:55:39 -04:00
|
|
|
config NUM_MBOX_ASYNC_MSGS
|
|
|
|
int ""
|
|
|
|
default 10
|
|
|
|
help
|
|
|
|
This option specifies the total number of asynchronous mailbox
|
|
|
|
messages that can exist simultaneously, across all mailboxes
|
|
|
|
in the system.
|
|
|
|
|
|
|
|
Setting this option to 0 disables support for asynchronous
|
|
|
|
mailbox messages.
|
|
|
|
|
|
|
|
config NUM_PIPE_ASYNC_MSGS
|
|
|
|
int "Maximum number of in-flight asynchronous pipe messages"
|
|
|
|
default 10
|
|
|
|
help
|
|
|
|
This option specifies the total number of asynchronous pipe
|
|
|
|
messages that can exist simultaneously, across all pipes in
|
|
|
|
the system.
|
|
|
|
|
|
|
|
Setting this option to 0 disables support for asynchronous
|
|
|
|
pipe messages.
|
|
|
|
|
|
|
|
config ATOMIC_OPERATIONS_BUILTIN
|
|
|
|
bool
|
|
|
|
help
|
|
|
|
Use the compiler builtin functions for atomic operations. This is
|
|
|
|
the preferred method. However, support for all arches in GCC is
|
|
|
|
incomplete.
|
|
|
|
|
|
|
|
config ATOMIC_OPERATIONS_CUSTOM
|
|
|
|
bool
|
|
|
|
help
|
|
|
|
Use when there isn't support for compiler built-ins, but you have
|
|
|
|
written optimized assembly code under arch/ which implements these.
|
|
|
|
|
|
|
|
config ATOMIC_OPERATIONS_C
|
|
|
|
bool
|
|
|
|
help
|
|
|
|
Use atomic operations routines that are implemented entirely
|
|
|
|
in C by locking interrupts. Selected by architectures which either
|
|
|
|
do not have support for atomic operations in their instruction
|
|
|
|
set, or haven't been implemented yet during bring-up, and also
|
|
|
|
the compiler does not have support for the atomic __sync_* builtins.
|
|
|
|
|
2016-09-12 11:35:26 -04:00
|
|
|
menu "Timer API Options"
|
|
|
|
|
|
|
|
config TIMESLICING
|
|
|
|
bool "Thread time slicing"
|
|
|
|
default y
|
|
|
|
depends on SYS_CLOCK_EXISTS && (NUM_PREEMPT_PRIORITIES != 0)
|
|
|
|
help
|
|
|
|
This option enables time slicing between preemptible threads of
|
|
|
|
equal priority.
|
|
|
|
|
|
|
|
config TIMESLICE_SIZE
|
|
|
|
int "Time slice size (in ms)"
|
|
|
|
default 0
|
|
|
|
range 0 2147483647
|
|
|
|
depends on TIMESLICING
|
|
|
|
help
|
|
|
|
This option specifies the maximum amount of time a thread can execute
|
|
|
|
before other threads of equal priority are given an opportunity to run.
|
|
|
|
A time slice size of zero means "no limit" (i.e. an infinitely large
|
|
|
|
time slice).
|
|
|
|
|
|
|
|
config TIMESLICE_PRIORITY
|
|
|
|
int "Time slicing thread priority ceiling"
|
|
|
|
default 0
|
|
|
|
range 0 NUM_PREEMPT_PRIORITIES
|
|
|
|
depends on TIMESLICING
|
|
|
|
help
|
|
|
|
This option specifies the thread priority level at which time slicing
|
|
|
|
takes effect; threads having a higher priority than this ceiling are
|
|
|
|
not subject to time slicing.
|
|
|
|
|
|
|
|
endmenu
|
2016-09-09 14:24:06 -04:00
|
|
|
|
|
|
|
config SEMAPHORE_GROUPS
|
|
|
|
bool "Enable semaphore groups"
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
This option enables support for semaphore groups. Threads that use
|
|
|
|
semaphore groups require more stack space. Disabling this option will
|
|
|
|
both decrease the footprint as well as improve the performance of
|
|
|
|
the k_sem_give() routine.
|
|
|
|
|
2016-09-01 18:14:17 -04:00
|
|
|
choice
|
|
|
|
prompt "Memory pools auto-defragmentation policy"
|
|
|
|
default MEM_POOL_AD_AFTER_SEARCH_FOR_BIGGERBLOCK
|
|
|
|
help
|
|
|
|
Memory pool auto-defragmentation is performed if a memory
|
|
|
|
block of the requested size can not be found. Defragmentation
|
|
|
|
can be done:
|
|
|
|
Before trying to find a block in the next largest block set.
|
|
|
|
This is an attempt to preserve the memory pool's larger blocks
|
|
|
|
by fragmenting them only when necessary (i.e. at the cost of
|
|
|
|
doing more frequent auto-defragmentations).
|
|
|
|
After trying to find a block in the next largest block set.
|
|
|
|
This is an attempt to limit the cost of doing auto-defragmentations
|
|
|
|
by doing them only when necessary (i.e. at the cost of fragmenting
|
|
|
|
the memory pool's larger blocks).
|
|
|
|
|
|
|
|
config MEM_POOL_AD_NONE
|
|
|
|
bool "No auto-defragmentation"
|
|
|
|
|
|
|
|
config MEM_POOL_AD_BEFORE_SEARCH_FOR_BIGGERBLOCK
|
|
|
|
bool "Before trying to find a block in the next largest block set"
|
|
|
|
|
|
|
|
config MEM_POOL_AD_AFTER_SEARCH_FOR_BIGGERBLOCK
|
|
|
|
bool "After trying to find a block in the next largest block set"
|
|
|
|
|
|
|
|
endchoice
|
|
|
|
|
unified: initial unified kernel implementation
Summary of what this includes:
initialization:
Copy from nano_init.c, with the following changes:
- the main thread is the continuation of the init thread, but an idle
thread is created as well
- _main() initializes threads in groups and starts the EXE group
- the ready queues are initialized
- the main thread is marked as non-essential once the system init is
done
- a weak main() symbol is provided if the application does not provide a
main() function
scheduler:
Not an exhaustive list, but basically provide primitives for:
- adding/removing a thread to/from a wait queue
- adding/removing a thread to/from the ready queue
- marking thread as ready
- locking/unlocking the scheduler
- instead of locking interrupts
- getting/setting thread priority
- checking what state (coop/preempt) a thread is currenlty running in
- rescheduling threads
- finding what thread is the next to run
- yielding/sleeping/aborting sleep
- finding the current thread
threads:
- Add operationns on threads, such as creating and starting them.
standardized handling of kernel object return codes:
- Kernel objects now cause _Swap() to return the following values:
0 => operation successful
-EAGAIN => operation timed out
-Exxxxx => operation failed for another reason
- The thread's swap_data field can be used to return any additional
information required to complete the operation, such as the actual
result of a successful operation.
timeouts:
- same as nano timeouts, renamed to simply 'timeouts'
- the kernel is still tick-based, but objects take timeout values in
ms for forward compatibility with a tickless kernel.
semaphores:
- Port of the nanokernel semaphores, which have the same basic behaviour
as the microkernel ones. Semaphore groups are not yet implemented.
- These semaphores are enhanced in that they accept an initial count and a
count limit. This allows configuring them as binary semaphores, and also
provisioning them without having to "give" the semaphore multiple times
before using them.
mutexes:
- Straight port of the microkernel mutexes. An init function is added to
allow defining them at runtime.
pipes:
- straight port
timers:
- amalgamation of nano and micro timers, with all functionalities
intact.
events:
- re-implementation, using semaphores and workqueues.
mailboxes:
- straight port
message queues:
- straight port of microkernel FIFOs
memory maps:
- straight port
workqueues:
- Basically, have all APIs follow the k_ naming rule, and use the _timeout
subsystem from the unified kernel directory, and not the _nano_timeout
one.
stacks:
- Port of the nanokernel stacks. They can now have multiple threads
pending on them and threads can wait with a timeout.
LIFOs:
- Straight port of the nanokernel LIFOs.
FIFOs:
- Straight port of the nanokernel FIFOs.
Work by: Dmitriy Korovkin <dmitriy.korovkin@windriver.com>
Peter Mitsis <peter.mitsis@windriver.com>
Allan Stephens <allan.stephens@windriver.com>
Benjamin Walsh <benjamin.walsh@windriver.com>
Change-Id: Id3cadb3694484ab2ca467889cfb029be3cd3a7d6
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
2016-09-02 18:55:39 -04:00
|
|
|
endmenu
|