Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

ghosind/HariboteOS

Open more actions menu

Repository files navigation

HariboteOS

《30天自制操作系统》(川合秀实 著)配套代码改编版。因为作者使用了其自己编写的一套非标准的工具,且无法在非Windows平台下运行,所以本项目在原代码的基础上使用NASM、GCC、Qemu等工具进行编译、运行。

本项目已完成第0~28天内容(除去第28天日文显示部分),项目主要实现已经完成。因为该书后两章内容更偏向于应用层面,所以便不在本项目中实现,有兴趣的朋友可以根据前面的基础上继续完成。

项目特色

  • 采用GCC、NASM作为工具链,可跨平台使用
  • 基于LinkerScript构建内核
  • 不依赖于作者自定义HRB文件格式,支持ELF文件格式
  • 支持部分C标准库函数的简单实现(libc文件)
  • 头文件拆分,结构更为清晰
  • 中文键盘支持

环境依赖

  • nasm
  • gcc
  • binutils
  • qemu-system-i386
  • mtools

可选依赖

  • gdb(调试使用)

Mac下安装

MacOS下默认Xcode Command Line Tools使用的gcc为clang的别名,在本项目实现中未对clang进行测试,可能会存在问题。

在Mac下推荐使用x86_64-elf-gcc工具链进行编译,可使用brew install x86_64-elf-gcc x86_64-elf-binutils x86_64-elf-gdb安装。

运行

进入对应的文件夹,使用下面的命令运行:

$ make qemu
# 若使用工具链包含前缀,如x86_64-elf-,可以使用GCCPREFIX
$ make qemu GCCPREFIX=x86_64-elf-

若要使用GDB进行调试,请设置DEBUG

$ make qemu DEBUG=1

最终目录结构

  • app:应用程序源码
  • include:系统内核头文件
  • kernel:系统内核代码
  • libc:简单的C标准库部分实现

C标准库实现

  • strcmp
  • strncmp

参考自xv6实现:

  • vsprintf
  • sprintf

来自《C程序设计语言》:

  • rand

项目进度

  • 第1天:Hello world
  • 第2天:汇编与Makefile
  • 第3天:进入32位模式
  • 第4天:画面显示
  • 第5天:GDT/IDT
  • 第6天:中断处理
  • 第7天:FIFO
  • 第8天:鼠标与32位模式
  • 第9天:内存管理
  • 第10天:窗口叠加
  • 第11天:窗口处理
  • 第12天:定时器1
  • 第13天:定时器2
  • 第14天:键盘输入
  • 第15天:多任务1
  • 第16天:多任务2
  • 第17天:命令行窗口
  • 第18天:命令行命令
  • 第19天:应用程序
  • 第20天:API
  • 第21天:保护操作系统
  • 第22天:C语言应用程序(修改为ELF格式)
  • 第23天:应用程序图形处理
  • 第24天:窗口操作
  • 第25天:更多窗口
  • 第26天:窗口操作提速
  • 第27天:LDT与库(未按书上处理)
  • 第28天:文件操作与文字显示(不包含日文显示部分)

本项目不继续添加第29天以及第30天的内容,有兴趣的朋友可继续阅读后续章节。

待解决问题

  • 定时器执行若使用io_sti而非io_stihlt时会卡死
  • 启动时偶尔黑屏,无法正常绘制界面
  • 多个命令行同时执行命令时会卡死
  • 第28天中__alloca无效,sosu2无法运行

博客文章

版权信息

项目中代码版权主要归原书作者所有,本人仅针对无法直接运行的部分对该代码作出部分修改。

About

《30天自制操作系统》NASM+GCC+QEMU实现

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.