鱼C论坛

 找回密码
 立即注册
查看: 1929|回复: 1

手把手教你用C++搭建操作系统

[复制链接]
发表于 2021-4-17 11:37:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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
现在您可以从第一个操作系统启动并享受乐趣:一个没有任何内容的简单内核。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-6 07:45:28 | 显示全部楼层
感谢分享,有没有更详细教程或书籍?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-23 10:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表