The key design principle of ArceOS is to divide components based on their relevance to the OS design concept, in order to reduce component coupling and improving reusability.
Crates are OS-agnostic components that can be reused in other OS or system software projects with almost no modification, providing the most reusability. For example, the basic data structures, algorithms, and utilities.
See arceos-crates for crates used by ArceOS.
Modules are OS-related components that are tightly bound to the design principles of a specific OS and have relatively poor reusability. It may need to be redesigned when it is ported to another OS.
Most of the modules are optional, depending on the features enabled by the application. A few modules are required by all applications, as shown below:
- axruntime: Bootstrapping from the bare-metal environment, and initialization.
- axhal: Hardware abstraction layer, provides unified APIs for cross-platform.
- axconfig: Platform constants and kernel parameters, such as physical memory base, kernel load addresses, stack size, etc.
- axlog: Multi-level formatted logging.
Other optional modules and their corresponding features are as follows:
Modules | Dependent features | Description |
---|---|---|
axalloc | alloc | ArceOS global memory allocator. |
axdisplay | display | ArceOS graphics module. |
axfs | fs | ArceOS filesystem module. |
axnet | net | ArceOS network module. |
axdriver | driver-*, fs, net, display | ArceOS device drivers. |
axtask | multitask | ArceOS task management module. |
axsync | multitask | ArceOS synchronization primitives. |
See arceos-apps for example applications and their required modules and features.
Documentation of ArceOS modules, api, and ulib are generated by rustdoc
and hosted on GitHub Pages: