3 Star 6 Fork 1

博尔特烦恼 / YeyotowOS

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 12.28 KB
一键复制 编辑 原始数据 按行查看 历史

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的限制,以下功能有几个是不支持的,即便支持的目前也么有完全实现

  1. 支持nor和nand启动;
  2. 支持shell, [tinyshell]#, 支持删除和历史功能;
  3. 支持MMU虚拟地址的映射和简单的页表管理;
  4. 支持Cache;
  5. 支持任务优先级;
  6. 支持中断栈和嵌套;
  7. 支持串口;
  8. 支持Xmoder协议;
  9. 支持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网络协议;

参与贡献

  1. 添加项目作者微信:jxj-723
  2. Fork 本项目
  3. 新建 Feat_xxx 分支
  4. 建议vscode编辑代码
  5. 提交代码
  6. 新建 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
  3. 你可以 https://gitee.com/explore 这个地址来了解码云上的优秀开源项目
  4. GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
  5. 码云官方提供的使用手册 https://gitee.com/help
  6. 码云封面人物是一档用来展示码云会员风采的栏目 https://gitee.com/gitee-stars/
C
1
https://gitee.com/home-coder/YeyotowOS.git
git@gitee.com:home-coder/YeyotowOS.git
home-coder
YeyotowOS
YeyotowOS
mini2440

搜索帮助