中文 | English
Embedded libc, a libc library adapted for embedded systems and bare metal environments.
- Low resource usage
- OpenSource
- Especially for RISC-V
- Clear and understandable code structure
- Scalable
- Highly portable
├───arch -- Hardware-specific optimized implementations
├───crt -- Hardware-specific startup code
├───include -- Header files
│ └───sys -- System-related header files, typically included as <sys/head.h>
├───src -- Source files
│ ├───internal -- Internal header files
│ ├───misc -- Miscellaneous, contains modules that can be implemented in a single file
│ ├───stdio -- Standard IO module
│ └───stdlib -- Standard utility library module
├───helloworld -- Helloworld testcase
│ └───qemu -- QEMU bare-metal config
│ └───qemu-device -- Specific to the QEMU virtual machine device, related scripts and header files
├───xscript -- Scripts related to xmake
└───toolchains -- xmake scripts related to toolchains
● mlibc can support multiple embedded toolchains, including gcc (arm/risc-v) and even LLVM compilers.
● Designed for low-resource systems, providing excellent support for embedded real-time operating systems (such as RT-Thread) and bare metal.
● Optimized for RISC-V 32/64, compatible with mainstream RISC-V MCUs.
● Uses xmake and scons for building.
● Reserve
● Use QEMU/RISC-V 32GC simulation to output the first "hello world" (completed).
● Add the basic crt.s, string, and printf functions for the bare-metal version of mlibc (completed).
● Improve mlibc based on this environment.
Tutorial for setting up the environment on Windows:
By following this tutorial, you can run RT-Thread in a Windows environment.
Navigate to the rt-thread\bsp\qemu-vexpress-a9
folder, open env, and enter menuconfig in the command line to enter the configuration interface.
Switch DFS v2.0 to DFS v1.0:
- RT-Thread Components
- DFS: device virtual file system
- The version of DFS (DFS v1.0)
- DFS: device virtual file system
Download the mlibc package:
- RT-Thread online packages
- system packages
- Select the sixth option from the bottom:
mlibc: Embedded libc, especially for RISC-V
- Select the sixth option from the bottom:
- system packages
After finishing, you can exit the configuration page and enter scons -j12 in the command line to compile.
For those unsure where to download the source code, you can refer to the above Windows environment setup tutorial.
Navigate to the rt-thread\bsp\stm32\stm32f407-rt-spark
directory, then open env and enter menuconfig in the command line to enter the configuration interface.
Enable the file system (optional):
- Hardware Drivers Config
- Onboard Peripheral Drivers
- Enable File System
- Onboard Peripheral Drivers
Enable fatfs (optional):
- RT-Thread Components
- DFS: device virtual file system
- Enable elm-chan fatfs
- elm-chan's FatFs, Generic FAT Filesystem Module
- Change Maximum sector size to be handled to 4096
- Enable elm-chan fatfs
- DFS: device virtual file system
Download the mlibc package:
- RT-Thread online packages
- system packages
- Select the sixth option from the bottom: mlibc: Embedded libc, especially for RISC-V
- system packages
xmake + qemu + toolchain
Currently, five types of QEMU bare metal startup codes have been supported.
QEMU Device | Hardware Architecture | Toolchain |
---|---|---|
vexpress-a9 | arm | arm-none-eabi-gcc |
mps3-an536 (requires latest QEMU) | arm | arm-none-eabi-gcc |
virt-aarch64 | aarch64 | aarch64-unknown-elf-gcc |
virt-riscv32 | riscv32 | riscv32-unknown-elf-gcc |
virt-riscv64 | riscv64 | riscv64-unknown-elf-gcc |
- Navigate to the
mlibc/toolchains
folder, select the script corresponding to the toolchain you want to use, and configure the toolchain path accordingly. - Navigate to the
mlibc/helloworld/qemu/{qemu-device}
folder and open the command line.
# Here, we use qemu-vexpress-a9 as an example
xmake f --qemu-board=qemu-vexpress-a9
xmake build qemu-hello
After executing the command, an executable file named qemu-vexpress-a9.elf will be generated in the mlibc/helloworld/qemu/qemu-vexpress-a9
folder.
- Run the script
qemu.bat
in the corresponding folder.
# Enter the following command in the command line
qemu.bat
Information for each virtual environment is as follows:
Filename | Virtual Device | Switch Command |
---|---|---|
qemu-vexpress-a9 | vexpress-a9 | xmake f --qemu-board=qemu-vexpress-a9 |
qemu-mps3-an536 | mps3-an536 | xmake f --qemu-board=qemu-mps3-an536 |
qemu-virt-aarch64 | virt-aarch64 | xmake f --qemu-board=qemu-virt-aarch64 |
qemu-virt-riscv32 | virt-riscv32 | xmake f --qemu-board=qemu-virt-riscv32 |
qemu-virt-riscv64 | virt-riscv64 | xmake f --qemu-board=qemu-virt-riscv64 |
Note: Remember to execute the
xmake build qemu-hello
command after switching devices.
For simple C library compilation, the development environment is relatively straightforward; xmake and the appropriate toolchain are sufficient.
xmake + toolchain
- Navigate to the
mlibc/toolchains
folder, select the script corresponding to the toolchain you want to use, and configure the toolchain path accordingly.
Compile the C library
- Navigate to the
mlibc
folder, open the command line, and use xmake to compile the static library.
# Here, we use the ARM architecture static library as an example
xmake f --mlibc-arch=arm
xmake build mlibc
- A static library named
libmlibc.a
will be generated in themlibc/build/arm
directory. To integrate it with the toolchain, you can rename the file tolibc.a
for use.
Compile crt0
- Navigate to the
mlibc
folder, open the command line, and use xmake to compile crt0.
# Here, we use the ARM architecture crt0 as an example
xmake f --crt-arch=arm
xmake build crt0
- The generated file will be located in
mlibc/build/.objs/crt0
, namedcrt0.c.o
. When integrating with the toolchain, you need to rename the file tocrt0.o
for use.
mlibc is fully open-source, following the MIT license. It allows for commercial use and modifications without any concerns, provided that the MIT license is declared in the software, with no potential commercial risks.
-
How to
-
Fork the repository
-
Create Feat_xxx branch
-
Commit your code
-
Create Pull Request
-
mlibc follows the MIT License free software license. It's completely open-source, can be used in commercial applications for free, does not require the disclosure of code, and has no potential commercial risk.It is only necessary to declare that the MIT protocol is used in the software.