将内核项目从DJGPP移植到MinGW

Porting kernel project from DJGPP to MinGW

本文关键字:MinGW DJGPP 内核 项目      更新时间:2023-10-16

尝试用MinGW &NASM(原DJGPP &NASM)。我也试过Cygwin,结果完全相同:

  • 首先,将DJGPPbin替换为MinGWbintarget coff-go32 not found.
  • 交换目标到elf32-i386,并得到cannot perform PE operations on non PE output file 'build/kernel.elf'这是一个奇怪的错误,因为据我所知,我没有做任何'PE操作'。
  • 再次更改目标,为pe-i386,得到一个新的错误build/Common.o:Common.cc:(.text+0x2a): undefined reference to 'atexit'

似乎MinGW正在生成静态类的atexit调用。DJGPP没有。内核在关机期间进行自己的DTOR处理。我知道定义atexit将"解决"这个问题,但这在这一点上更像是一个hack,而不是一个长期的解决方案。我宁愿让MinGW编译现有的代码没有任何(或最小的)修改。

坦率地说,我对Windows构建环境不太熟悉,可以使用任何关于该做什么的提示。该项目(减去上面列出的更改)在DJGPP下可以很好地编译和启动。区别似乎是在DJGGP和MinGW处理编译时类声明的方式?

EDIT:最后分解并在Cygwin上构建了一个交叉编译器。

您需要构建一个独立的交叉编译器。这个问题在OSDev Wiki上被引用了很多次,以至于大多数人建议在编写内核之前先创建一个交叉编译器。

本文将逐步提供构建您自己的交叉编译器的参考。注意,在Windows中,您可能必须使用MingW或Cygwin

构建交叉编译器。