操作系统45讲笔记一:自己实现一个最简单的内核

一、背景

本系列笔记是基于彭东大神的课程操作系统45讲。
入门第一课自己手动做一个最简单的内核,就像任何编程语言一样的第一课,先写一个helloWorld程序,这次我们写一个HelloOS系统(一个最简单的操作系统,没有任何功能,只有输出一句话HelloOS)。

二、环境搭建

思考一下,当我们开启PC机时是不是有一个引导程序,所以这次的实验我们要借助GRUB引导程序(Centos7已经帮我们装好了)。我们需要准备好HelloOS需要的文件,然后配置好相关的信息,让GRUB引导我们安装程序。
我的环境配置:

VMware+Centos7的虚拟机
CentOS Linux release 7.8.2003 (Core)
nasm环境

三、动手实践

现在我直接用彭东大神写好的代码,进行实际操作,具体过程如下:
1.首先注册一个gitee账号(可以用github账号授权登录)
2.在centos7系统中,找一个合适的位置,创建一个文件夹OSTest(自己随意命名),用这个文件夹作为本地仓库,然后
git init初始化仓库,接着git clone 远程仓库的地址。
彭东大神的gitee仓库地址:操作系统45讲
3.现在已经拷贝好了远程仓库,可以看到OTest文件夹下有cosmos文件夹。这是操作系统45讲课程相关全部代码,我们为找到lesson2文件夹,打开里面有HelloOS文件夹。
4.现在我们来分析一下HelloOS文件夹下的各个文件:
在这里插入图片描述
我们来回忆一下程序生成的过程:
在这里插入图片描述
Linux下具体操作:

源文件生成预处理文件: gcc -E HelloWorld.c -o HelloWorld.i
预处理文件生成汇编文件: gcc -S HelloWorld.i -o HelloWorld.s
汇编文件生成二进制目标文件: gcc -c HelloWorld.s -o HelloWorld.o
二进制目标文件链接生成可执行文件:gcc HelloWorld.o -o HelloWorld
源文件直接生成可执行文件:gcc HelloWorld.c -o HelloWorld
Linux系统运行可执行文件:./HelloWorld

现在回来看我们要自己实现一个操作系统内核应该怎么做:

由于C语言是高级语言不能直接处理计算机硬件,所以我们需要用汇编语言先搭建好C语言的工作环境(C语言后函数调用操作,需要入栈、出栈)。所以entry.asm文件就是负责搭建C语言的工作环境的。汇编程序写好后需要一个链接器脚本hello.lds来生成可执行elf文件。现在C语言可以使用了,我们用C语言输出语句HelloOS,只不过此时我们需要自己写一个程序来规定printf的输出格式(通过操作显卡)。现在所有的准备都已经做好了,我们编译整个HelloOS工程(在HelloOS文件夹下输入指令:make -f Makefile

5.熟悉了HelloOS的各个文件作用之后,现在开始构建Hello OS工程,由于整个工程里面有汇编程序,也有C语言程序。
所以先安装nasm,(GCC系统默认安装过了)

yum install build-essential nasm

①HelloOS构建成功后会生产HelloOS.bin文件,现在切换为root用户权限(su -),然后把HelloOS.bin文件复制到/boot/路径下

cp -r HelloOS.bin /boot/

②现在要把HelloOS添加到GRUB的启动设置中,打开install.md文件。注意此时boot目录挂载的分区是你自己机器上的分区。

menuentry 'HelloOS' {
     insmod part_msdos #GRUB加载分区模块识别分区
     insmod ext2 #GRUB加载ext文件系统模块识别ext文件系统
     set root='hd0,msdos1' #注意boot目录挂载的分区,这是我机器上的情况
     multiboot2 /HelloOS.bin #GRUB以multiboot2协议加载HelloOS.bin
     boot #GRUB启动HelloOS.bin

查看boot分区:df /boot/
在这里插入图片描述
在/etc/grub.d/40_custom文件中,添加HelloOS在grub2中的配置,即把menutry这块代码插入到/etc/grub.d/40_custom文件尾。(或者直接将配置信息复制插入到 /boot/grub2/grub.cfg 文件
在这里插入图片描述

③重新生成 /boot/grub2/grub.cfg 文件,切换到grub目录下执行以下语句

[root@zsh grub2]# grub2-mkconfig -o /boot/grub2/grub.cfg

在这里插入图片描述

6.万事俱全,重启VM虚拟机,此时我们看到启动项多了HelloOS,如下。
在这里插入图片描述
然后进入HelloOS系统之后就是,一行语句Hello OS!(现在还没有其他功能)
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西里小诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值