[学习笔记]在windows下编译内核[大杂烩]

来源:互联网 发布:成本核算软件 编辑:程序博客网 时间:2024/05/01 23:06

最近在做系统引导和实模式-保护模式切换.模仿早期linux的方法,把32位二进制镜像加载到物理地址0x00000000处,覆盖实模式下用的IVT.


通常,像这种工作,需要一个虚拟机,比如Virtual PC或者Bochs来调试.
而编译呢,GCC,也是个好东东.~ 在windows下,可以使用MinGW GCC或者是cygwin.
笔者使用的是MinGW-GCC

由于之前真的没有使用过GCC的那些东东,除了写过一次HelloWorld..(汗..),用的是标准C,也没用到内嵌汇编,
所以比较难办,没有太多的时间和心情去熟悉AT&T的语法.
不知道为什么,MinGW-GCC生成的目标代码里,总是会生成__main,和__alloca这两个外部符号,虽然可以在汇编里写两个空函数让他链接,但是感觉很不爽...而且,如果使用GCC编译C文件的话,万一C里面需要内嵌汇编的话,还是很不爽...
也没有用过NASM,所以...只能用MASM来汇编了.
平时最熟悉的就是MASM和VC,还有Borland C++和TASM了.所以决定使用这些个东东来编译.再加上功能强大的链接工具LD,和MAKE,以及OBJCOPY等等,凑成了一锅大杂烩...

在经过了一天的试验之后,终于成功..工具如下:
16位C编译-链接器:Borland C
16位汇编器:TASM
32位C编译器:VC8的CL.EXE ( VS2005的编译器)
32位汇编:MASM8 (VS2005的汇编工具)
32链接工具:GCC-LD
其他工具:OBJCOPY (BinUtils) ,MAKE
EXE2BIN(system32下)
(16位工具主要用于生成分区引导程序和在DOS下写引导的工具,以及一个LOADER文件)

最后终于成功的切换至保护模式,进入C的main函数.
这里只是做简单的实模式保护模式切换实验,而如果真的用这些工具来编译自己写的内核的话,相信也是可行的......