zephyr/samples/nanokernel/benchmark/footprint
Anas Nashif c740608ce5 Use BOARD instead of PLATFORM_CONFIG
Change-Id: I14db0087cd705df0db8a911071bc3949b5c79314
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-02-05 20:25:11 -05:00
..
src x86: iamcu: Add support for the IAMCU calling convention. 2016-02-05 20:25:06 -05:00
Makefile Use BOARD instead of PLATFORM_CONFIG 2016-02-05 20:25:11 -05:00
README.txt Update Title in sample project README.txt files 2016-02-05 20:15:21 -05:00
prj_max_arm.conf arm: remove ENHANCED_SECURITY config from projects 2016-02-05 20:24:20 -05:00
prj_max_x86.conf x86: collapse AUTOMATIC_FP_ENABLING into FP_SHARING 2016-02-05 20:24:20 -05:00
prj_min_arc.conf benchmarks: disable CONFIG_ERRNO for minimal configurations 2016-02-05 20:24:58 -05:00
prj_min_arm.conf benchmarks: disable CONFIG_ERRNO for minimal configurations 2016-02-05 20:24:58 -05:00
prj_min_x86.conf ipi: rename to ipm 2016-02-05 20:25:04 -05:00
prj_min_x86_galileo.conf benchmarks: disable CONFIG_ERRNO for minimal configurations 2016-02-05 20:24:58 -05:00
prj_min_x86_quark_d2000.conf benchmarks: disable CONFIG_ERRNO for minimal configurations 2016-02-05 20:24:58 -05:00
prj_reg_arm.conf arm: remove ENHANCED_SECURITY config from projects 2016-02-05 20:24:20 -05:00
prj_reg_x86.conf x86: change the default for ENHANCED_SECURITY to no 2016-02-05 20:24:20 -05:00
testcase.ini sanity: exclude Minute IA platforms from float tests 2016-02-05 20:24:43 -05:00

README.txt

Title: Nanokernel Footprint Measurement

Description:

This project is designed to characterize the memory requirements of a
nanokernel-only image running on an Atom target.


The project can be built using several configurations:

minimal (a "do nothing" image that has support for few kernel capabilities)
-------
- Background task is only task in system; no fibers are utilized.
- Background task simply runs an endless loop that increments a global variable.
- No system timer support.
- ISR for the spurious interrupt handling is present.
- IDT and stack memory sizes are very limited.

regular (a "typical" image that has support for some kernel capabilities)
-------
- As for "minimal" configuration, except as noted below.
- Supports larger IDT and utilizes larger stacks.
- A statically linked dummy ISR is present.
- Background task also starts a fiber.
- Fiber prints a message to the console via printk().
- Supports system timer, along with NANO_TIMER objects.
- Links in support for NANO_SEM objects.

maximal (a "complex" image that has support for many kernel capabilities)
-------
- As for "regular" configuration, except as noted below.
- Supports full IDT and utilizes even larger stacks.
- Background task dynamically links in the dummy ISR, rather than having
  it statically linked.
- Fiber prints a message to the console via printf(), rather than printk().
- Links in support for NANO_LIFO, NANO_STACK, and NANO_FIFO objects.
- Adds floating point support (for x87 FPU, including SSE).


NOTE:
- These configurations utilize standard security only.

--------------------------------------------------------------------------------

Building and Running Project:

This nanokernel project does not generate any output in the default case
(TEST=min). In the regular case (TEST=reg) and the maximal case (TEST=max),
it outputs to the console. It can be built and executed on QEMU as follows:

    make TEST=min qemu         (minimal configuration)

    make TEST=reg qemu         (regular configuration)

    make TEST=max qemu         (maximal configuration)

--------------------------------------------------------------------------------

Troubleshooting:

Problems caused by out-dated project information can be addressed by
issuing one of the following commands then rebuilding the project:

    make clean          # discard results of previous builds
                        # but keep existing configuration info
or
    make pristine       # discard results of previous builds
                        # and restore pre-defined configuration info

--------------------------------------------------------------------------------

Sample Output:

The resulting image is bootable for all configurations, but produces different
output in each case.

minimal
-------
This configuration does NOT produce any output. To observe its operation,
invoke it using gdb and observe that:
- main() increments "i" each time it loops
- the kernel's timer ISR increments "nanoTicks" on a regular basis

regular
-------
This configuration prints the following message to the console:

  Running regular nanokernel configuration

maximal
-------
This configuration prints the following message to the console:

  Running maximal nanokernel configuration

--------------------------------------------------------------------------------

Additional notes:

Various host utilities (such as the Unix "size" utility) can be used to
determine the footprint of the resulting outdir/nanokernel.elf image.