68 lines
2.6 KiB
ReStructuredText
68 lines
2.6 KiB
ReStructuredText
.. _c_library_minimal:
|
|
|
|
Minimal libc
|
|
############
|
|
|
|
The most basic C library, named "minimal libc", is part of the Zephyr codebase
|
|
and provides the minimal subset of the standard C library required to meet the
|
|
needs of Zephyr and its subsystems, primarily in the areas of string
|
|
manipulation and display.
|
|
|
|
It is very low footprint and is suitable for projects that do not rely on less
|
|
frequently used portions of the ISO C standard library. It can also be used
|
|
with a number of different toolchains.
|
|
|
|
The minimal libc implementation can be found in :file:`lib/libc/minimal` in the
|
|
main Zephyr tree.
|
|
|
|
Functions
|
|
*********
|
|
|
|
The minimal libc implements the minimal subset of the ISO/IEC 9899:2011
|
|
standard C library functions required to meet the needs of the Zephyr kernel,
|
|
as defined by the :ref:`Coding Guidelines Rule A.4
|
|
<coding_guideline_libc_usage_restrictions_in_zephyr_kernel>`.
|
|
|
|
Formatted Output
|
|
****************
|
|
|
|
The minimal libc does not implement its own formatted output processor;
|
|
instead, it maps the C standard formatted output functions such as ``printf``
|
|
and ``sprintf`` to the :c:func:`cbprintf` function, which is Zephyr's own
|
|
C99-compatible formatted output implementation.
|
|
|
|
For more details, refer to the :ref:`Formatted Output <formatted_output>` OS
|
|
service documentation.
|
|
|
|
Dynamic Memory Management
|
|
*************************
|
|
|
|
The minimal libc uses the malloc api family implementation provided by the
|
|
:ref:`common C library <c_library_common>`, which itself is built upon the
|
|
:ref:`kernel memory heap API <heap_v2>`.
|
|
|
|
Error numbers
|
|
*************
|
|
|
|
Error numbers are used throughout Zephyr APIs to signal error conditions as
|
|
return values from functions. They are typically returned as the negative value
|
|
of the integer literals defined in this section, and are defined in the
|
|
:file:`errno.h` header file.
|
|
|
|
A subset of the error numbers defined in the `POSIX errno.h specification`_ and
|
|
other de-facto standard sources have been added to the minimal libc.
|
|
|
|
A conscious effort is made in Zephyr to keep the values of the minimal libc
|
|
error numbers consistent with the different implementations of the C standard
|
|
libraries supported by Zephyr. The minimal libc :file:`errno.h` is checked
|
|
against that of the :ref:`Newlib <c_library_newlib>` to ensure that the error
|
|
numbers are kept aligned.
|
|
|
|
Below is a list of the error number definitions. For the actual numeric values
|
|
please refer to `errno.h`_.
|
|
|
|
.. doxygengroup:: system_errno
|
|
|
|
.. _`POSIX errno.h specification`: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html
|
|
.. _`errno.h`: https://github.com/zephyrproject-rtos/zephyr/blob/main/lib/libc/minimal/include/errno.h
|