目录

1. HelloOS说明

1.1 HelloOS构成

1.2 HelloOS编译

2. 部署HelloOS

2.1 设置grub进入引导菜单

2.2 增加HelloOS启动选项

2.3 启动HelloOS


1. HelloOS说明

1.1 HelloOS构成

HelloOS为极客时间《操作系统实战45讲》中引入的示例OS,在L02中由如下文件构成,

各文件内容简介如下,

① entry.asm

供grub调用的引导程序,用于设置CPU工作模式与工作环境,并调用C语言编写的main函数

② main.c

实现main函数,此处用于打印字符串

③ vgastr.c / vgastr.h

实现字符串在显示器上的输出

说明1:写入字符ASCII码的目标地址为0xb8000起始的内存,映射到该地址的,是显卡字符模式下的显存

说明2:每显示一个字符将p_strdst + 2,是因为显存中每个字符对应2B,分别为字符编码和字符显示属性

参考资料:关于在显卡文本模式下输出字符,可参考下文的chapter 2

https://blog.csdn.net/chenchengwudi/article/details/116066133

④ hello.lds

链接器脚本,用于指导链接过程,设定不同程序段的布局

⑤ Makefile

编译脚本,用于指导编译过程

1.2 HelloOS编译

HelloOS编译过程如下图所示,

说明1:nasm汇编器

X86体系结构的汇编语言编译器有多种,如MASM / FASM / TASM / AS86 / NASM等,此处使用的nasm汇编器有如下特点,

① 开源免费(有些汇编语言编译器是需要付费的)

② 支持多种操作系统平台

③ 允许汇编语言源程序中只包含指令(作为对比,MASM编译器需要在源程序中定义很多组件才能开始编程)

Ubuntu中默认未安装nasm汇编器,可使用如下命令安装,

sudo apt-get install nasm

说明2:链接器-map选项

在Makefile中,在链接生成HelloOS.elf时,使用了-map选项

该选项将使得在链接过程中,生成链接布局文件,通过该文件可知HelloOS的内存映射布局

编译HelloOS时生成的map文件如下图所示,

2. 部署HelloOS

说明:实验环境为VMware + Ubuntu 16.04

2.1 设置grub进入引导菜单

我们将HelloOS作为一个操作系统启动项供grub启动,因此需要能够在PC启动时进入grub引导菜单,并选择启动HelloOS

为了能够每次启动时进入grub引导菜单,需要进行如下设置

① 修改/etc/default/grub

a. 注释掉HIDDEN所在的2行

b. 将GRUB_TIMEOUT设置为30(使用默认值10其实也可以)

c. 将GRUB_CMDLINE_LINUX_DEFAUL设置为text

参考资料:https://jingyan.baidu.com/article/6dad50755e35d1a123e36ecc.html

② 执行如下命令,更新grub配置

sudo update-grub

2.2 增加HelloOS启动选项

修改/boot/grub/grub.cfg,增加HelloOS启动项

说明1:set root属性需要根据实际情况填写,应填写/boot目录所在分区,可使用df命令查看

mount命令也可查看

说明2:关于insmod part_msdos & insmod ext2的设置

此处需要加载的模块信息,可以参考系统已有的启动项设置

此处参考的是实验用虚拟机中默认启动Ubuntu的menuentry,这样可以确保依据不同实验平台设置一致

比如对于使用GPT分区表的实验环境,需要加载insmod part_gpt模块

2.3 启动HelloOS

此时重启虚拟机,便可见到HelloOS启动项

选择该启动项,即可启动HelloOS

说明:在grub的命令行模式可以查看硬盘分区信息

在进入grub引导菜单后,按下'c'键可以进入命令行模式

在grub的命令行模式中,使用ls命令可以查看硬盘分区信息

使用ls命令也可以验证set root参数设置是否正确

操作系统实战45讲01:运行HelloOS相关推荐

  1. 操作系统实战 45 讲:运行HelloOS界面

    目录 一.运行要求 二.开始运行 三.重启linux 细节补充 一.运行要求 实验环境VMware + Ubuntu18.04 安装gcc,nasm,make 命令为:sudo apt-get ins ...

  2. MySQL实战45讲学习笔记

    文章目录 MySQL实战45讲-学习笔记 01 基础架构:一条SQL查询语句是如何执行的? mysql逻辑架构 连接器 查询缓存 分析器 优化器 执行器 02 日志系统:一条SQL更新语句如何执行 r ...

  3. mysql 实战 45讲 学习笔记 基础知识 原理剖析

    MySQL 实战45讲 持续更新中~ 00讲 开篇 我们知道如何写出逻辑正确的SQL语句来实现业务目标,却不确定这个语句是不是最优的 我们听说了一些使用数据库的最佳实践,但是更想了解为什么这么做 我们 ...

  4. MySQL 实战45讲--笔记

    文章目录 MySQL 实战45讲-->笔记 开篇词 基础篇(8讲) 01 | 基础架构:一条SQL查询语句是如何执行的? 1.1 SQL 语句在 MySQL 的各个功能模块中的执行过程. 依次看 ...

  5. 《Mysql实战45讲》学习笔记 1-22

    Mysql <Mysql实战45讲> 1.一条sql查询语句是如何执行的 Server层: 连接器,查询缓存,分析器,优化器,执行器 存储引擎层: 负责数据的存储和提取 (Innodb, ...

  6. mysql实战45讲(15-22)

    mysql实战45讲学习笔记 15 日志与索引的关系 15.1 日志 1,分析一下在两阶段提交的不同时刻,MySQL 异常重启会出现什么现象. 如果在图中时刻 A 的地方,也就是写入 redo log ...

  7. 《MySQL实战45讲》——学习笔记12 “InnoDB刷脏页的控制策略“

    本篇介绍MYSQL InnoDB的WAL机制带来的小问题--利用WAL技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,但也带来了内存脏页的问题: 脏页会被后台线程自动flush,也会由于数 ...

  8. 《MySQL实战45讲》——学习笔记01-03 “MySQL基本架构、日志系统、事务隔离“

    最近有新闻说"丁奇"炒股失败欠债,赶紧去极客时间买了他的<MySQL 实战 45 讲>以防下架,顺带重新系统的复习下MYSQL相关知识,记录下学习笔记: 本篇介绍: M ...

  9. MySQL实战45讲——MySQL是怎么保证数据不丢的?

    文章摘抄自林晓斌老师<MySQL实战45讲>.今天这篇文章, 我会继续和你介绍在业务高峰期临时提升性能的方法. 从文章标题"MySQL是怎么保证数据不丢的? ", 你就 ...

最新文章

  1. python启动appium服务_python下appium服务的自启动和关闭
  2. 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------剑指offer系列
  3. win10 输入法不见了、繁体 问题解决
  4. WGAN的提出背景以及解决方案
  5. poj 1041(欧拉回路+输出字典序最小路径)
  6. Oracle Long类型转换为Clob类型
  7. 想都不敢想!这8个神奇“黑科技”原来已经有人弄出来了
  8. linux内核源码目录分析
  9. c#设计模式-适配器模式
  10. fedora27 GPaste
  11. 基于QT和DCMTK的Dicom 图像浏览器---收尾
  12. 牛客小白月赛2 H 武 【Dijkstra】
  13. 今天是星期一,两天后是星期三,5天后是星期六;今天是星期六,3天后是星期二。
  14. VScode 删除远程资源管理器中SSH TARGETS
  15. 谈谈令你印象深刻的技术问题
  16. 高通平台做GSI测试时,开机重启失败问题
  17. C# 终本案件、综合执行人、裁判文书爬虫
  18. 给找工作的同学一点参考
  19. 数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据
  20. SolidCAM 2020 基础到五轴 车铣 编程视频教程 2021教程

热门文章

  1. Python Web项目自定义虚拟环境
  2. Spring Cloud Stream与RabbitMQ 死信队列
  3. java中final语句_Java中使用非final变量的不可访问语句
  4. mysql 事务日志备份_SQL Server恢复模式与事务日志备份
  5. javaSE----进制
  6. java鸟_java飞扬的小鸟
  7. ideadebug热更新_Spring Boot 在IDEA中debug时的hot deployment(热部署)
  8. ssh协议是osi_你见过这份864页神仙级的TCP/IP协议吗?,太香了!
  9. MYSQL8.0 排序查询报错 this is incompatible with sql_mode=only_full_group_by
  10. Kotlin 1.2 有哪些新特性