【linux源码学习】【实验篇】使用bochs运行linux0.11系统(搭建一个自己的工作站)
目录
- 背景
- 资源获取
- bochs环境搭建windows
- bochs环境搭建linux
- 声明
背景
最近看赵炯老师的《linux内核完全注释》,然后在最后一个习题里面看到使用bochs跑一下0.11的内核代码,本来觉得很难,但是如果做过一遍就会发现其实很简单,这个是学计算机最容易发现的感觉,接下来记录一下我如何运行的linux0.11的环境。
资源获取
《linux内核完全注释》官网最新5.0版本的中英双语教材都有(虽然赵老师说自己的英语很poor,但是我觉得连我都能看懂的东西就是好东西)---------http://www.oldlinux.org/
内核源码--------------http://oldlinux.org/Linux.old/bochs/linux-0.11-040304.zip
bochs-2.1.1(不想使用太新的版本,因为赵炯老师发布的时间在2004年,所以2.1.1版本也是2004年,环境问题会比较少,想下最新版本的我也不拦你,只是可能需要自己折腾一下)------------------https://sourceforge.net/projects/bochs/files/bochs/2.1.1/
bochs环境搭建windows
windows环境搭建基本没有任何难度,本来我选了bochs-2.7,发现运行报错,所以下载了2.1.1,解压linux-0.11-040304.zip之后目录如下,这个包是赵炯老师直接配置好的两个系统映像文件和bochsrc配置文件,只要bochs环境没问题(这种类型的软件基本都会有问题),可以直接运行
如果你已经安装好bochs了,那么双机bxrc文件就默认使用bochs打开,这里我们使用记事本看下内容
注释很清晰,有些英文基础就行。
这里我们可以看到两个文件bochsrc-fdXXX和bochsrc-hdXXX,都可以运行,都是内核根文件系统,双机运行即可直接看到内核运行的窗口,如下图:
目前实测2.1.1坑定可以,2.7不行,似乎bios配置读取有些问题
bochs环境搭建linux
首先说下为啥要这么做,windows其实是我的主力机,配置非常高,并且主要用来娱乐和游戏比较多,功耗同时也很高,不可能每天都在运行,所以我觉得大家肯定都想要一个属于自己的工作站,能够在任何地方使用它,连接它,哪怕用来装X。。。
所以我刚好手上有台小型机,所以都搭建了群辉nas,除了做些存储之外,就是将其作为自己的云服务器来使用了,还有另一个原因就是后面内核编译和生成印象文件的资料都是在linux环境下生成,因此,有一个随时能访问的linux环境应该是学计算机的同学们都想要的吧。买!
这边我用自己的群辉拉起的一个小虚拟机,使用了centos7安装的,首先作为服务器,我没装GUI。。。第一个坑挖好了。。
首先分以下几个步骤:
第一步:安装centos
安装centos看似简单,但是工作站可能要用很久,所以自己分配空间和下载软件以及软件管理方面还是需要讲究一下的
我使用的centos-everything.iso包,总大小9g左右,工作站不用尽可能的精简,安装的时候需要的工具包可以提前装好
我这边先安排了500g的安装包,分区就自动分吧,默认的分区给大家看下:
我们发现如果我们一直使用root的用户目录/root,大小只有50g,分配的500g中有445g的空间在/home,所以后面工作站应该建立到home下,虽然用的是root账号,东西可以放/home下。
安装bochs
在我提供的资源里面官网给了rpm包和tar.gz包,其实我比较喜欢rpm,但是yum源没有apt-get中的bochs相关包,所以,rpm缺少了的依赖yum也不能帮你,这条路很难走,我放弃了,直接用make自己编译吧,由于bochs是c和c++写的,所以gcc和g++都要有首先,没有的话confgure也会告诉你。那么接下来需要的包用yum下载即可,我给大家提供一下:
yum install gtk2 gtk2-devel
yum install libXt libXt-devel
yum install libXpm libXpm-devel
yum install SDL SDL-devel
yum install libXrandr-devel.x86_64
yum install xorg-x11-server-devel
yum install gcc
yum install gcc-c++
接下来解压tar.gz包进入目录:
应该有一个可执行文件叫./configure,用make安装的第一步,就是检查依赖,如果按照上面的安装之后,执行./configure之后就会生成makefile文件,同样日志也会打印:
0.11的linux也是很多makefile文件,原理应该都差不多
然后执行make命令后,就会检查所有的makefile,准备安装,看似顺利,这边出现一个问题,编译错误:
…/iodev/harddrv.h:290:8: error: extra qualification ‘sparse_image_t::’ on member ‘get_physical_offset’ [-fpermissive]
sparse_image_t::
看样子出现一个多余宏定义,这个原因大家gcc版本不同可能会出现不同的情况:我的gcc 4.8.5如下
降版本不是明智的选择,如果报错很多,我觉得要么升软件,实在不行再降版本,因为可能会影响其他软件。
这里我发现两个小错误,就直接定位到头文件,进行了更改,看看能不能解决,既然多余的代码,使用vi定位到行号注释即可
然后执行:
make
make install
我的环境安装到这里就没有什么问题了,bochs安装成功
make install 安装命令
make uninstall 卸载命令
有了上述两种命令即可保证软件的安装和卸载可控,如果不可控,那么整个系统都会不可控。
安装成功后验证一下:
bochs不会出现command not found 即可
运行0.11的linux
先看一个目录结构,这里不需要改任何东西,
我使用自己的笔记本连接的ssh,执行了一下
bochs -q -f ./bochsrc-hd-new.bxrc
又报错了:对于初学者的我来讲,真的很难受,看又看不懂,学又学不会。。。
这个问题讲的是文件不能打开,很误导人,而不是找不到,或者路径语法错误,到最后我才尝试了一下更改路径写法。。。
改下文件:
vi bochsrc-hd-new.bxrc
将全局的反斜杠都改成正斜杠即可
ok,执行!
又报错了。。。啊。。妈妈。我不想学计算机了
[XGUI ] bochs: cannot connect to X server
索性再搜索一下吧,最后发现boch执行的时候会自动弹出一个ui弹窗,如果你的ssh nb,那么某些客户端会直接能够连接到X server(GUI服务),客户端有X client就能够直接看到centos的桌面,然后就能够调出bochs的ui。可惜我没安装GUI,而且终端还要装client插件。。。这样的话没办法达到我在任何一个机器上面都能够调试自己的工作站了,果断放弃。虽然有大神使用其他的软件做到远程ui,但是冷门的、或者需要客户端配置和安装插件的,都不符合我的目标,都放弃了。
最后无奈之下,使用vnc来显示我们的centos7ui界面吧。。。虽然ui不好用,但是确实达到了目标!
yum groupinstall “X Window System”
yum groupinstall “GNOME Desktop”
reboot 重启一下
有些安装了"Graphical Administration Tools",主要是一些文件管理器等等软件,但是对我来说只需要个ui服务能够跑bochs,其他工作都是以命令行形式运行即可。
安装完成之后,我们通过vnc方式访问我们的centos:
开启桌面模式,并运行桌面:
systemctl set-default multi-user.target 关闭桌面模式
systemctl set-default graphical.target 开启桌面模式
startx 开启桌面
再次执行命令:
bochs -q -f bochsrc-hd-new.bxrc
大功告成!vnc没有想象中的卡,不过是借助了ui运行了一下命令窗口,能接受吧。
声明
linux内核正在学习中,因此如果存在部分概念错误问题,欢迎评论区指出~我们共同学习进步!
相关文章:

【linux源码学习】【实验篇】使用bochs运行linux0.11系统(搭建一个自己的工作站)
目录 背景资源获取bochs环境搭建windowsbochs环境搭建linux声明 背景 最近看赵炯老师的《linux内核完全注释》,然后在最后一个习题里面看到使用bochs跑一下0.11的内核代码,本来觉得很难,但是如果做过一遍就会发现其实很简单,这个…...

java+springboot+mysql个人日记管理系统
项目介绍: 使用javaspringbootmysql开发的个人日记管理系统,系统包含超级管理员、管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理;反馈管理;系统公告;个人…...
旋转图像 LeetCode热题100
题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 思路 利用矩阵性质,先反转矩阵的每一列元素,再把…...

Vue3 element-plus表单嵌套表格实现动态表单验证
Vue3结合element-plus表单项可以动态添加/删除 部分效果图如下: 另表格有添加和删除按钮,点击提交进行表单验证。 首先data格式必须是对象包裹数组 import { ref, reactive } from vue; import { FormInstance } from element-plus const froms re…...

VSCode插件Todo Tree的使用
在VSCode中安装插件Todo Tree。按下快捷键ctrlshiftP,输入setting.jspn,选择相应的配置范围,我们选择的是用户配置 Open User Settings(JSON),将以下代码插入其中。 //todo-tree 标签配置从这里开始 标签兼容大小写字母(很好的功…...

无人驾驶实战-第五课(动态环境感知与3D检测算法)
激光雷达的分类: 机械式Lidar:TOF、N个独立激光单元、旋转产生360度视场 MEMS式Lidar:不旋转 激光雷达的输出是点云,点云数据特点: 简单:x y z i (i为信号强度) 稀疏:7%&…...
Tomcat 的内存配置
修改 Tomcat 的内存配置,你需要调整 Tomcat 的 Java 虚拟机(JVM)参数。具体来说,你需要修改 catalina.sh(Linux/macOS)或 catalina.bat(Windows)脚本中的 JAVA_OPTS 变量。以下是一般…...

pycharm出现python test运行报错(pytest模式)
pycharm出现python test运行报错 一、python test 执行代码报错二、删除运行配置三、修改pycharm默认配置为 unittests四、成功! 一、python test 执行代码报错 二、删除运行配置 三、修改pycharm默认配置为 unittests 四、成功!...
JavaScript篇 this指向
文章目录 1.this 关键字2.this实质3.使用场合3.1.全局环境3.2.构造函数3.3.对象的方法 4. 使用注意4.1.避免多层 this4.2.避免数组处理方法中的 this4.3.避免回调函数中的 this 5.绑定this5.1.Function.prototype.call()5.2.Function.prototype.apply()5.3.Function.prototype.…...

操作系统复习总结1
操作系统复习总结,仅供笔者复习使用,参考教材: 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为:计算机系统概述; 计算机系…...

Matlab中图的最短路径
前言: 图的基本概念: 若想简单绘制图可以利用此网站: 左上角Undirected/Directed是无向图/有向图 左边 0-index ,1-index为0下标,1下标。 Node Count为节点个数 Graph Data:最初尾节点的名称ÿ…...
没有jodatime,rust里怎么将字符串转为日期呢?
关注我,学习Rust不迷路!! 在 Rust 中,有多种方法可以在时间和字符串之间进行转换。以下是五种常见的方式: 1. 使用 chrono 库进行转换: use chrono::{NaiveDateTime, DateTime, Utc, TimeZone};fn main(…...
【Markdown入门及使用】
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
大数据面试题:HBase的读写缓存
面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 参考答案: HBase上RegionServer的cache主要分为两个部分:MemStore & BlockCache。 MemStore是写缓存,Block…...

springboot基于vue的高校迎新系统的设计与实现8jf9e
随着时代的发展,人们的生活方式得到巨大的改变,从而慢慢地产生了大量高校迎新信息,高校迎新信息需要一个现代化的管理系统,进行高校迎新信息的管理。 高校迎新系统的开发就是为了解决高校迎新管理的问题,系统开发是基于…...

JVM入门到精通
一、JVM概念 1.1、什么是JVM Java Virtual Machine:Java虚拟机,用来保证Java语言跨平台 Java虚拟机可以看做是一台抽象的计算机,如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域 Java虚拟机与Java语言并没有必然…...
Hive执行引擎的区别
执行引擎 Tez、Spark 和 MapReduce 都是用于在大数据处理中执行任务的框架或引擎,它们在性能、优化、适用场景等方面有一些区别。 MapReduce: MapReduce 是 Hadoop 最早引入的批处理计算模型,它将任务分成 Map 和 Reduce 两个阶段,…...
分布式 - 服务器Nginx:常见问题总结(二)
文章目录 01. Nginx 虚拟主机怎么配置?02. Nginx location 指令的作用?03. Nginx location 指令如何与其他指令一起使用?04. Nginx root 命令的作用?05. Nginx if 模块的作用?06. Nginx include 指令的作用?07. Nginx…...

【Paper Reading】CenterNet:Keypoint Triplets for Object Detection
背景 首先是借鉴Corner Net 表述了一下基于Anchor方法的不足: anchor的大小/比例需要人工来确认anchor并没有完全和gt的bbox对齐,不利于分类任务。 但是CornerNet也有自己的缺点 CornerNet 只预测了top-left和bottom-right 两个点,并没有…...
【BASH】回顾与知识点梳理(三)
【BASH】回顾与知识点梳理 三 三. 命令别名与历史命令3.1 命令别名设定: alias, unalias3.2 历史命令:history同一账号同时多次登入的 history 写入问题无法记录时间 该系列目录 --> 【BASH】回顾与知识点梳理(目录) 三. 命令…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...