《一个操作系统的实现》windows用vm安装CentOS——从bochs环境搭建到第一个demo跑通

  1. vm安装CentOS虚拟机带有桌面的版本。
  2. su输入密码123456。更新yum -y update 。一般已经安装好后面这2个工具:yum install -y net-tools wget
  3. 看下ip地址ifconfig,然后本地终端连接ssh root@192.168.249.132输入密码即可,主要是为了复制网址方便些。大概率wget https://nchc.dl.sourceforge.net/project/bochs/bochs/2.7/bochs-2.7.tar.gz无法下载bochs,所以直接下载到本地然后复制过去 scp .\bochs-2.7.tar.gz root@192.168.249.132:~
  4. 安装bochs。tar -zvxf bochs-2.7.tar.gzcd bochs-2.7,安装过程主要参考这两篇文章:最新Linux(centos)安装bochs和【实现操作系统 01】CentOS 9 安装配置 Bochs 2.7 虚拟机,及编写简单的 bootloader 并写入软盘启动
// 1、先安装依赖
yum install gcc-c++ glibc-headers
yum install libX11-devel.x86_64
yum install  libXrandr-devel.x86_64
yum install -y epel-release// 2.configure
./configure --with-x11 --with-wx --enable-debugger --enable-disasm --enable-all-optimizations --enable-readline --enable-long-phy-address --enable-ltdl-install --enable-idle-hack --enable-a20-pin --enable-x86-64 --enable-smp --enable-cpu-level=6 --enable-large-ramfile --enable-repeat-speedups --enable-fast-function-calls --enable-handlers-chaining --enable-trace-linking --enable-configurable-msrs --enable-show-ips --enable-cpp --enable-debugger-gui --enable-iodebug --enable-logging --enable-assert-checks --enable-fpu --enable-vmx=2 --enable-svm --enable-3dnow --enable-alignment-check --enable-monitor-mwait --enable-avx --enable-evex --enable-x86-debugger --enable-pci --enable-usb --enable-voodoo// 3.修改文件cpp为cc且修改配置文件路径
cp misc/bximage.cpp misc/bximage.cc
cp iodev/hdimage/hdimage.cpp iodev/hdimage/hdimage.cc
cp iodev/hdimage/vmware3.cpp iodev/hdimage/vmware3.cc
cp iodev/hdimage/vmware4.cpp iodev/hdimage/vmware4.cc
cp iodev/hdimage/vpc.cpp iodev/hdimage/vpc.cc
cp iodev/hdimage/vbox.cpp iodev/hdimage/vbox.cc
cp bx_debug/parser.cpp bx_debug/parser.ccvi bx_debug/debug.h
修改:
#include "config.h"为#include "../config.h"
#include “osdep.h"为#include "../osdep.h"
#include "cpu/decoder/decoder.h"为#include "../cpu/decoder/decoder.h"make
make install
  1. 生成个软盘镜像。在家目录bximage,选择创建软盘fd其他默认,成功后目录中出现a.img文件。
  2. 按照书上的,编写asm代码,vi boot.asm
        org     07c00h								;org指令规定程序的起始地址,不规则则默认是0000hmov     ax,csmov     ds,axmov     es,axcall    DispStrjmp     $									;$表示当前行地址,所以这是无限循环
DispStr:mov     ax,BootMessagemov     bp,axmov     cx,16mov     ax,01301hmov     bx,000chmov     dl,0int     10hret
BootMessage:            db      "Hello,OS World!"
times   510-($-$$)      db      0					;一共512字节,最后2字节写0xaa55,所以中间插入很多0字节,数量就是512-2-上面那段代码占用的字节(当前行地址-这一节开头地址即程序初地址)
dw      0xaa55										;最后补这个是由于加电自检后寻找启动盘会优先查找软盘00磁道1扇区(1扇区512字节),并发现如果扇区最后字节以0xaa55结尾则认为这是引导扇区,并把这512字节数据复制到0000:7c00处并把控制交由这段引导程序,即我们这段程序,那我们这段程序怎么跑到7c00处的?请看第一行代码!
  1. 安装nasm。
sudo yum install automake gcc kernel-devel
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15/nasm-2.15.tar.gz
tar -zvxf nasm-2.15.tar.gz
./autogen.sh
./configure
make && make install
  1. 编译代码: nasm boot.asm -o boot.bin
  2. 写进软盘镜像: dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
  3. 配置文件,在家目录中vi bochsrc
################################################
#configure file for Bochs
################################################# how much memory the emulated machine will have
megs: 32# filename of Rom images, 注意下边要根据你安装目录来调整
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest#what disk images will be used
floppya: 1_44=/root/a.img, status=inserted#choose the boot disk.
boot: floppy#where do we send log messages?
log: bochsout.txt#disable the mouse
mouse: enabled=0# enable key mapping, using US layout as default.
keyboard: keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map
  1. 在家目录启动bochs -f bochsrc,后面是指定配置文件,其实可以省略,因为bochs会默认从几个目录中找配置文件。询问操作时默认或按6,之后按c表示continue?就启动了,虽然这个启动界面有些奇怪,但至少显示了自定义的信息。
    在这里插入图片描述

  2. 上面制作并把数据写到a.img镜像后,可以vi查看这个文件,输入命令%!xxd可以以16进制查看,这时候32行末尾即512字节处最后2个字节就是55aa,即我们程序最后一行的dw 0xaa55

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/100972.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASR(自动语音识别)任务中的LLM(大语言模型)

一、LLM大语言模型的特点 二、大语言模型在ASR任务中的应用 浅度融合 浅层融合指的是LLM本身并没有和音频信息进行直接计算。其仅对ASR模型输出的文本结果进行重打分或者质量评估。 深度融合 LLM与ASR模型进行深度结合,统一语音和文本的编码空间或者直接利用ASR…

STP知识总结

目录 生成树协议 导致问题 生成树 存在算法 1、802.1D 接口状态 收敛时间 结构变化 802.1D 缺点 2、PVST cisco私有 3、PVST 缺点 4、快速生成树 快速原理 边缘接口 5、MSTP/MST/802.1S 生成树协议 生成树协议是一种工作在OSI网络模型中第二层(数据链路层…

MsrayPlus多功能搜索引擎采集软件

MsrayPlus多功能搜索引擎采集软件 摘要: 本文介绍了一款多功能搜索引擎软件-MsrayPlus,该软件能够根据关键词从搜索引擎中检索相关数据,并提供搜索引擎任务、爬虫引擎任务和联系信息采集三大功能。我们将分析该软件在不同领域的应用&#xf…

基于Java+SpringBoot+Vue的乌鲁木齐南山冰雪旅游服务网站【源码+论文+演示视频+包运行成功】

博主介绍:✌csdn特邀作者、博客专家、java领域优质创作者、博客之星,擅长Java、微信小程序、Python、Android等技术,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推…

Redis进阶底层原理- Redis结构图与底层数据编码结构

Redis底层原理篇,​让学习绚丽多彩起来!!!(需要原图私信)

智能仓储管理系统(自动化仓库管理解决方案)

企业实际的仓储管理中,往往会出现那样这样的错误,归根结底,主要是由于没使用合适的仓库管理工具。相反,人工使用合适的仓库管理工具,不仅可以在日常仓库管理方法中根据采集到的产品信息数据,大大地提高管理…

什么是CSS中的BFC?

①什么是BFC BFC 全称:Block Formatting Context, 名为 “块级格式化上下文”。 W3C官方解释为:BFC它决定了元素如何对其内容进行定位,以及与其它元素的关系和相互作用,当涉及到可视化布局时,Block Forma…

在Hive/Spark上执行TPC-DS基准测试 (PARQUET格式)

在上一篇文章:《在Hive/Spark上运行执行TPC-DS基准测试 (ORC和TEXT格式)》中,我们介绍了如何使用 hive-testbench 在Hive/Spark上执行TPC-DS基准测试,同时也指出了该项目不支持parquet格式。 如果我们想要生成parquet格式的测试数据,就需要使用其他工具了。本文选择使用另…

Lnton羚通算法算力云平台【PyTorch】教程:torch.nn.Softsign

torch.nn.Softsign 原型 CLASS torch.nn.Softsign() 图 代码 import torch import torch.nn as nnm nn.Softsign() input torch.randn(4) output m(input)print("input: ", input) print("output: ", output)# input: tensor([ 0.0046, -0.4135, -2…

离散Fourier变换的一种理解方法

1. 离散Fourier变换的定义 一个信号 x 的离散Fourier变换(Discrete Fourier Transform,简记为DFT)定义为 , 其逆(inverse) Fourier变换(简记为 IDFT)定义为 。 (译注:符号“≜”表示“根据定义,左边等于右边”。) 其中&#x…

html | 基于iframe的简易富文本编辑器

效果图 支持: 选中后 ctrlI 斜体 代码 思路就是在iframe种嵌套html和css。 <pre> - 支持: 选中后 ctrlI 斜体 - todo: 鼠标实现单击斜体 </pre> <iframe name"richedit" style"height:30%; width:100%;"></iframe><script…

操作符详解(2)

9.条件操作符 由问号和冒号组成&#xff0c;有三个表达式&#xff0c;有三个操作符&#xff0c;所以条件操作符是唯一的一个三目操作符&#xff0c;exp1为真&#xff0c;exp2则计算&#xff0c;exp3不算&#xff0c;整个表达式的结果就是exp2的结果。exp1为假&#xff0c;exp2…

LVS负载均衡DR(直接路由)模式

在LVS&#xff08;Linux Virtual Server&#xff09;负载均衡中的DR&#xff08;Direct Routing&#xff09;模式下&#xff0c;数据包的流向如下&#xff1a; 客户端发送请求到负载均衡器&#xff08;LVS&#xff09;的虚拟IP&#xff08;VIP&#xff09;。负载均衡器&#x…

【网络】数据链路层——MAC帧协议 | ARP协议

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 来到数据链路层后&#xff0c;完整的数据被叫做数据帧&#xff0c;习惯上称之为MAC帧。 MAC帧协议 | A…

C++STL之string类

​ 食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a;C基础 ♈️今日夜电波&#xff1a;喜劇—星野源 1:06 ━━━━━━️&#x1f49f;──────── 3:51 …

AI 绘画Stable Diffusion 研究(十三)SD数字人制作工具SadTlaker使用教程

免责声明: 本案例所用安装包免费提供&#xff0c;无任何盈利目的。 大家好&#xff0c;我是风雨无阻。 想必大家经常看到&#xff0c;无论是在产品营销还是品牌推广时&#xff0c;很多人经常以数字人的方式来为自己创造财富。而市面上的数字人收费都比较昂贵&#xff0c;少则几…

三自由度PUMA机器人非线性控制研究(Matlab代码、Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

pandas数据分析40——读取 excel 合并单元格的表头

案例背景 真的很容易疯....上班的单位的表格都是不同的人做的&#xff0c;所以就会出现各种合并单元格的情况&#xff0c;要知道我们用pandas读取数据最怕合并单元格了&#xff0c;因为没规律...可能前几列没合并&#xff0c;后面几列又合并了....而且pandas对于索引很严格&am…

飞机打方块(四)游戏结束

一、游戏结束显示 1.新建节点 1.新建gameover节点 2.绑定canvas 3.新建gameover容器 4.新建文本节点 2.游戏结束逻辑 Barrier.ts update(dt: number) {//将自身生命值取整let num Math.floor(this.num);//在Label上显示this.num_lb.string num.toString();//获取GameCo…