参考《一个64位操作系统的设计与实现》,自己写操作系统(一)

2023-11-16

1.安装VMware虚拟机,版本16,下载地址,http://downdownxia.com/down/VMware16lsb.rar?key=fa4505a42b82aa65195be879fc84defd

2.安装centos系统,版本6.5,下载地址:magnet:?xt=urn:btih:046A679B7CEF709AEB141DF3A4D3F1E4DB460A99

3.安装bochs

        3.1切换源 ,依次执行以下命令,

        cd /etc/yum.repos.d/
        mkdir bak
        mv * bak/
        curl -o /etc/yum.repos.d/CentOS-Base.repo http://file.kangle.odata.cc/repo/Centos-6.repo
        curl -o /etc/yum.repos.d/epel.repo http://file.kangle.odata.cc/repo/epel-6.repo
        yum clean all
        yum makecache

        3.2安装bochs前置依赖

        yum groupinstall -y "Server Platform Development" "Development Tools"

        yum install kernel-headers kernel-devel qt-devel gtk2-devel textinfo tcl-devel tk-devel

        3.3下载bochs-2.6.8.tar.gz:Find out more about Bochs x86 PC emulator | SourceForge.net

        tar -xf bochs-2.6.8.tar.gz -C /usr/src

        ln -sv bochs-2.6.8 bochs

        cd bochs

        ./ 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-plugins --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.4安装报错,需要执行以下命令修改文件:

        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-img.cpp iodev/hdimage/vpc-img.cc

        cp iodev/hdimage/vbox.cpp iodev/hdimage/vbox.cc

        3.5编译bochs

        make && make install

4.安装nasm

        yum install nasm

5.编写boot引导程序boot.asm,目录在bochs下或其他目录均可,代码如下:

	org	0x7c00	;bios引导地址
BaseOfStack	equ	0x7c00	;栈基
Label_Start:

	mov	ax,	cs
	mov	ds,	ax
	mov	es,	ax
	mov	ss,	ax
	mov	sp,	BaseOfStack
;==========清屏
	mov	ax,	0600h	;清屏
	mov	bx,	0700h	;清屏
	mov	cx,	0	;滚动范围左上角坐标0,0
	mov	dx,	0184fh	;右下角坐标(80,50)
	int	10h
;==========设置焦点
	mov	ax,	0200h
	mov	bx,	0000h	;页码为0
	mov	dx,	0000h	;游标行列数为0
	int	10h
;==========显示字符串:Start		Booting......
	mov	ax,	1301h
	mov	bx,	000fh
	mov	dx,	0000h
	mov	cx,	17
	push	ax
	mov	ax,	ds
	mov	es,	ax
	pop	ax
	mov	bp,StartBootMessage
	int	10h
;=========复位
	xor	ah,	ah
	xor	dl,	dl
	int	13h

	jmp	$
	StartBootMessage:	db	"whg'os	Start	Boot"
;=========填充0
	times	510	-	($	-	$$)	db	0
	dw	0xaa55	;结束标志

6.将boot.asm进行编译

        nasm boot.asm -o boot.bin

7.使用bximge创建虚拟软盘,目录在bochs下或其他目录均可,使用命令:bximge,然后依次选择1,fd,1.44M,boot.img

 

8.使用dd命令将boot.bin引导程序强制写入到引导扇区中:

        dd if=boot.bin of=./boot.img bs=512 count=1 conv=notrunc

9.运行bochs,进入bochs文件夹,执行以下命令,依次选择6,c(回车),即可看到结果。

        bochs -f .bochsrc

结果:

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

参考《一个64位操作系统的设计与实现》,自己写操作系统(一) 的相关文章

  • 怎样才能使 Windows 成为一个开箱即用的 POSIX 兼容操作系统?

    这个问题的动机是我的一个牵强的梦想 即 nix 平台上可用的许多优秀软件可以轻松移植到 Windows 微软最近对开源和开放性采取了不同的方法 所以我真的很想知道如果微软有这样的倾向 这样的事情会有多可行 我很好奇的一些更具体的事情是 是否
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 为 Qt 应用程序创建 Linux 安装

    我刚刚用 Qt Creator 制作了一个很棒的程序 我对自己很满意 如何将其从台式机移至笔记本电脑 那么 最好的方法是安装程序 对吗 对于 Ubuntu 这是一个 Debian 软件包 对吗 我怎么做 有人这样做过吗 他们可以分享 QT
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version

随机推荐

  • 【简单易用】基于Qt的跨平台自定义标题栏控件QJamWindow

    一 概述 QJamWindow是一个基于Qt的跨平台自定义标题栏控件 你可以通过它方便得设计出属于自己的标题栏 特性 1 标题栏高度可调 标题栏背景色设定 2 图标及其尺寸 图标背景色设定 3 Control box宽度 鼠标经过 按下颜色
  • JAVA基础必备功能之导出ZIP文件

    导出ZIP文件 比较常用的两种 导出图片压缩文件 导出excel压缩文件 导出思路 需要导出的文件转存为byte数组保存到Map 然后遍历压缩成zip 需要引入jar
  • 链表— —循环链表的算法实现

    Joseph问题 有 10 个小朋友按编号顺序 1 2 10 顺时针方向围成一圈 从 1 号开始顺时针方向 1 2 9 报数 凡报数 9 者出列 显然 第一个出圈为编号 9 者 最后一个出圈者的编号是多少 第 5 个出圈者的编号是多少 in
  • lintcode 631 · 最大矩阵II【矩阵 中等 vip】

    题目 https www lintcode com problem 631 给出一个只有 0 和 1 组成的二维矩阵 找出最大的一个子矩阵 使得这个子矩阵的主对角线元素均为 1 其他元素均为 0 你可以认为所求的矩阵一定是一个方阵 主对角线
  • 组是由圆括号分开的正则表达式 随后可以根据它们的组号进行调用 第 0 组表示整个匹 配表达式 第1 组表示第 1 个用圆括号括起来的组 等等 因此 在表达式 A B C D 中 有 3 个组 第 0 组 ABCD 第 1 组是 BC 以及第
  • Acwing790.数的三次方根

    解题思路 include
  • Pandora-ChatGPT(离线安装教程)(附安装包)

    要安装Pandora ChatGPT 1 1 0 tar gz 您可以按照以下步骤进行操作 安装包 https wwue lanzouj com iOMwG0yeozxg 解压缩文件 tar xvf Pandora ChatGPT 1 1
  • 设置bitmap的宽高,同时将bitmap转换为file对象

    public class BitmapToSizeChangeFile 将bitmap转换为file存储起来 param bitmap return public static File
  • Dijkstra C艹板子

    迪杰斯特拉算法主要特点是从起始点开始 采用贪心算法的策略 每次遍历到始点距离最近且未访问过的顶点的邻接节点 直到扩展到终点为止 题源 最短路 蓝桥云课 lanqiao cn 如下图所示 G 是一个无向图 其中蓝色边的长度是 1 橘色边的长度
  • 绕过JavaScript debugger三种解决方法

    最近网上挺火的一段加密混淆JS 格式化展开后有300多行 目的是解析生成一个cookie 不携带cookie 就不能加载网页源码 典型的反爬虫操作 看后觉得好使的请记得点赞哦 烧鸡么么哒 谢谢 JS会自动监视是否打开了调试器 如果打开了 就
  • STM32锁住,解开方法

    一 STM32 被锁住后的解开方法 问题 STM32 JTAG SWD禁用导致无法烧写 由于STM32的引脚功能较多 在为了方便硬件的使用 常会使用复用重映射的功能 这里主要涉及的是SWD和JTAG端口的引脚对应出现的问题 为了使得TIM2
  • php之RSA加密解密

    介绍 RSA算法属于非对称加密算法 非对称加密算法需要两个秘钥 公开密钥 publickey 和私有秘钥 privatekey 公开密钥和私有秘钥是一对 如果公开密钥对数据进行加密 只有用对应的私有秘钥才能解密 如果私有秘钥对数据进行加密那
  • Linux下nginx的安装以及环境配置

    linux下nginx的安装以及环境配置 刚好最近在处理服务器相关的工作 所以记录一下nginx的安装 ok 接下来直接开始操作 第一步 下载nginx压缩包 在这里可以去nginx官网下载 gt 点我下载nginx 也可以直接使用wget
  • 【解惑】一文告诉你,该学R还是Python!

    Python和R是统计学中两种最流行的的编程语言 R的功能性主要是统计学家在开发时考虑的 R具有强大的可视化功能 而Python因为易于理解的语法被大家所接受 在这篇文章中 我们将重点介绍R和Python以及它们在数据科学和统计上地位之间的
  • 提高 React 项目整洁度的 21 个最佳实践

    React 在如何组织结构方面非常开放 这正是为什么我们有责任保持项目的整洁和可维护性 今天 我们将讨论一些改善 React 应用程序健康状况的最佳实践 这些规则被广泛接受 因此 掌握这些知识至关重要 所有内容都将以代码展示 所以做好准备
  • 端口扫描技术

    端口扫描 常见的扫描类型 全连接扫描 TCP connect 扫描 半连接扫描 TCP SYN 扫描 IP 头信息 dumb 扫描 秘密扫描 TCP FIN 扫描 TCP ACK 扫描 NULL 扫描 XMAS 扫描 SYN ACK 扫描
  • SQL编程:存储过程、触发器、函数(实例基于MySQL5.7.12)

    SQL编程基础 A 编程环境 即存储过程 触发器和函数中进行SQL编程 所以有些语法并不能应用于普通的SQL应用场景 如命令行直接SQL查询 B 变量声明 1 全局变量 声明 set 变量名 值 读取 select 变量名 赋值 set 变
  • 联想gen系列服务器,Hpe Microserver Gen10 Plus开箱

    Hpe Microserver Gen10 Plus开箱 2021 04 19 10 53 23 25点赞 69收藏 83评论 心水很久的gen10 plus终于到了 关注了很久终于下手了 在值得买好像都没看到gen10 plus的开箱 那
  • vuex的持久化插件

    目的 让在vuex中管理的状态数据同时存储在本地 可免去自己存储的环节 在开发的过程中 像用户信息 名字 头像 token 需要vuex中存储且需要本地存储 再例如 购物车如果需要未登录状态下也支持 如果管理在vuex中页需要存储在本地 1
  • 参考《一个64位操作系统的设计与实现》,自己写操作系统(一)

    1 安装VMware虚拟机 版本16 下载地址 http downdownxia com down VMware16lsb rar key fa4505a42b82aa65195be879fc84defd 2 安装centos系统 版本6