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

Sign up
Appearance settings

fzOS/fzOS-kernel

Repository files navigation

fzOS-kernel

Kernel source code for fzOS.

fzOS内核源码,

这是一个充满了神奇实现的 AMD64/X86-64 内核

目前fzOS只支持也只打算支持UEFI启动

也不打算支持32位(毕竟谁2202年了谁还用32位)

External Libraries

LAI(https://github.com/managarm/lai/) for ACPI Parsing

Note for compiler 关于编译器版本可能对当前版本kernel导致的编译失败

Install/Compile Guidence 安装/编译说明

编译环境

  • 操作系统
    • 请使用 linux 作为编译环境 (其中 debian 和 arch linux 分别是我们的开发环境)
    • macOS下有许多奇怪的问题,反正我是没成功编译,而且结果需要是elf而不是mach-O
    • 没人用 windows, 所以就不讨论这个系统了
    • docker 使用 build 的 gcc11 会有一些奇怪的问题
  • 软件和编译器
    • 需要:GCC, build-essential, gnu-efi
    • GCC需要高于版本11, 目前开发使用的是 GCC-11.2.0
    • clang 由于asm语法上的问题,可能需要一些小小的改动
    • 内联 ASM 用的是 AT&T 语法
  • 编译
    • 在文件夹里 make 就行了
    • 结果是 build/kernel 这个可执行文件
  • 运行/测试
    • 去隔壁 fzBurg 找一下 efi 引导文件
    • 直接用vso文件,恢复一个虚拟机
    • 需要另一个linux虚拟机设置磁盘系统
    • 使用fhhfs-fuse设置磁盘状态(初始化)
    • 注意将banner_color文件dump到根目录
    • 然后启动虚拟机

命名规范

请尤其注意下列保留区段.jpg

  • 变量
    • 常规变量使用 小写下划线命名 ( 例如: bss_info )
    • 全局变量使用 g_小写下划线命名( 例如: g_gui_service_window_list )
  • 宏定义
    • 全大写下划线命名 ( 例如: GUI_DEFAULT_WINDOW_SIZE )
    • 下划线开头结尾的全大写( 例如: GUI_DEFAULT_WINDOW_SIZE )
  • 结构体
    • 驼峰命名 ( 例如: TestVariableType )
  • 函数
    • 小写下划线

开发路线

这块现在理清了

领袖说过:自己动手,丰衣足食。

burg引导器同步开发中

  • [x]Step1: 用图形模式实现一个字符显示输出;(helloworld)这个完成了,kernel log 支持字符串输出;
  • [x]Step2: 基本实现了U64的16进制和10进制输出;
  • [x]Step3: 实现CPU段表的设置, 接管内存分配;
  • [x]Step4: 实现基础的中断程序和TSS任务表设置;
  • [x]Step5: 实现基础的键盘驱动程序;
  • [x]Step6: 实现完整的ACPI支持,完成"高级电源管理";
  • [x]Step7: 实现文件系统;
  • [x]Step8: 实现设备树;
  • [x]Step9: 实现JVM的类加载器;
  • [x]Step10: 实现JVM的基础指令;
  • [ ]Step11: 实现JVM的堆机制;
  • [ ]Step12: 实现System类,与Kernel ABI交互;
  • [ ]Step13: 与JVM并行线,GUI开发
  • [x]Step14: 与JVM并行线,实现HDA声卡驱动;
  • [x]Step15: 实现WAV格式的音频播放;

File Structure

定义用的头文件

  • <types.h> 定义了基础整型单位;
  • <uefivars.h> 定义了与UEFI相关的代码需要包含的头文件;
  • <limit.h> 定义了当前系统的一些限制;

common

cpuid.c;

  • 实现cpu信息的获取;

file.c;

  • 基本文件结构体的实现;

halt.c;

  • 基本CPU状态管理(停机+死机);

io.c;

  • I/O操作的简单包装;

kstring.c;

  • 简单的内存/字符串操作;

linkedlist.c;

  • 数据结构(链表)的实现:双向链表;

popcount.c;

  • 实现POPCNT指令;

power_control.c;

  • 高级电源管理(关机/重启)的实现;

printk.c;

  • 实现变量的10进制和16进制显示;

queue.c;

  • 实现队列数据结构;

registers.c;

  • msr寄存器的操作;

semaphore.c & spinlock.c;

  • 两种进程同步的结构体(信号量/自旋锁);

drivers

devicetree.c;

  • 设备树的结构;

graphics.c;

  • 初始化屏幕;
  • 实现清屏;
  • 刷写像素;
  • 计算字符相对位置;
  • 屏幕内容整体上移;

fbcon.c;

  • 实现ASCII字符输出;
  • 实现换行和满屏后向上刷新;

gpt.c;

  • GUID分区图的识别;

keyboard.c;

  • 基础键盘的处理;

pci_bus.c;

  • PCI总线驱动;

rtc.c;

  • 实时时钟驱动;

sata_ahci.c;

  • AHCI模式的Serial ATA设备驱动;

filesystem

filesystem.c

  • 通用文件系统操作;

fhhfs.c

  • fhhfs文件系统驱动;

interrupt

interrupt.c;

  • 异常以及irq的声明;

irq.c;

  • 外部中断芯片的初始化;

memory

gdt.c;

  • 设置cpu段表;

memory.c;

  • 内存的分配与回收;

memorysetup.c;

  • 内存空闲空间的接管;

About

Kernel source code for fzOS.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

Languages

AltStyle によって変換されたページ (->オリジナル) /