许久之前就有写一个tiny的操作系统的打算,但时间和精力关系,想法一直没有成为最终的代码。操作系统的构建本身是个系统工程,门槛较高,需要多方面的知识,往往几行代码背后是厚厚的几本书才能说清的。之前为了写操作系统也是四处搜集资料,看了许多书,没有啥经验,花费了许多时间,到头来也没什么成果。因此,开个帖子,一是记录自己写这个os的过程,分享下经验;另外,也是抱着边写边学的态度,想着通过动手实践来跨过这个门槛。
下面是自己整理的一些资料,后面可能会用到。本文用到编译平台是64位的linux,使用bochs来调试。编写操作系统过程中需要混合使用汇编和c语言,汇编语言使用的是AT&T语法,这也是gnu as所支持的。
【资料】
1,cmu的操作系统公开课程,里面有两个demo(jos,xv6),同时提供了关于x86架构、汇编语言等资料: https://pdos.csail.mit.edu/6.828/2017/ 2,gcc的官方手册: https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/3,gnu as的手册:https://sourceware.org/binutils/docs/as/4,gnu ld的手册,重点是链接脚本:https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html5,AT&T汇编:http://csiflabs.cs.ucdavis.edu/~ssdavis/50/att-syntax.htm6,ELF格式,这是linux系统中可执行文件所使用的格式,也是as,gcc,ld所支持的: http://www.cs.northwestern.edu/~pdinda/icsclass/doc/elf.pdf http://learn.tsinghua.edu.cn/kejian/data/77130/138627/html-chunk/ch18s05.html7,gnu make:https://www.gnu.org/software/make/manual/make.html http://mrbook.org/blog/tutorials/make/
8,参考书:《深入理解计算机系统》《程序员的自我修养》《LINUX内核完全剖析:基于0.12内核》《x86_x64体系探索及编程》《x86汇编语言 从实模式到保护模式》