打造你的OS建议

这是来自bona fide的OS developer的教学资料Suggestions for Making Your OS,ㄚ琪最近就来翻译这些资料,等到想到自己的OS要有什么东西,再跳出来!

1. 使用linker指令码。

我在用我的核心有很多的麻烦直到我使用linker指令码,基本上,linker指令码可以保证你的核心可以在连结时有正确的顺序(text,data,bss),这里有一个核心在0xFF80000载入的linker指令码范例 (John Fine的 bootf2.zip bootsector也是这样做),注意这个linkere指令码是给LD用的:

kernel.lnk

OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
  .text  0xFF800000 : {
    *(.text)
  }
  .data  : {
    *(.data)
  }
  .bss  :
  {
    *(.bss)
  }
}

然后连结像这样:

ld -T kernel.lnk  kernel.o
注:这个linker是指GNU的ld

2. 在ASM里建构一个 “样板(boiler plate)”档案来执行核心.

我建议假如你的核心是用C写的,那你从ASM档来执行你的”kernel main”函式可以像这样(假设PMode):

kernel_asm.asm

[bits 32] ; hey, we're in PMode

[global start]
[extern _kernel_main] ; always add a "_" in front of a C function to call it

start:
  call _kernel_main
  jmp $ ; halt

kernel_c.c

kernel_main()
{
     k_init();
     k_sayhello();
     ...
};

那样就可以将两个档案一起连结。

3. 使用模拟器这样你就不必常常重新开机。

一次又一次地重开机是很慢的,会降低电脑的生命周期,而且电脑不会简单地告诉你你的程式码有什么问题会造成第三者的例外或是一般保护模式的错误或是其他的,像是Bochs的模拟器就可以解决这些问题。

4. 备份你的程式码。

备份你的程式码不论你做了一个很大的改变(或稍微大)的改变,这有多种用途,首先,假手你搞砸了很多事情的话,要’回复’你的原始码很容易,第二,你可以使用你的备份来证明你自己打造你的OS假如因为某些原因有某些人声称你偷了他们的程式码修改的时候,就可以派上用场,当然你也应该备份你的程式码在不同的电脑上或ZIP磁碟机或是CD里,当你的硬碟坏了时可以回复。

5.当碰到一个讨厌的错误感到挫折或是不知道什么东西时,寻求帮助。

这就是为什么OS开发论坛存在的原因,Mega-tokyo.com OS dev forum 是问OS开发的问题跟寻求帮助修正程式中错误的了不起的地方,你也可以email给我一个问题,虽然因为我每天要收很多的email以及我的行程很忙碌,我可能没办法尽快答覆,但要记住,没有问题是太笨的。

6. 专注在你的核心,而不是华丽的图形。

所以很多人想要有华丽的图形, 在你的核心成熟或是完成前先等等再来图形吧!为什么?因为图形程式设计(特别是SVGA)比撰写核心还要难上加难。

7. 了解你写的程式。

令人惊讶的是这个似乎很明显的见意并不是许多玩OS的人会去遵守的,你必须了解你写的程式码,不要借用你不懂的程式,假如你不了解程式做什么,你就会常常碰到讨厌的错误,而你却很难去修正它,假如你知道程式码如何运作,并且了解它,修正错误就会较容易。

8. 玩得开心。

就像任何种的程式设计那样,假如你喜欢你应该就是一个OS的开发者,就这么简单,不要希望有一天你可以赚钱而这样做,如果你不爱做,并乐在其中,更有可能没有,你最终将获得一个垃圾的作业系统…假如你没有先放弃的话,事实上,良好的OS开发者在那里爱OS开发,他们乐在其中,因为他们喜欢它。

Written by K.J. 2002. Updated 2002.11.20 and 2003.7.22 by K.J.

ㄚ琪2010/08/06翻译