| Title: Kernel Footprint Measurement |
| |
| Description: |
| |
| This project is designed to characterize the memory requirements of a |
| standard kernel 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) |
| ------- |
| - Idle task is only task in system. |
| - No system timer support. |
| - ISR for the spurious interrupt handling is present. |
| - IDT and stack memory sizes are very limited. |
| - Provides support for 2 task priorities. |
| |
| 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. |
| - Has "foreground" task that prints a message to the console via printk(). |
| - Provides support for 16 task priorities. |
| - Supports system timer, along with task scheduler support for time slicing. |
| - Links in support for EVENT, MUTEX, FIFO, and MAP 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. |
| - Provides support for 64 task priorities. |
| - Foreground task dynamically links in the dummy ISR, rather than having |
| it statically linked. |
| - Foreground task prints a message to the console via printf(), |
| rather than printk(). |
| - Links in support for SEMAPHORE, PIPE, MAILBOX, and POOL objects. |
| - Links in support for task device interrupt handling and additional task APIs. |
| - Adds advanced power management support (including tickless idle). |
| - Adds floating point support (for x87 FPU, including SSE). |
| |
| |
| -------------------------------------------------------------------------------- |
| |
| Building and Running Project: |
| |
| This 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: |
| - the kernel's timer ISR & main thread increment "K_LowTime" on a regular |
| basis |
| - nano_cpu_idle() is invoked by the idle task each time K_LowTime is incremented |
| |
| regular |
| ------- |
| This configuration prints the following message to the console: |
| |
| Running regular kernel configuration |
| |
| maximal |
| ------- |
| This configuration prints the following message to the console: |
| |
| Running maximal kernel configuration |
| |
| -------------------------------------------------------------------------------- |
| |
| Additional notes: |
| |
| Various host utilities (such as the Unix "size" utility) can be used |
| to determine the footprint of the resulting |
| outdir/$BOARD/zephyr.elf image. |