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

news2025/1/20 21:57:05
  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.cc

vi 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指令规定程序的起始地址,不规则则默认是0000h
        mov     ax,cs
        mov     ds,ax
        mov     es,ax
        call    DispStr
        jmp     $									;$表示当前行地址,所以这是无限循环
DispStr:
        mov     ax,BootMessage
        mov     bp,ax
        mov     cx,16
        mov     ax,01301h
        mov     bx,000ch
        mov     dl,0
        int     10h
        ret
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.coloradmin.cn/o/895605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SOLIDWORKS配置功能建立塑料模具标准件库

在塑料模具的设计过程中,建立其三维模型对于后续进行CAE分析和CAM加工是非常重要的。除了型腔和型芯以外,塑料模具中的标准件很多,如推杆、导柱、导套、推板、限位钉等,这些对于不同的产品是需要反复调用的。目前,我国…

GWAS-eQTL colocalization analysis workflow

1. The purpose of GWAS-eQTL intergration Is the my variant an eQTL?Is the leading variant of the GWAS and eQTL signal the same?Is my GWAS association of interest driven by an eQTL that may indiciate a functinal mechanism? GWAS locus that colocalized w…

IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/

IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/ Idea下载官网一键直达: 官网一键直达

低代码揭秘:企业开发能力提升的秘诀!

从捷码官网获取的捷码产品体验账号,用浏览器打开下列地址即可(推荐电脑端哈),需要自取: http://dev.gemcoder.com/front/development/index.html#/officialLogin?jmcmVnaXN0ZXI9dHJ1ZQ%3D%3D 对于很多软件开发企业来说…

北京筑龙智能物料:企业供应链数字化转型新思路

8月16-18日,由中国物流与采购联合会主办的“2023(第十五届)物流与供应链数字化发展大会”在贵州省贵阳市召开。北京筑龙智能化事业部总经理、筑龙研究院副院长胡婧玥受邀出席,带来主题为“智能物料——企业供应链数字化转型新思路…

Windows定时任务计划无法显示任务程序界面的问题解决

笔者这两天写了一个python脚本程序,用来自动从公司的主数据系统获取数据,并按格式编制成excel。脚本程序编写一切顺利,运行结果很是完美,笔者很是舒心。但在最后一步,用上班的电脑每天早上定时运行它时,出了…

msvcp110.dll丢失原因,msvcp110.dll丢失修复方法

装好软件或游戏之后,一打开就跳出各种报错信息的情况小伙伴一定见过,其中缺少各种msvcp110.dll文件最常见。小伙伴们一定奇怪,用得好好的电脑,怎么会缺文件呢?为啥其他游戏/应用就没事呢?其实这些“丢失”的…

Python OpenGL环境配置

1.Python的安装请参照 Anconda安装_安装anconda_lwb-nju的博客-CSDN博客anconda安装教程_安装ancondahttps://blog.csdn.net/lwbCUMT/article/details/125322193?spm1001.2014.3001.5501 Anconda换源虚拟环境创建及使用(界面操作)_anconda huanyuan_l…

数据库索引优化策略与性能提升实践

文章目录 什么是数据库索引?为什么需要数据库索引优化?数据库索引优化策略实践案例:索引优化带来的性能提升索引优化规则1. 前导模糊查询不适用索引2. 使用IN优于UNION和OR3. 负向条件查询不适用索引4. 联合索引最左前缀原则5. 范围条件查询右…

回到未来:使用马尔可夫转移矩阵分析时间序列数据

一、说明 在本文中,我们将研究使用马尔可夫转移矩阵重构时间序列数据如何产生有趣的描述性见解以及用于预测、回溯和收敛分析的优雅方法。在时间上来回走动——就像科幻经典《回到未来》中 Doc 改装的 DeLorean 时间机器一样。 注意:以下各节中的所有方程…

用KMP的方法解决《重复的子字符串》

提出问题 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 示例 1: 输入: “abab” 输出: True 解释: 可由子字符串 “ab” 重复两次构成。 示例 2: 输入: “aba” 输出: Fa…

eqtl-GWAS和GWAS-GWAS

目前教程中有eqtl-GWAS和GWAS-GWAS两种模式,其他模式比较少见,还未进行开发 数据类型cc为分类变量即case/control,quant为连续变量,eqtl数据默认quant coloc.abf有两个比较需要注意的点,就是数据集中N是代表样本量&am…

你真的了解你的交易吗?不妨了解下KYT

作者|Jason Jiang 随着行业高速发展与监管持续关注,虚拟资产领域正加速迈入合规时代。为应对虚拟资产的链上洗钱风险,欧科云链此前推出了Onchain AML合规技术方案,以助力行业健康有序发展。在Onchain AML反洗钱方案中,…

c++游戏制作指南(四):c++实现数据的存储和读取(输入流fstream)

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 🍟欢迎来到静渊隐者的csdn博文,本文是c游戏制作指南的一部🍟 🍕更多文章请点击下方链接🍕 🍨 c游戏制作指南&#x1f3…

【卡码网】32. 子矩形的最大面积 <模拟>

【卡码网】32. 子矩形的最大面积 给定一个矩形,宽度为 W,高度为 H,现需要对其进行划分。现有一个数组 yCutting 用于表示在水平方向上用于切分矩形的切线位置,另有一个数组 xCutting 表示在垂直方向上用于切分矩形的切线位置。求…

Python中import模块导入的实现原理

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 Python中import模块导入的实现原理 什么是模块import搜索路径import导入模块的原理图书推荐 专栏&…

springboot异步文件上传获取输入流提示找不到文件java.io.FileNotFoundException

springboot上传文件,使用异步操作处理上传的文件数据,出现异常如下: 这个是在异步之后使用传过来的MultipartFile对象尝试调用getInputStream方法发生的异常。 java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp\to…

【福建事业单位-综合基础知识】01法理学、宪法

这里写目录标题 一、法理知识1.1法的概念1.2法的规范作用1.3、法与道德1.4、法的制定!1.5、法是实施 二、宪法2.1 宪法的概念2.2宪法的特征2.3宪法的基本原则2.4 宪法的渊源2.5 宪法的宣誓总结 三、国家基本制度 一、法理知识 1.1法的概念 法是概念是参考项&#…

Nevron 3DChart Crack,可视化界面在运行时可用

Nevron 3DChart Crack,可视化界面在运行时可用 3DChart使用OpenGL 3D图形引擎创建复杂的2D和3D图表,这些图表可以包含静态或动画图像。3DChart包括一个用于生成图表模板的独立应用程序和一个ASP服务器配置实用程序。该组件还包括一个专门设计用于与3DChart集成的工具…

程序员如何利用公网打造低成本轻量化的搜索和下载平台【内网穿透】

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想,就是为了理想的生活! 公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件1.…