aleksib 发表于 2024-8-27 10:10

为了学习内核开发,大佬手搓了一个轻量级操作系统YiYiYa OS


![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635206585-705f822f-02f3-4227-abfc-cfa47c633ff5.png)


YiYiYa操作系统是一个朴实无华的操作系统,追求快速开发,最小实现,同时遵循SOLID原则。编码简洁明了,非常适合学习操作系统的同学。目前既有宏内核,也逐步实现了微内核架构,未来将会是混合内核。



目前YiYiYa OS支持很多种架构和平台,包括ARM-Cortex A7系列的V3s、T113-S3等芯片、ARM9内核的F1C系列芯片以及部分RISC-V内核芯片,所有移植教程及方法都在Github上公开。


![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635230142-2024-01-20-15-53-16.png)

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635236167-2024-01-20-16-37-45-1.png)

# 系统架构

架构从上而下分层设计,同一层从左到右为模块。越下层与用户离得远,就会变得越通用越公共。分层设计便于扩展,方便维护,每一层的职责单一,让每一层依赖都是固定,不会胡乱调用(实现低耦合)。同时高层依赖底层,依赖接口,不依赖具体细节实现,底层的改动不至于影响太大,这就是基本的设计原则。

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635252850-arch.png)


## 应用层

应用层直接和用户操作打交道。有图形界面和shell命令交互。此层面对用户开发应用和常用库,对应源码目录为app。

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635283122-2024-01-21-17-19-45.png)

## 应用层

应用层直接和用户操作打交道。有图形界面和shell命令交互。此层面对用户开发应用和常用库,对应源码目录为app。

## 接口层(C标准库)

接口层为操作系统内核向外核提供的基本功能。通过libc和libmusl可选,实现基本的标准库,方便开发者直接移植代码或者适配应用app。

## 内核层

内核层则为核心领域业务。每一小个模块都提供基本的功能。按各自的职责划分,分别对应与传统内核层则为核心领域业务。每一小个模块都提供基本的功能。按各自的职责划分,分别对应与传统操作系统的内存管理、进程通信、文件系统、进程通信、等等。在演进操作系统时候,可以修改这里,对应源码目录为kernel。

## 基础设施层(公共层和硬件层)

将硬件CPU相关和平台模块相关的单独作为公用库使用。目录为arch、platform、libs/kernel。

在移植适配的时候基本上和这些模块打交道比较多,同时单独一个库可以提高内核代码复用性,内核有专门的内核库,以便增加代码安全,减少出错。

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635311995-828c40bf93c9-resized.jpg)


* 支持荔枝派系列开发板,全志V3s,F1C200S,T113-S3等芯片,RISC-V的支持在规划中
* 支持uboot引导内核,同时支持不需要uboot引导模式
* 支持lcd屏幕,st7789、st7735、通用40pin rgb屏幕
* 支持vfs,fat32文件格式
* 支持elf文件,ipc管道等
* 支持ahci、gpio、i2c、spi驱动等

# 系统移植教程

作者本人及团队自制的开源掌机FunKey所采用的操作系统就是基于Linux内核和YiYiYa OS,YiYiYa OS内提供了丰富的桌面系统和游戏开发框架,其非常简易的移植过程,也让开发者可以轻松地运用YiYiYa OS裸机开发自己的设备。

以基于T113-S3开发的FunKey掌机为例,在进行平台移植时,需要在新增的duck/platform目录下添加gpio.h头文件以及编写 init.c 包含基本的串口功能,然后再执行以下三个步骤,就可以轻松运行起YiYiYa OS:

克隆项目
```
git clone https://github.com/evilbinary/YiYiYa.git
make pull
```

安装构建工具
```
pip install yymake
```

编译
```
ya -m debug -p t113-s3 -r t113-s3
```

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635467911-jkjkk.gif)


#其它功能及开源资料获取

整体来说,YiYiYa操作系统非常轻量,支持POSIX操作系统标准协议,同时还支持扩展,方便使用其他语言开发模块。在应用层,可以通过libc/libmusl标准库和常用的库开发应用;在内核层可以调用基本内核模块的功能和共用库,开发者可以在DIY过程中自行选择。


![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635490893-2024-01-20-16-25-29.png)


![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635500117-2024-01-20-16-26-27.png)


![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1724635505670-2024-01-20-16-26-56.png)


freebsder 发表于 2024-8-27 15:22

<p>这个厉害了</p>

hellokitty_bean 发表于 2024-8-27 15:54

<p>果然是大佬。。。。。亲手搓一搓就成了!!!!!!!!!!敬仰!<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/lol.gif" width="48" /></p>

振动试验仪器 发表于 2024-8-28 12:42

感谢分享

q1233 发表于 2024-8-30 14:11

<p>感谢分享!感谢分享!感谢分享!感谢分享!感谢分享!</p>
页: [1]
查看完整版本: 为了学习内核开发,大佬手搓了一个轻量级操作系统YiYiYa OS