# wit_os **Repository Path**: wit_yuan/wit_os ## Basic Information - **Project Name**: wit_os - **Description**: 首先支持x86平台,以后会支持arm平台. - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-08-30 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wit_os说明 ----------------------------------------------- 简单的基于intel硬件的操作系统编写: 注意使用的环境是wsl(ubuntu)+win10(bochs). ## 1 环境搭建 ### 1.1 编写系统前的资料获取 **1.先找到关于intel的相关资料** a.intel官方文档:https://software.intel.com/en-us/articles/intel-sdm **2.调试工具** a.pc模拟器bochs:http://bochs.sourceforge.net/ 或者qemu或者vmware. b.pc编译器nasm:https://www.nasm.us/ c.dd工具:https://aeroquartet.com/movierepair/dd%20for%20windows.en.html **3.获取分支代码的步骤** ``` $ git clone xx.git $ git log $ git branch -a $ git checkout x (-b创建一个新的分支并且进入这个分支) $ git branch --set-upstream-to=origin/x $ git pull ``` ### 1.2 工具使用方法 **1.bochs** a.配置文件 找到安装目录中的文件:bochsrc-sample.txt,以它为模板,进行修改,可以重命名为bochsrc.bxrc。如果不知道怎么修改,可以参考docs\user\bochsrc.html文档。 设置参数: ``` boot: floppy floppya: 1_44="myos.img", status=inserted #ata0-master: type=disk, mode=flat, path="30M.sample" ``` b.制作软盘映像 主要使用的工具是bochs中的bximage.exe. c.bochsdbg.exe调试工具 **2.nasm** 编译程序:`nasm.exe -fbin 1.asm -o 1.bin` **3.dd** 将bin文件写入软盘:`dd if=1.bin of=myos.img bs=512 count=2880` **4.虚拟机打开软盘映像** 虚拟机中添加软盘,虚拟机即可自动加载软盘数据。 **5.xdbg32** 这个工具主要是使用ultraedit时候弹出需要注册码,使用这个工具可以进行破解。方法为:"文件"--->“附加”--->找到ultraedit的进程--->选择符号--->有"protectionplusdll.dll"找到IsActiveSoftwareKey,然后把调用的函数直接替换成ret即可。 ## 2 启动步骤详解 a.系统开机,处于实模式,实模式中cpu的寻址范围只有1MB空间,也就是0x00000~0xfffff。cpu根据用户指定的硬件设备(软盘、硬盘、光驱)选择启动。 b.如果选择的是软盘启动,则会读取设备的第一个扇区(512个字节),如果该扇区的最后两个字节是0x55和0xaa,表明该设备可以用于启动。如果不用启动,则选择另外一个硬件设备启动。 c.上面说的寻址空间是1MB大小,系统启动之后,开始的地址是0xffff0(CS:IP=0xf000:0xfff0),那么还有16个字节可用。另外,这一段空间也是BIOS的映射区。 **注意:网络上有一些地方说的CS:IP=0xffff:0x0000,尽管从结果上看是正确的,但是在bochs上测试出这种说法还是不正确的。** d.上面的步骤完成之后,根据bochs显示结果来看,程序会跳到0xfe05b0(CS:IP=0xf000:0xe05b)处,之后会执行一系列的操作(都是bochs自动处理),这里面会包含检测内存,显卡,外设,建立中断向量表等等。如下所示即是中断向量表的分布: | 内存位置 | 备注 | | :---: | :---: | | 0x0~0x3ff | 中断向量表 | | 0x400~0x4ff | bios数据区 | | 0x500 ~0x7bff | 自由内存区 | | 0x7c00 ~0x7dff | 引导程序加载区 | | 0x7e00~0x9ffff| 自由内存区 | | 0xa0000~0xbffff | 显示内存区 | | 0xc0000~0xfffff| 中断处理程序 | e. 之后,会读取启动盘0盘1扇区的内容,然后检查该扇区(512字节)的最后两个字节是否为0x55和0xaa,如果不是,则bochs会kill simulator,如果是,则在bochs上显示booting from floppy. 关于这点可以从bochs上的控制台上看到打印`int 0x19`了解到。 ## 3 运行 在windows 10中使用wsl,安装ubuntu系统,可以编译自己写的操作系统; wsl下: ``` $ git clone xxxx(仓库).git $ cd src $ make hd ``` 在win10下进入sc目录: ``` $ bochsdbg -f .\bochsrc.bxrc ``` 在进入的调试界面中,输入`break 0x7c00`,然后`c`,`c`运行即可. ## 4 参考资料 不管怎么说,"Linux内核完全剖析-基于0.12内核.pdf"应该是最经典,最值得看的书了,其他的为了扩展思路是可以 看的. I.Linux内核完全剖析-基于0.12内核 II.linux内核源码情景分析 III.Linux内核设计与实现 IV.一个64位操作系统的设计与实现 V.操作系统真象还原 VI.30天自制操作系统