IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 操作系统45讲笔记一:自己实现一个最简单的内核 -> 正文阅读

[系统运维]操作系统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!(现在还没有其他功能)
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:39:18  更:2021-09-18 10:42:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:39:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码