|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
手把手教你用C++搭建操作系统 . {3 [0 Q' a# }5 W3 y
* g, Y$ z, J U一、如何为开发操作系统做准备?
+ ?- I" G. W- N# w9 d
+ R# i. l6 x* g; {+ s6 j; D首先,必须了解所有编程语言,例如指针,函数(针对C++);其次,必须对汇编语言有所了解。( i7 r) w7 y! ?! F0 v
9 b7 g' }2 h" v& Y8 {; a& g二、开发操作系统需要什么工具?2 L6 q: I. p. S1 h( j& D! ~
5 I9 T7 p1 I% U$ F% J
1. 汇编器:+ v/ i- `. U& O" ?9 B. P+ c
! P# c& U/ @! k
汇编器获取汇编代码,并为您提供低级输出,例如包含CPU寄存器上的控件的对象。本文要使用的汇编程序是nasm(netwide汇编程序),可以从http://nasm.us下载。
" M3 r& ?5 W4 d8 q S+ W) M9 u; b& ]- u- f
2.交叉编译器:6 J$ F6 l1 E7 D# q9 k) D
/ [' o) L. j" R' w. y为了开发操作系统,必须具有交叉编译器,因为您必须针对其可执行格式来编译内核。在这里用gcc(gnu编译器集合),您可以从http://gcc.gnu.org/下载。
) v' p2 Y% U$ P& R6 v7 f" r% |. S8 L
- P' t/ `0 [ t6 `5 n3.链接器:
) x! y5 l! f7 ~( F" n2 r* S+ k& S/ C: B6 `7 t2 |
链接器获取您的对象并将其链接到getter,在这里用gnu binutils,可以从http://gnu.org/software/binutils下载
. f% R- F& w( @
0 n# X8 L# ?/ n* B9 k, |$ T& M: n4.虚拟机:1 p. B6 V. _& P, y4 z! M _& f
, T/ r9 @9 b. N; g# u为了测试操作系统,必须有一个vm(虚拟机),但这不是必需的,在这里使用virtualbox,可以从http://virtualbox.org/下载。
: B" V6 S( R; k0 ?
& ?/ R: U7 X; O: }9 `三、 开始之前的注意事项
9 q6 a0 O' w, o: L1 r$ }1 n$ u1 {3 L$ N
1.在开发操作系统时,不能使用<iostream>,<fstream>,<memory>,<cstdio>,<cstdlib>,<windows.h>,<unistd.h>和所有平台API's,必须自己创建所有这些东西。
* N3 Q! E2 w/ D; ~, Y5 H
" h# ?7 c5 q7 K5 ?3 C) q2 ^4 E2.必须非常非常小心
* k4 N6 G3 U% m' Z
' v7 r' Y5 i" _7 @8 i( u在开发时,您可以掌控一切,因此,您可以销毁一个或一些或所有硬件。在这种情况下,我建议使用虚拟机来测试您的操作系统,而不是多次重新启动。
L( @; {. g+ u- m- y5 `. b
$ _$ |1 i& d; ~' u4 w四、 引导程序
8 F4 B0 ?& Y6 S0 i6 a8 q5 g# d. _; @% d2 D
引导加载程序是一堆用汇编语言编写的代码,必须为512个byets(1个扇区),它加载您的操作系统的内核。我们跳过本节,使用grub作为bootloader,您可以从http://gnu.org/software/grub下载grub源代码。或者实际上,您也许想要编译软盘:在Google中搜索将对您有所帮助。
" \6 M6 O3 } T6 {- s s) D9 j7 M+ P9 W% Z& ~
五、 一个简单的内核
+ ?3 o/ @& w; }# e9 P/ H2 _% L3 M9 |# x4 n$ N9 a5 Y4 r( n
我们要开发一个操作系统,因此,我们必须自己创建功能。
9 B4 h$ ~/ T- M9 Y9 }" \$ o6 P8 ]$ t
首先,我们创建一个包含以下内容的文件boot.asm:
3 M- S) e9 A. z( _# ]3 T4 X5 J4 b$ _
代码链接:
, R+ V9 {0 |7 R0 Zcpp.sh/6zu
' L$ i/ b& h' lcpp.sh/9uw
J& _0 G$ f7 B. M8 x% X" d- k. t$ k) N
六、 链接描述文件
: i0 e: n J" Y% Y* s3 E- q2 g3 N% z: f/ ?8 P, M4 z! x- X
创建具有以下内容的文件:linker.ld/ Q) k6 Y/ i! `" [: }9 ~* B
% {; D4 u1 v9 e: g/ W, e
' B9 o e1 e+ `. E% J七、 如何编译
* v+ S4 o8 R; O3 @& d0 m. |
; [; x$ p# @5 O$ q转到shell(在Windows上需要cygwin),输入以下命令:
) V# ^( i7 g4 g% \. K2 Z' |. M2 \( Y H! W; `8 w
恭喜!
0 k: W6 J' v4 a' D: S6 K5 [2 `" N! m
您的第一个操作系统已成功编译!5 U/ Q& v: V, [! o: P
# Y7 s; ~, V3 y& K- Q, A! G
现在您可以使用grub-mkrescue创建图像:9 Z5 T* D9 N* e
! ?8 ^2 L2 h3 ~: p创建目录:iso
- v" T0 O2 y9 d; [2 W; B C
/ O! P& i2 R! k- m. [在该目录中,创建另一个目录:boot,然后在引导目录中,创建目录:grub,然后在grub目录中创建文件:grub.cfg,其中包含以下内容(不要在新行中添加大括号):
& n0 a1 F! {- u; J0 t/ m) w8 }* V1 E$ X8 t1 U4 G1 b) B. I; _" O
然后将您的内核(kern)复制到iso / boot目录并再次运行您的shell:# Y U: n( r2 I
0 V* d- h8 n5 b" W8 T' P
切换到内核的主目录并输入:9 v4 H$ T2 C6 ?% w) p. y, S
; H0 Z( l$ I0 p R% ?现在您可以从第一个操作系统启动并享受乐趣:一个没有任何内容的简单内核。 |
|