自制操作系统(一)

自制操作系统

我想做一个操作系统(为了好玩??)。当我对同学提出这一计划时,他觉得是异想天开。于是我们打赌,我要在2年内写出一个这样的操作系统。在这里插入图片描述
看到没,2020.5.28-2022.5.28是我们打赌的时间
嘿嘿,有了《30天自制操作系统》这种"神书",我还怕什么?
书里有现成的代码,但是抄了就不是自己的系统了。
你看看TianrunOSTianrunOS

TianrunOS是国产第一款免费独立内核操作系统,世界第五款独核系统.核心由一名高中生独立开发,独立内核,超小体积,极速运行,超强功能,软件完全正版免费.

(什么鬼啊)
(我才不想做成这样)

废话少说,下面要步入正题:
写操作系统,肯定要用C和汇编,于是我决定使用NASM(原书中用的是nask,可是nask不主流,没有nasm强大)
编译器是个很头疼的问题,我想用Mingw,结果编译以后再链接就成了这个鬼东西
不给力的mingw
什么东西??“This program cannot be run in dos mode”,这些完全不是我想要的东西,mingw怎么自己加了这么多乱七八糟的玩意??

不出所料,运行就发生了错误,真是让人头疼
运行发生错误
但是用原书中的编译器编译相同的代码,却可以正常运行。
开工5天了,我还在为编译器发愁
我又不想用《30天自制操作系统》里面的编译器,因为书里的编译器是nask汇编,而且c编译器主函数还要写成HariMain,我又不是要做Haribote系统,我才不想那样呢。再说了我想用更加大众化的编译器。

我觉得Mingw自己加的那些东西应该就是类似于文件头之类的东西,所以我只需要想办法把链接以后的文件中含有我编译出的程序的那一部分截出来就行了。翻了一下博客,有一段可能验证了我的猜想:

十分感谢ivan240十年前的博客!

博文链接:GCC的连接脚本学习笔记
查了一下objcopy,似乎objcopy -O binary xxx xxx.bin 就可以把可执行段复制出来?
试了一下,似乎可以把可执行段复制出来,但是跟原书中的编译器编译出来的bootpack存在令人疑惑的差异
差异
肯定还是编译器的问题,我又看了这个网站Gcc Cross-Compiler
今天(2020.7.31)又试了一下,发现程序好像卡在某个地方了,C语言写的部分实际上并没有被运行。然而代码看了n遍也没有看个究竟出来。没办法,又安了带调试功能的Bochs,这下不用看编译器和虚拟机的脸色了。

思来想去,应该是链接器的问题,我也不想费那个脑子了,直接把书中的链接器搬来用,终于成功了。
白屏
条纹图案
虽然只是一个显示的测试,但是这次的成功也是有里程碑意义的。

折腾了老半天都是在为了编译,所以Makefile是肯定要贴出来的

TOOLPATH   = tools
OUTPATH    = out
IPLPATH    = IPL
KERNELPATH = kernel


MAKE     = $(TOOLPATH)/make.exe -r
NASK     = $(TOOLPATH)/nask.exe
GAS2NASK = $(TOOLPATH)/gas2nask.exe -a
OBJ2BIM  = $(TOOLPATH)/obj2bim.exe
BIM2HRB  = $(TOOLPATH)/bim2hrb.exe
RULEFILE = $(TOOLPATH)/haribote.rul
EDIMG    = $(TOOLPATH)/edimg.exe
IMGTOL   = $(TOOLPATH)/imgtol.com

default :
	make.exe img


$(OUTPATH)/ipl.bin : $(IPLPATH)/ipl.asm   Makefile
	$(TOOLPATH)/nasm.exe -o $(OUTPATH)/ipl.bin $(IPLPATH)/IPL.asm

$(OUTPATH)/asmhead.bin: $(KERNELPATH)/asmhead.asm   Makefile
	$(TOOLPATH)/nasm -f bin $(KERNELPATH)/asmhead.asm -o $(OUTPATH)/asmhead.bin
	

	

$(OUTPATH)/nasmfunc.obj:   $(KERNELPATH)/nasmfunc.asm   Makefile
		$(TOOLPATH)/nasm -f win32 -o $(OUTPATH)/nasmfunc.obj $(KERNELPATH)/nasmfunc.asm

$(OUTPATH)/bootpack.obj:  $(KERNELPATH)/bootpack.c   Makefile
		gcc -c -o $(OUTPATH)/bootpack.obj $(KERNELPATH)/bootpack.c
		
$(OUTPATH)/bootpack.hrb:  $(OUTPATH)/bootpack.bim   Makefile
		$(BIM2HRB) $(OUTPATH)/bootpack.bim $(OUTPATH)/bootpack.hrb 0

$(OUTPATH)/bootpack.bim : $(OUTPATH)/bootpack.obj $(OUTPATH)/nasmfunc.obj   Makefile
	$(TOOLPATH)/obj2bim.exe @$(RULEFILE) out:$(OUTPATH)/bootpack.bim stack:3136k map:$(OUTPATH)/bootpack.map \
		 $(OUTPATH)/bootpack.obj $(OUTPATH)/nasmfunc.obj
# 3MB+64KB=3136KB



$(OUTPATH)/kernel.bin: $(OUTPATH)/asmhead.bin $(OUTPATH)/bootpack.hrb   Makefile
	copy /B $(OUTPATH)\asmhead.bin+$(OUTPATH)\bootpack.hrb $(OUTPATH)\kernel.bin

COS.img : $(OUTPATH)/ipl.bin $(OUTPATH)/kernel.bin   Makefile
	$(TOOLPATH)/editimg $(OUTPATH)/ipl.bin $(OUTPATH)/kernel.bin 0x4200 COS.img


img :
	make.exe -r COS.img


clean :
	-del $(OUTPATH)/ipl.bin
	-del $(OUTPATH)/asmhead.bin
	-del $(OUTPATH)/bootpack.bin
	-del $(OUTPATH)/nasmfunc.obj
	-del $(OUTPATH)/bootpack.obj
	-del $(OUTPATH)/bootpack
	-del $(OUTPATH)/bootpack.bin
	-del $(OUTPATH)/kernel.bin



2020.10.1
今天终于把键盘中断做好了
键盘中断
(很长时间没更新了,别问我为什么,去问我的老师为什么布置那么多作业😂)

(持续更新中…)

  • 15
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值