鱼C论坛

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

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

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

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

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

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

  Y3 @! j8 c( c& Z, \3 u
: n( s3 h$ e' [& R一、如何为开发操作系统做准备?# j2 q1 g. b$ r1 h

7 d2 G/ w+ q  T7 r首先,必须了解所有编程语言,例如指针,函数(针对C++);其次,必须对汇编语言有所了解。6 t3 ^4 Z! @1 W7 ~0 Y& U
; p# \# }- k  @
二、开发操作系统需要什么工具?7 e5 Q( \! @0 V9 \
  h* Y0 S  o  ?! P
1. 汇编器:* k) k6 Z- Z: {! D2 N  r
% S4 H1 `' \8 Z$ ^( K1 v& _6 S
汇编器获取汇编代码,并为您提供低级输出,例如包含CPU寄存器上的控件的对象。本文要使用的汇编程序是nasm(netwide汇编程序),可以从http://nasm.us下载。
2 G3 i, }; b- m8 p% J/ Q9 p4 \; q5 |( d9 {+ @' W
2.交叉编译器:
- D0 i  K, o8 `5 ^4 o: g& m$ D, V' z( n: h
为了开发操作系统,必须具有交叉编译器,因为您必须针对其可执行格式来编译内核。在这里用gcc(gnu编译器集合),您可以从http://gcc.gnu.org/下载。
: F( L1 G0 t. Z3 L$ F8 e# n( y
5 Z; D6 U8 e3 Y" y3.链接器:6 O  c0 V) F% }) z$ f, ^( P" ^
& _8 K2 O, o2 C" e, [9 c+ j
链接器获取您的对象并将其链接到getter,在这里用gnu binutils,可以从http://gnu.org/software/binutils下载
6 m( {1 g  g% ]9 q, @% I  s* [) \5 c) N: h2 q* X
4.虚拟机:% F" G4 Z4 u& D' m

6 C6 p  f) [0 H为了测试操作系统,必须有一个vm(虚拟机),但这不是必需的,在这里使用virtualbox,可以从http://virtualbox.org/下载。
! Y! O+ V5 B4 p4 p* w* L; g) z: m5 F/ F4 _
三、 开始之前的注意事项
/ c  i+ {5 P; L' v, ^) C, @$ w
6 N8 [) h1 l. x  e$ W1.在开发操作系统时,不能使用<iostream>,<fstream>,<memory>,<cstdio>,<cstdlib>,<windows.h>,<unistd.h>和所有平台API's,必须自己创建所有这些东西。+ K; J+ P# m5 I; i

( L9 L1 Q2 d% ?5 j' z2.必须非常非常小心
& `2 j. S  |' Q# t. B, s% I$ C! a7 l6 q  f. X
在开发时,您可以掌控一切,因此,您可以销毁一个或一些或所有硬件。在这种情况下,我建议使用虚拟机来测试您的操作系统,而不是多次重新启动。
7 G* g$ F/ b  j1 s$ N" R/ V- ]+ i. @+ [2 C- T4 v8 t% T7 N
四、 引导程序. ?0 n9 d$ X; [2 Y8 M5 L, ^

! G+ p# b. B. }% j引导加载程序是一堆用汇编语言编写的代码,必须为512个byets(1个扇区),它加载您的操作系统的内核。我们跳过本节,使用grub作为bootloader,您可以从http://gnu.org/software/grub下载grub源代码。或者实际上,您也许想要编译软盘:在Google中搜索将对您有所帮助。; P8 D4 E0 X' F+ \7 d8 [/ W* l& e

; S  p; x# c- {; X五、 一个简单的内核
9 g9 U7 k8 }- G* Z# Z% O4 X* n& p% `$ ~. r
我们要开发一个操作系统,因此,我们必须自己创建功能。$ a& t! {. W! G  H0 F. {7 }

  L$ h5 `. t1 O5 Z5 O7 B8 n首先,我们创建一个包含以下内容的文件boot.asm:
6 {8 L* y+ f# u! R6 K5 p: g) ^( N3 p: u) L) u5 @$ X
代码链接:
" [% S9 S! J" J" o" u3 D  z6 `" o- bcpp.sh/6zu; Y. }/ _- Z# z8 o( V
cpp.sh/9uw% P1 |- E9 x/ [* v0 c/ M2 ?
9 ?+ ?: W. h9 I7 _7 D
六、 链接描述文件
( r0 o: E& q5 x: D# P% g, ~
7 r) G4 ?2 x* b1 o" Z- N1 M& _创建具有以下内容的文件:linker.ld
7 [$ U$ y, C% U
7 N0 k' L1 v9 |1 R, M% ]; G2 A& h/ c  |4 d% U
七、 如何编译
" G& m) B6 T' I9 Q' i! N2 U, n0 a7 k2 U- r! H' h, G* y* ~
转到shell(在Windows上需要cygwin),输入以下命令:: L9 Q3 Z/ h& d- o

! P" [( P0 s4 u+ l8 |% E恭喜!. g% v+ l# ^# ~" v( ^' _/ P3 Y
1 c$ p% b7 t9 y
您的第一个操作系统已成功编译!* x+ h, R( V; u
' H/ T2 f4 l# `0 z
现在您可以使用grub-mkrescue创建图像:, D/ B1 f7 ^1 _
/ C/ p8 Z' N- k* y0 j
创建目录:iso
; j0 x! z7 x% i7 j# y) g5 {. I2 ]6 I3 T0 u' T- k$ B
在该目录中,创建另一个目录:boot,然后在引导目录中,创建目录:grub,然后在grub目录中创建文件:grub.cfg,其中包含以下内容(不要在新行中添加大括号):
1 [( D* c6 o" ?1 A% n3 R1 K! r
6 c# y8 C7 K3 S- R$ Z然后将您的内核(kern)复制到iso / boot目录并再次运行您的shell:) d# M& C" Z+ p9 t% a% W) d
) s3 s' v, J$ Z" V  z
切换到内核的主目录并输入:
3 ^- @+ U( [# m1 p) E$ V: C; V6 `6 b8 M* f; B% o) Q
现在您可以从第一个操作系统启动并享受乐趣:一个没有任何内容的简单内核。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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