/onix

Onix - 操作系统实现

Primary LanguageCMIT LicenseMIT

Onix - 操作系统实现

主要功能

  • 系统引导:
    • bootloader
    • multiboot2
  • 设备驱动:
    • PIC 8259 中断控制器
    • PIT 8254 定时计数器
    • 蜂鸣器
    • CMOS 时钟 / 实时时钟
    • CRTC 控制台 0xb8000
    • PS/2 键盘
    • 串口设备
    • CPU 功能检测
    • FPU 浮点处理单元
    • IDE 硬盘 (PIO)
    • 声霸卡驱动 (🐛 一些情况下播放卡顿)
    • 软盘驱动
    • PCI 总线枚举
    • IDE 硬盘 (UDMA)
    • e1000 网卡驱动
    • ATAPI 光盘驱动
    • PS/2 鼠标 (🌱 panda)
    • VESA 图形驱动 (🌱 panda)
    • ACPI:控制关机和重启 @lihanrui2913 (🌱 acpi)
    • RTL8139 网卡驱动
    • USB
  • 内存管理:
    • 保护模式和全局描述符
    • 页映射(核心功能)
    • 堆内存管理
  • 任务管理:
    • 任务调度(核心功能)
    • 同步与互斥 (锁)
    • 定时器
    • 信号机制
  • 用户程序:
    • ELF 文件解析
    • ELF 文件加载运行
    • 动态链接库
  • 系统调用
  • 文件系统:
    • 管道
    • 套接字
    • Minix1 文件系统
    • FAT 12/16/32 文件系统 (🌱 fat32)
    • ISO9660 文件系统
  • 网络协议:
    • Ethernet 以太网协议
    • ARP 协议
    • IPv4 协议
    • ICMP 协议
    • UDP 协议
    • TCP 协议
    • DHCP 协议:局域网 IP 地址获取
    • DNS 协议:域名解析
    • HTTP 协议:简单的 HTTP 服务器
  • 开发环境:
    • WSL2 @znyin
    • docker (🌱 docker)

使用方法

目前不支持 USB 驱动,无法使用 U 盘直接在实体机启动,谨慎测试!

iso 文件的使用参考 版本 1.0.0

对于 qemu 模拟器,需要提前配置 tap0 设备,用于网络:

qemu-system-i386  -m 32M -audiodev pa,id=snd -machine pcspk-audiodev=snd -device sb16,audiodev=snd -rtc base=localtime -chardev stdio,mux=on,id=com1 -serial chardev:com1 -netdev tap,id=eth0,ifname=tap0,script=no,downscript=no -device e1000,netdev=eth0 -drive file=onix_1.0.0.iso,media=cdrom,if=ide -boot d

Pull Request 约定

  1. 确保每个修改的文件都是有意义的,不要添加与系统无关的文件;
  2. 确保每个 commit 都有足够的分量,对于无关紧要的 commit 可以合并在一起;
  3. Pull Request 请先提交到 dev 分支,若有新功能开发,再开新分支;

Commit Decription 前面加上 emoji ❤️ 提高阅读性:

  • ✨ 视频录制:与 B 站某一视频相关
  • 🐛 漏洞修复:修改了系统中的某个 Bug
  • 🎈 功能开发:加入原系统中没有的新功能
  • 📖 文档整理:修改 docs 中的内容
  • 📔 学习笔记:记录学习过程中的一些问题或者感悟
  • 🍕 其他:若有与 commit 强相关的 emoji 也可以添加,如:💾 软盘驱动

问题及答案

相关软件版本参考

  • bochs >= 2.7 1
  • qemu >= 6.2.0 2
  • gcc >= 11.2.0 3
  • gdb >= 12.1 4
  • nasm >= 2.15.05 5
  • binutils >= 2.38 6
  • vmware >= 16.1 7
  • vscode >= 1.74.3 8
  • ffmpeg >= 6.0 9
  • python >= 3.6 10
  • pyelftools >= 0.29 11

Star History

Star History Chart

参考

Footnotes

  1. https://bochs.sourceforge.io

  2. https://www.qemu.org/docs/master/

  3. https://gcc.gnu.org/

  4. https://www.sourceware.org/gdb/

  5. https://www.nasm.us/

  6. https://www.gnu.org/software/binutils/

  7. https://www.vmware.com/products/workstation-pro.html

  8. https://code.visualstudio.com/

  9. https://ffmpeg.org

  10. https://www.python.org/

  11. https://github.com/eliben/pyelftools