update Readme.

This commit is contained in:
zhangzheng
2023-08-31 22:52:39 +08:00
parent 79afd6cb77
commit de502e3b8c
5 changed files with 87 additions and 57 deletions

116
Readme.md
View File

@@ -1,39 +1,94 @@
## MKRTOS 是什么
- MKRTOS 全称是 Micro-Kernel Real-Time Operating System中文名字是微内核实时操作系统。其最终的意义是实现一个小内核,并兼容 Posix 标准的操作系统,使其完全适用于各类嵌入式场合。
- MKRTOS 全称是 Micro-Kernel Real-Time Operating System中文名字是微内核实时操作系统。MKRTOS被设计为一个极其精简的内核内核只包含thread、task、内存管理等功能其它所有功能都被实现在用户态同时兼容 Posix 标准的操作系统,使其完全适用于各类嵌入式场合。
### 开发背景
- Cortex-M 在工业控制领域非常火,但是易用的操作系统非常上,可能有 ucos 这类的操作系统,但是其功能都非常的简单,使用这类 RTOS 都有着一定的学习成本(我也写过一个,可以看看 xTinyRTOS非常简单.开发 MKRTOS 的初衷就是兼容 POSIX以降低学习成本并且在开发时还考虑到内存的使用对内存使用进行优化。
- 单片机被广泛的应用与工业以及物联网领域,适用于单片机的操作系统非常例如rtthreadfreertos这类的操作系统但是其功能都非常的简单使用这类 RTOS 都有着一定的学习成本(我也写过一个,可以看看 xTinyRTOS非常简单开发 MKRTOS 的初衷就是兼容 POSIX以降低学习成本并且在开发时还考虑到内存的使用对内存使用进行优化。Note:rtthread支持软件包但是也存在架构设计以及拓展性方面的问题。
### MKRTOS 内核特性
### MKRTOS 内核
#### done
- 1.处理器:默认支持 Cortex-M3 处理器
- 2.进程间通信,采用同步通信机制,内核不缓存任何数据。
- 3.内核只需要支持systick以及串口即可启动系统。
- 4.内核采用C语言编写并使用面向对象的编程方式功能均被抽象为内核对象。
- 5.内核支持对象线程对象、进程对象、工厂对象、内存管理对象、Log对象IPC对象。
- 4.多线程支持多线程管理线程与task分离设计跟合理。
- 5.多进程:支持内存空间与对象空间,进程只管理资源。
- 6.MPU实现进程隔离。
#### todo
- 1.Cortex-M其它系列处理器、RISC-V龙芯支持。
- 2.硬件浮点支持。
- 3.irq对象支持用于内核中断转发到用户态。
- 4.支持MMU实现进程隔离。
- 5.内核futex支持用于实现用户态的锁
#### doing
- 1.IPC功能完善。
- 1.处理器:默认支持 Cortex-M3 处理器。
- 2.进程间通信:支持信号、消息邮箱、信号量、匿名管道、共享内存。
- 3.文件系统:支持 vfs并开发了 spfs 文件系统,文件系统支持块缓存
- 4.可执行文件支持bin文件的应用程序并支持mpu做应用间隔离。
- 5.内存管理:链式内存管理,比较节省内存
- 6.多任务支持,多线程还在完善。
- 7.驱动框架:字符设备与块设备。
- 8.常用驱动nullttytty0flash。
- 9.用户态支持软件浮点修改了dietlib库可以做一些浮点方面的计算
- 9.以太网支持正在更新采用lwip
### 系统功能
- 支持的库dietlibc部分支持
- 支持的应用shelllsymodem 等.
### 其它
- 支持使用ymodem通过串口直接下载应用程序。
- shell还比较简陋目前只支持4条命令可以执行/bin/目录下的应用程序。
### 硬件支持
- STM32F103RCT6
- STM32F205RFT6(qemu)
### MKRTOS 用户态基础支持
#### done
- 1.可执行文件支持bin可执行文件
#### doing
- 1.musl libc库支持
- 2.init进程
- 3.shell服务
- 4.path manager服务
#### todo
- 1.kconfig支持
- 2.Fat、Ext、LittleFs系列文件系统支持
- 3.drv manager服务
- 4.process manager服务
- 5.字符驱动、块驱动、显示驱动、网络驱动支持
### MKRTOS 用户态生态
- 1.toybox常用命令支持
- 2.ota支持
- 3.ymodem支持
- 4.GUI支持
- 5.lwip支持。
- 6.modubs支持。
- 7.can通信协议支持。
- 8.AT协议支持。
- 9.其它。
### 怎么使用?
- 工程更改为CMake+GCC可以配合WSL2+Vscode+qemu在Linux下开发,支持软件模拟
- 工程采用CMake进行管理,并在Linux下进行开发,建议使用Ubuntu18.04开发
- GCC编译器采用gcc-arm-none-eabi-5_4-2016q3也可以使用新版本进行开发。
- Qemu模拟STM32F2老版本的Qemu对coretx-m3的模拟存在bug请使用最新版本Qemu8.0及以上。
使用步骤:
1. 安装CMake
```
sudo apt install cmake
```
2. 安装ninja
```
sudo apt update
sudo apt install ninja-build
```
3. 下载gcc
- 直接使用ubuntu命令安装的gcc arm会没有gdb可以直接到我给定的仓库下载
```
https://gitee.com/IsYourGod/mkrtos-tools.git
```
4. Qemu
- 1.Qemu可以直接下载官方的进行编译
- 2.也可以从我给定的链接下载
```
https://gitee.com/IsYourGod/mkrtos-tools.git
```
5. 修改build.sh脚本中GCC路径和GCC库路径
```
export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/
export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m
```
6. 修改run.sh 和debug.sh中qemu的路径
```
qemu-system-arm -machine\
netduino2 -cpu cortex-m3 \
-nographic -m size=2\
-kernel $PWD/build/output/kernel.img \
-S -gdb tcp::$1
```
### 我的博客
- 欢迎到博客交流(还没有申请域名^-^[MKRTOS博客](http://124.222.90.143/)
@@ -67,10 +122,5 @@
4. 增加cpio文件系统支持。
5. 增加软件浮点支持。
6. 增加双向链表和单项链表.
### 工作规划
1. 优化内核。
2. 完善用户管理,用户登录相关系统调用。
3. 完善spFS以及vfs文件系统。1mmap等的支持考虑是否采用分页内存管理分页比较费内存。2完善文件的权限管理
4. 重新实现自己的网络协议栈。
5. 显示驱动完善。
7. cortex-m4支持。
* 2023/8/31
1. 系统重新设计,内核更新为微内核。

View File

@@ -1,5 +1,6 @@
#!/bin/bash
export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/
export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m
export KNL=mkrtos
export KEN_OFFSET=0x2000
export INIT_OFFSET=0x10000

View File

@@ -1,12 +1,4 @@
#!/bin/bash
###
# @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
# @Date: 2023-08-14 09:47:54
# @LastEditors: zhangzheng 1358745329@qq.com
# @LastEditTime: 2023-08-18 15:44:08
# @FilePath: /mkrtos-real/debug.sh
# @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
###
# if [-z "$1"]; then
# echo "usage: ./debug.sh [tcp port]"

13
run.sh
View File

@@ -1,17 +1,4 @@
#!/bin/bash
###
# @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
# @Date: 2023-08-14 09:47:54
# @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
# @LastEditTime: 2023-08-14 11:56:33
# @FilePath: /mkrtos-real/run.sh
# @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
###
# if [-z "$1"]; then
# echo "usage: ./debug.sh [tcp port]"
# exit
# fi
qemu-system-arm -machine\
netduino2 -cpu cortex-m3 \

View File

@@ -1,6 +1,6 @@
set(CMAKE_TOOLCHAIN_PATH "/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/" CACHE STRING " " FORCE)
set(CMAKE_TOOLCHAIN_PATH $ENV{TOOLCHAIN} CACHE STRING " " FORCE)
set(CROSS_COMPILE ${CMAKE_TOOLCHAIN_PATH}arm-none-eabi- CACHE PATH "" FORCE)
set(GCC_LIB_PATH "/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7-m")
set(GCC_LIB_PATH $ENV{TOOLCHAIN_LIB})
set(CMAKE_INSTALL_PATH "${CMAKE_BINARY_DIR}deploy" CACHE PATH "" FORCE)
set(CMAKE_C_COMPILER "${CROSS_COMPILE}gcc" CACHE PATH "" FORCE)