# YeyotowOS **Repository Path**: home-coder/YeyotowOS ## Basic Information - **Project Name**: YeyotowOS - **Description**: Yeyotow Kernel - **Primary Language**: C - **License**: GPL-2.0 - **Default Branch**: mini2440 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 1 - **Created**: 2018-10-02 - **Last Updated**: 2025-01-24 ## Categories & Tags **Categories**: os, hardware **Tags**: None ## README # YeyotowOS [TOC] #### 项目介绍 Yeyotow: Yesterday you said tomorrow . 1. 硬件平台:公司SylixOS测试部门借的micro2440主板(FriendArmy生产); 系统:命名为Yeyotow 2. 本项目为开源项目,基础代码来自于网络,但仍有很多很多功能未支持。 3. 如果你喜欢做这些东西,那么加入到这里来吧! 4. 微信:jxj-723, 加好友请输入验证:Yeyotow #### 项目介绍更新 1. 分支micro2440是在公司借的测试板子上面编写的系统,这是在2019年10月份完成的,后自己在闲鱼上面花100元买了一个mini2440的板子,很便宜,但是与micro2440略有差异, 经过一系列改动后,之后的日子仅仅维护mini2440的平台。micro2440暂时停滞在Version1.0版本. #### 安装教程 1. ##### 下位机准备 开发板闲鱼链接:搜索mini2440,购买即可(需要包含主板+电源+烧录线+串口线) 2. ##### 上位机准备 windows 或 ubuntu均可 3. ##### 源码下载 git clone https://gitee.com/home-coder/YeyotowOS.git 4. ##### 交叉编译工具链 windows下需要下载arm-none-eabi- 工具链,并添加环境变量到PATH ubuntu下直接运行sudo apt-get install gcc-arm-none-eabi 5. ##### 编译源码 windows下安装gittortoise, 右键进入git-bash环境,在该shell下进入源码目录YeyotowOS, 执行 ./build.sh 完成编译; ubuntu下打开terminal, 进入源码目录YeyotowOS, 执行./build.sh完成编译; 6. ##### 镜像烧录 1. 连接开发板,将烧录线和串口线均连接到上位机,以便烧录和查看串口输出; 2. 拨码开关(耳机口附近) 拨到Nor模式 3. 打开MiniTool软件 >> 裸机烧录 >> Nand >> format >> ram addr: 0x30000000 >> superboot选择YeyotowOS/tinyboot/bootloader.bin >> OS 选择 YeyotowOS/YeyotowOS/bin/firmwire.bin 4. 上电,此时Minitool下面提示连接成功,表示进入刷机模式,点击烧录即可 5. 烧录完成后 >>断电 >> 拨码开关拨回 >> 重新上电 >> 串口显示系统Logo ! ``` Welcome to the new World ____________________ | * | | * * | | * | | * | |____________________| | .-"""-. | / .===. \ | \/ 6 6 \/ | ( \_6_/ ) | \__-__/ | _________ooo____|_|_________________ | 2 0 | | jxj-723 one_face@sina.com | | | A simple kernel : YeyotowOS | | | Yestoday you said tomorrow ! | | 1_______________________ooo_________ 9 | | | | | |_ | _| | | | | |__|__| f-'Y'-u (__c k__) kernel thread`s stack top address :0x301002fc, in .bss seg ! . Hello TaskStart Task0 [Yeyotow]#. ``` #### 软件架构 ##### 1. 源码目录树说明 ``` keanu@yeyotow:~/src/yeyotow/YeyotowOS$ tree -L 3 . ├── build.sh-----------------------------------编译脚本 ├── doc----------------------------------------文档资料 ├── LICENSE ├── README.md ├── tinyboot-----------------------------------bootloader └── YeyotowOS----------------------------------内核主目录 ├── bin------------------------------------内核固件 │   ├── firmware.bin │   └── firmware.elf ├── bsp------------------------------------bsp源码 │   ├── app--------------------------------用户程序 │   ├── dev--------------------------------设备驱动 │   └── start------------------------------系统板级启动代码 ├── config.mk ├── makefile ├── os-------------------------------------内核 │   ├── include----------------------------内核头文件 │   ├── kernel-----------------------------内核源码 │   ├── lib--------------------------------系统库 │   ├── module-----------------------------功能组件 │   └── soc--------------------------------平台接口 └── rules.mk ``` ##### 2. 源码运行流程说明 1. 使用MiniTool工具,在nor模式下进行烧录:将tinyboot(bootloader镜像) 和 YeyotowOS(内核镜像)分别烧录到nand的0x0地址和默认的0x2800地址处; **注:**单独编写tinyboot的原因是前期没有MMU的情况下,想要实现异常的跳转功能,必须要自定义向量表入 口的处理 函数,而官方superboot我没有源码没法修改。 2. 切换开关为nandflash模式启动; 3. 通过bootloader.bin将firmware.bin搬运到加载地址0x30000000处,然后跳转到0x30000000处执行内核代码; 4. 内核代码根据链接脚本定义的各段地址进行重定向; 5. 分配各个arm工作模式的栈; 6. 创建内核任务并加载到CPU执行单元予以调度; 7. 进行片上外设初始化; 8. 启动用户任务; #### 功能支持列表 ​ `注意:`**由于CPU的限制,以下功能有几个是不支持的,即便支持的目前也么有完全实现** 01. 支持nor和nand启动; 02. 支持shell, [tinyshell]#, 支持删除和历史功能; 03. 支持MMU虚拟地址的映射和简单的页表管理; 04. 支持Cache; 05. 支持任务优先级; 06. 支持中断栈和嵌套; 07. 支持串口; 08. 支持Xmoder协议; 09. 支持gpio; 10. 支持tick; 11. 支持简单的内存管理; 12. 支持多核多任务; 13. 支持任务绑核; 14. 支持cpu状态信息打印; 15. 支持中断状态打印; 16. 支持信号量; 17. 支持互斥量; 18. 支持消息机制; 19. 支持DMA读写; 20. 支持i2c读写和i2c接口的RTC时间功能,重启不丢失时间; 21. 支持文件系统; 22. 支持固化系统固件; 23. 支持看门狗Reset处理器; 24. 支持TFTP下载; 25. 支持lwip网络协议; #### 参与贡献 0. 添加项目作者微信:jxj-723 1. Fork 本项目 2. 新建 Feat_xxx 分支 3. 建议vscode编辑代码 4. 提交代码 5. 新建 Pull Request ##### TODO Feature List | 完成tinyboot对firmware.bin的搬运 | 完成OS任务的启动和切换 | 完成中断的跳转 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------------- | | | 完成中断向量去tinyboot化(通过MMU实现虚拟地址0x0->物理地址0x30000000的映射) | MMU基础上完成一级页表管理 | | 完成tinyshell功能支持 | 完成cpu状态查询命令 top | 完成irq状态查询命令 ints | | 完成mem状态,包括各个段的地址划分/映射表 mems | 多核多进程管理 | | | YeyotowOS运行在两个CPU核上 | 重启热启动reset功能支持 | 优化tick被嵌套打断时,修正tick计时器. | | 反复完善系统已有功能, 优化中断服务接口,优化代码整体结构. | 0核运行SylixOS, 1核运行YeyotowOS, 各自有自己的shell终端。 | | | | | | | shell中添加内核机制的测试命令,如测试信号量:semtest | 实现i2c的驱动
实现eeprom的驱动
实现i2c的框架
使用框架与内核机制重新实现eeprom的驱动 | | | 实现声卡驱动 实现shell命令从nand中读取并播放mp3 | 实现网卡网卡驱动 实现tftp协议,
将mp3写入到内存 实现shell命令nandread,将内存内容写入到nand
校验上述功能的准确性 | | | **中断注册函数要支持传参**,否则根据中断号判断产生中断的控制器句柄占用“等待中断开状态”时间,比较耗时.
**注意**在支持传参完成后注意修改所有如串口等中断注册驱动 | 多核多操作系统多进程管理 | | | | 两个不同OS的cpu核之间进行通信,共享内存。 | | | **添加设备层**,使用链表管理所有设备,dev_open设备名字去获得实际的设备句柄;各个设备驱动需要改写,写成结构体,至少包含设备名和设备操作集两个成员。 | **使用TFTP方式调试**
修改tinyboot支持tftp下载内核镜像
调试可以不再使用MiniTools工具刷机
需要完成dm9000网卡驱动
需要完成tftp基本协议,下载主机上的镜像 | | | **添加设备框架层缓冲区**:暂时不做设备模型,只将网卡的驱动上层加入收发阻塞缓冲,底层采用中断主动触发方式上交数据包 | | | | | | | | | | | ##### TODO Bug List | shell中的uart驱动中断中必须加入printf("..\n");才可以正常输出[Yeyotow#] | key按键中断和输入help命令
等连续使用会引起系统死机 | | | ------------------------------------------------------------ | ------------------------------------------------------ | ---- | | 当前版本的bug:Task1 Task2 不能输出信息 | | | | | | | | | | | #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)