当前位置: 首页 > news >正文

《一个操作系统的实现》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.lryc.cn/news/134796.html

相关文章:

  • 线程Thread
  • 如何使用CSS实现一个渐变背景效果?
  • 初始C语言(7)——详细讲解有关初阶指针的内容
  • ArcGIS Pro技术应用(暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用)
  • RISC-V公测平台发布 · 数据库在RISC-V服务器上的适配评估
  • UE5.2 LyraDemo源码阅读笔记(五)输入系统
  • 线段树详解——影子宽度
  • 使用R语言绘制折线图
  • 无涯教程-Perl - wantarray函数
  • 【gitkraken】gitkraken自动更新问题
  • 《Java Web程序设计》试卷03
  • 怎么查看小程序中的会员信息
  • 网络安全—黑客—自学笔记
  • 深度解读波卡 2.0:多核、更有韧性、以应用为中心
  • 微服务中间件--Eureka注册中心
  • 积跬步至千里 || 矩阵可视化
  • zookeeper详细介绍
  • 面板市场趋势分析:价格上涨势头或将减缓 | 百能云芯
  • JVM性能调优
  • 【全链路追踪】XXL-JOB添加TraceID
  • [Unity]Lua本地时间、倒计时和正计时。
  • 探究HTTP API接口测试:工具、方法与自动化
  • CSS中如何实现文字溢出省略号(text-overflow: ellipsis)效果?
  • CSDN编程题-每日一练(2023-08-21)
  • 面试题-React(四):React中的事件绑定如何实现?有几种方式?
  • Docker容器:docker镜像的创建及dockerfile案例
  • Java虚拟机(JVM):引用计数算法
  • 【AGC】Publishing api怎么上传绿色认证审核材料
  • 改变住宅区空气质量,你一定要知道!
  • 【SpringCloud】Gateway使用