# myos **Repository Path**: drson/myos ## Basic Information - **Project Name**: myos - **Description**: This is my OS,it is also yours! - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-08-08 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 项目介绍: 本OS暂时基于U盘作为存储介质,运行在x86平台 参考安德鲁·斯图尔特·塔能鲍姆写的Minix3以及林纳斯·本纳第克特·托瓦兹写的Linux, 所以该OS应该在宏内核和微内核之间权衡优缺点,进行取舍。 由于Linux的广泛应用,本OS将会向着兼容Linux驱动的方向编写(没必要一切从头开始), 顶层应用框架将会是css+html+javascript,当然这并不会类似于google的Chrome+Linux, 或者类似Mozilla的Boot to Gecko(firefox+Linux)。 本OS的架构应该or可能是这样: +-------------------------------------+-------- | css + html + javascript | | 应用框架层 +-------------------------------------+ | | server | |--用户模式 服务管理层 +-------------------------------------+ | | drive | | 设备驱动层 +-------------------------------------+-------- | kernel |----------内核模式 系统内核层 +-------------------------------------+ | Hardware | 硬件层 +-------------------------------------+ 详细请看 https://gitee.com/drson/myos/wikis/ 1.内存布局: | GDT/IDT | 存放全局描述符表和中断描述表 0x00100000+-----------------+ | reserve | 为BIOS保留 0x00080000+-----------------+ | bootloader | 内核启动加载器 0x00008200+-----------------+ | boot param | 内核启动参数 0x00008000+-----------------+ | | 0x00007e00+-----------------+ | bootsector | 512启动扇区/U盘分区表 0x00007c00+-----------------+ | stack/other | 0x7c00向下为启动时期的栈区/0x600开始放置内存地址结构描述符表 0x00000600+-----------------+ | reserve | 为BIOS保留 0x00000000+-----------------+ 2.内核启动参数:(基址=0x8000) 偏移量 | 大小(字节) | 描述 ------------------------------------------------ 0x0000 | 1 | 每像素的位数 0x0001 | 2 | x轴像素点数 0x0003 | 2 | y轴像素点数 0x0005 | 4 | 显示内存地址 0x0009 | 24 | 临时GDT 0x0021 | 2 | 内存地址结构描述符条目 0x0023 | 4 | 地址描述符表的长度 0x0027 | 1 | int13扩展版本 0x0028 | 66 | 硬盘参数表 3.文件结构 /-- |--------主文件夹-------- |--boot |--------内核引导文件夹--- |--bootsector.s |引导扇区,用于从ext4文件系统加载内核启动加载器 |--bootloader.s |启动加载器汇编部分代码,为内核启动准备环境,加载内核到内存 |--bootmain.c |启动加载器C语言部分代码 |--bl_print.c |精简修改版的snprintf,用于启动时期在屏幕打印信息 |--pr_boot_info.c |定义了一些打印启动信息的函数 |--bl_func16.s |bootloader.s调用的16位汇编函数 |--bl_func32.s |bootmain.c调用的32位汇编函数 |--bl_init_palette.c |用于初始化VGA调色板 |--colorTable.s |定义来138种web标准色 |--bl_init_main.h |用于bootmain.c的头文件 |--font.h |字符编码头文件 |--bootsector.ld |链接脚本,用于链接bootsector.s的代码 |--bootloader.ld |链接脚本,用于链接bootloader.s的代码 |--Makefile |工程文件 |--README.txt |说明文件,即本文件 4.视频相关 * .设置画面模式为320x200x8位彩色VGA * VBEMODE: * 0x100 : 640 x 400 x 8bit * 0x101 : 640 x 480 x 8bit * 0x103 : 800 x 600 x 8bit * 0x105 : 1024 x 768 x 8bit * 0x107 : 1280 x 1024 x 8bit 5.在U盘(标称16G)中的位置(LBA) +-----------------+ 0 | bootsector.bin| +-----------------+ 1~? | bootloader.bin| +-----------------+ 2048~? | kernel/os | +-----------------+ ?~? | user files | +-----------------+ 6.开发编译环境 操作系统:ubuntu 18.04.1 LTS 代码编辑器:Atom 1.26.0 编译工具: 1.GNU Binutils for Ubuntu GNU as (GNU Binutils for Ubuntu) 2.30 GNU ld (GNU Binutils for Ubuntu) 2.30 2.gcc gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3) 3.make GNU Make 4.1 调试仿真工具: Bochs x86 Emulator 2.6.9