鱼C论坛

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

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

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

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

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

x
手把手教你用C++搭建操作系统
9 ^2 d: I8 a, k7 m/ x
/ ?/ }4 Q4 T% z0 m
一、如何为开发操作系统做准备?
& q/ v% B$ N! o6 H5 B) A# u: h7 [  v& f' ~% j1 g
首先,必须了解所有编程语言,例如指针,函数(针对C++);其次,必须对汇编语言有所了解。9 s7 N/ C. U8 D+ M/ |* O9 G
: S+ F0 l) w/ \" L1 k4 C5 p
二、开发操作系统需要什么工具?# z/ f, S; H7 N+ l

3 R7 ]3 r. f4 y* W1. 汇编器:
# B7 s/ O3 n$ {
3 @, w7 T  \" C( d汇编器获取汇编代码,并为您提供低级输出,例如包含CPU寄存器上的控件的对象。本文要使用的汇编程序是nasm(netwide汇编程序),可以从http://nasm.us下载。: }6 e) Z# Y7 {0 i

" m+ t0 _. K9 i4 _9 K. \; O, Y3 V2.交叉编译器:
9 Z0 l, f0 }! Z  C" F2 r% Z* \1 A' E1 _- u& z2 @
为了开发操作系统,必须具有交叉编译器,因为您必须针对其可执行格式来编译内核。在这里用gcc(gnu编译器集合),您可以从http://gcc.gnu.org/下载。( t9 i3 t8 f8 E- s

$ W- Y# j  T7 A- G3 K3 A) [0 C3.链接器:
1 V0 c8 p! {5 U4 X  o' t" O1 T4 Q$ F! }3 m8 t
链接器获取您的对象并将其链接到getter,在这里用gnu binutils,可以从http://gnu.org/software/binutils下载
8 w" f5 c( c+ Z7 Q% G0 @, @: I/ A
4.虚拟机:
3 z, x2 t( {% q" D" F" N- D% }) G4 c7 x  v3 E2 |+ s& u9 `
为了测试操作系统,必须有一个vm(虚拟机),但这不是必需的,在这里使用virtualbox,可以从http://virtualbox.org/下载。  @! Z3 A# Q7 y/ F8 J  }

+ N8 H! o' |; k! J8 x0 P三、 开始之前的注意事项! ^8 E! [  b# T, Q5 p9 Q
3 w# y; f# }( J3 r* A- u/ I
1.在开发操作系统时,不能使用<iostream>,<fstream>,<memory>,<cstdio>,<cstdlib>,<windows.h>,<unistd.h>和所有平台API's,必须自己创建所有这些东西。
8 s. J, i+ U: s9 {, k, P% X. Q* O; P4 B5 s* v. @
2.必须非常非常小心
1 E8 f: o( u. y
, t0 P6 w# E' L/ |" _在开发时,您可以掌控一切,因此,您可以销毁一个或一些或所有硬件。在这种情况下,我建议使用虚拟机来测试您的操作系统,而不是多次重新启动。
' h7 `* {5 d2 M! t& c! q
" N& n" c) B6 r( R2 ^. |! }四、 引导程序& R. `, n0 M+ F+ E# c! X

! x" ^+ ^  ~0 I: N# @4 O引导加载程序是一堆用汇编语言编写的代码,必须为512个byets(1个扇区),它加载您的操作系统的内核。我们跳过本节,使用grub作为bootloader,您可以从http://gnu.org/software/grub下载grub源代码。或者实际上,您也许想要编译软盘:在Google中搜索将对您有所帮助。3 e7 V  T/ |8 x! J8 \

0 B( N9 C% N& \0 g6 }五、 一个简单的内核
0 A5 |' ^6 g" ~% [- |* |2 e' ~
0 s5 z  \( i/ ^+ O; N我们要开发一个操作系统,因此,我们必须自己创建功能。
3 {/ }1 x# A7 X; k6 P1 k+ X% w* S. E4 J! a
首先,我们创建一个包含以下内容的文件boot.asm:
4 E6 w* _4 W' L, U/ N9 H. ?  A% `- K- }
代码链接:. I7 w2 M+ i  U- `
cpp.sh/6zu
- P+ F% d3 F* M( W: ^4 ~cpp.sh/9uw7 p2 A: ^2 L! x

: p* X9 x) Z+ f六、 链接描述文件9 [) N, C3 v0 d9 S- q" q3 H

) W. n+ ~, g3 G. q创建具有以下内容的文件:linker.ld' T! y: P" v- D/ Z

% W5 P* q/ ~5 @7 ^' n: v" {! z) T4 l5 y0 C1 p
七、 如何编译
/ E; q  u7 j& c9 o/ o: O9 q; _: [/ K, O* _2 w# v
转到shell(在Windows上需要cygwin),输入以下命令:; f8 y" z: W, U( N
* p3 X: k7 J7 |1 r4 b8 `& D5 \
恭喜!
) f2 S" {+ l/ ~7 z5 m' e+ t
* {, {$ z! ]+ n+ f您的第一个操作系统已成功编译!- b! P4 u  U8 q
/ G! ^$ i% o, r$ n# h( a- q
现在您可以使用grub-mkrescue创建图像:
1 }/ E6 ^3 A; S7 m" B" ^
5 Z; Y* [( |) }3 Y创建目录:iso
% d! J$ f% p0 I# J7 p" S+ ?$ a4 h
2 ]. g$ F2 B7 T3 d+ j. ]在该目录中,创建另一个目录:boot,然后在引导目录中,创建目录:grub,然后在grub目录中创建文件:grub.cfg,其中包含以下内容(不要在新行中添加大括号):
/ |1 M3 D& E1 q8 ?4 m; v3 [- a4 a0 m* G7 d3 `! [& `
然后将您的内核(kern)复制到iso / boot目录并再次运行您的shell:
* F# f/ R$ h6 p. W. {+ x  B' A. Z9 [8 G3 g
切换到内核的主目录并输入:9 B7 t9 M1 m  P4 ~& w
2 m# ^  {7 J" a' {( N
现在您可以从第一个操作系统启动并享受乐趣:一个没有任何内容的简单内核。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 23:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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