|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
手把手教你用C++搭建操作系统 : C: c$ K9 f; B: m& J' g# Q8 s0 \
3 Y% x b' t* J一、如何为开发操作系统做准备?( c. n7 B( c1 U
* e- |. `( ?' f" s5 a* f首先,必须了解所有编程语言,例如指针,函数(针对C++);其次,必须对汇编语言有所了解。
) A6 B) ?& R& L0 ~2 s
+ o( ~4 x, C' x/ M4 v$ V# y二、开发操作系统需要什么工具?
) H' c/ n3 Y# n( o& X4 J+ U1 e5 q2 C0 @( {8 M
1. 汇编器:' j. ` W6 c C) M R, d$ N! U
& l) v1 \8 R7 |6 m$ @7 `
汇编器获取汇编代码,并为您提供低级输出,例如包含CPU寄存器上的控件的对象。本文要使用的汇编程序是nasm(netwide汇编程序),可以从http://nasm.us下载。
0 y* Z/ L! [- n$ D; L( A% R4 I. b8 ~' [# ~( l% \, v
2.交叉编译器:
# g A$ C B4 _1 P6 H2 [- c/ U! J _5 C2 C# Z. O0 {" q) F
为了开发操作系统,必须具有交叉编译器,因为您必须针对其可执行格式来编译内核。在这里用gcc(gnu编译器集合),您可以从http://gcc.gnu.org/下载。; Q3 Q) B6 Y2 x" h; V3 N( ?3 `3 `
4 c5 H( f: _9 @4 S5 F6 H0 A3.链接器:1 l4 Y6 m9 s! W$ ]$ U" A" @
" [- I, B% G9 Q" {, T
链接器获取您的对象并将其链接到getter,在这里用gnu binutils,可以从http://gnu.org/software/binutils下载
# L N) ]9 @! e* t, `: f6 U0 O, ^& L" z. `) c
4.虚拟机:
! a4 U+ M5 f) b. P- l" R+ o# Q& q# C1 _/ x% F- \8 v
为了测试操作系统,必须有一个vm(虚拟机),但这不是必需的,在这里使用virtualbox,可以从http://virtualbox.org/下载。
9 S3 k1 V6 w7 N1 ]
2 U, C5 H4 {' I! |1 M- O) S三、 开始之前的注意事项
9 `3 y, q- y7 O2 m" D4 g5 M
& x1 ]! H1 r8 d& E& v; |% E1.在开发操作系统时,不能使用<iostream>,<fstream>,<memory>,<cstdio>,<cstdlib>,<windows.h>,<unistd.h>和所有平台API's,必须自己创建所有这些东西。+ c/ t2 {' H9 r5 ^( g8 d9 e! d
6 Z* B( J$ G& L0 F+ N4 Y( _- D @1 T7 v0 s2.必须非常非常小心5 P" c; z; e9 e* M4 S
9 p# ^2 J, f! O( ^, n在开发时,您可以掌控一切,因此,您可以销毁一个或一些或所有硬件。在这种情况下,我建议使用虚拟机来测试您的操作系统,而不是多次重新启动。
: \ t `, S. m; J+ P1 D- W8 q1 L$ k/ t2 w S% X D( Z
四、 引导程序
* z* o/ y/ V! u( | b1 m5 A$ a/ {& K) e" R+ R3 L
引导加载程序是一堆用汇编语言编写的代码,必须为512个byets(1个扇区),它加载您的操作系统的内核。我们跳过本节,使用grub作为bootloader,您可以从http://gnu.org/software/grub下载grub源代码。或者实际上,您也许想要编译软盘:在Google中搜索将对您有所帮助。
- \; r. i, a* l: [- M$ v0 R" l& Q3 {, R& l' c$ i
五、 一个简单的内核" ^1 H f S; y- D
, ?; s$ C2 s$ W8 b5 o! g我们要开发一个操作系统,因此,我们必须自己创建功能。. p9 u1 n0 G9 x
: h) ^' U1 H4 s. g首先,我们创建一个包含以下内容的文件boot.asm:$ w) {+ F3 j C, {& l: I& R5 G7 ]
, A4 i% x5 t: o6 t) }% N
代码链接:
* D* O7 w( O: zcpp.sh/6zu
$ }) w$ a: {5 v! h( ^2 Fcpp.sh/9uw
E3 k+ R# _3 R" t* X
L2 v: Z$ N! l2 q六、 链接描述文件
0 } C1 Y; \5 G9 l/ O7 g3 R' ?+ H1 ~( `7 h0 r8 T$ k
创建具有以下内容的文件:linker.ld% a7 k0 A. E1 Z4 D7 U4 E
6 I0 O& ~ R% W4 [% `
$ P# S* R, ]: u. P% x5 ^# Z
七、 如何编译4 v T5 n' W* j/ E( z$ l
/ ]- H' K" @3 H转到shell(在Windows上需要cygwin),输入以下命令:
I7 l/ V; U6 e1 I& {0 v, X, K" [( v1 M# @7 y$ D; H4 c$ O
恭喜!
/ O+ Z5 g) @, Y2 W) q9 e; I
, ^1 a L( T# H5 n. _4 c! {! o您的第一个操作系统已成功编译!" |3 ~ h( k3 t4 I* E* t
! N8 i/ m4 G) m5 X5 A. R( L% ]现在您可以使用grub-mkrescue创建图像:
& S1 X: n+ A0 Y
3 @6 }. h% b# V7 H! g4 e/ D. }创建目录:iso
p7 S% J6 @2 t
$ s7 f; G3 h+ y$ h9 y在该目录中,创建另一个目录:boot,然后在引导目录中,创建目录:grub,然后在grub目录中创建文件:grub.cfg,其中包含以下内容(不要在新行中添加大括号):
& g5 Z8 r7 ?, w1 k& R6 ?: r! S/ a# Q; r% L7 V: E/ @. z8 v: c @4 X- r& X
然后将您的内核(kern)复制到iso / boot目录并再次运行您的shell:
- \ n% i2 q& a. a$ o1 u3 ]# P2 w" ]( r3 z) v* u% l/ f
切换到内核的主目录并输入:
) z" P. ]4 ]+ |& N/ `3 {$ [, I' q& O1 C
现在您可以从第一个操作系统启动并享受乐趣:一个没有任何内容的简单内核。 |
|