The intention of the dnx project is to create the Unix-like small operating system for the microcontrollers. The basis of those assumptions is that all peripherals that exist in the microcontroller are represented as files localized in the special file systems. If the user wants to have access to a given device, one should open a specified file and use the standard IO access commands.
The Top Layer of the architecture is the Application layer. It represents all programs written by the user. In this layer the user exploits a goods of the entire system. The software at this level has the smallest dependence on the current microcontroller architecture.
The dnx Layer is an interface that joins lower and upper layers together. This layer contains: standard, thread, network, and other libraries. Moreover the Virtual File System works at this level and provides file system support. The kernel is also controlled from this layer.
The Kernel Layer contains the kernel software. From this layer all tasks are controlled by the operating system. It provides all interfaces that can be used to communicate with and between tasks. This layer is connected directly to the hardware (only the parts that are used to control context switching).
The File System Layer is a layer that contains all file systems. This layer is directly connected to the VFS core module.
The Driver Layer is directly connected to the hardware. The user controls all devices from this layer. Every input/output operations are implemented here.
Architecture of Drivers
The drivers can be connected together to achieve maximum speed of access to resources. For example, the GPIO driver can share specified macros or functions that help other drivers in fast access to the GPIO pins (e.g. Chip Select in a SD card or a SPI slaves). Normally, if a driver is more complicated then the access should be done by means of the dnx layer (VFS). The TTY drivers is a good example. This driver reads data from a UART device and writes to it. A direct access is not possible because the higher layer is needed to access the files. Generally, small atomic operations can be done by using the direct driver communication. Note that the direct driver interfaces provide inconsistency and problems with dependencies between drivers. So, in this case, direct interfaces should be limited as much as possible.