【linux源码学习】【实验篇】使用bochs运行linux0.11系统(搭建一个自己的工作站)

news2024/10/7 6:37:55

目录

  • 背景
  • 资源获取
  • 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内核正在学习中,因此如果存在部分概念错误问题,欢迎评论区指出~我们共同学习进步!

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

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

相关文章

ld加上-static -lc参数报错`ld: cannot find -lc`处理方法

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810,uname -r看到内核版本是3.10.0-957.el7.x86_64,as --version看到as的版本是2.27-34.base.el7,ld --version看到ld的版本是2.27-34.base.el7。 absCallWithStart.s里边…

Crescent QuickPak Crack

Crescent QuickPak Crack Crescent QuickPak是一个32位ActiveX组件的综合集合,用于使用Visual Basic开发应用程序,这将减少开发时间并提高生产力。Crescent QuickPak包含Internet功能,用于打开、读取和解析IIS日志文件,将日志文件…

Spring Boot如何整合mybatis

文章目录 1. 相关配置和代码2. 整合原理2.1 springboot自动配置2.2 MybatisAutoConfiguration2.3 debug过程2.3.1 AutoConfiguredMapperScannerRegistrar2.3.2 MapperScannerConfigurer2.3.4 创建MapperFactoryBean2.3.5 创建MybatisAutoConfiguration2.3.6 创建sqlSessionFact…

无涯教程-Perl - if...elsif...else语句函数

if 语句后可以跟可选的 elsif ... else 语句,这对于使用单个if ... elsif语句测试各种条件非常有用。 if...elsif...else - 语法 Perl编程语言中的 if ... elsif...else语句的语法是- if(boolean_expression 1) {# Executes when the boolean expression 1 is tr…

自然语言处理文本分割[Text segmentation]:PoNet算法使用多粒度Pooling结构替代attention的网络

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…

基于react-native的简单消息确认框showModel

基于react-native的简单消息确认框showModel 效果示例图组件代码ShowModel/index.jsx使用案例device.js安装线性渐变色 效果示例图 组件代码ShowModel/index.jsx import React, {forwardRef, useImperativeHandle, useState} from react; import {View,Text,Modal,TouchableOp…

恒盛策略:15亿成立地产公司?华为紧急回应!10倍大牛股闪崩

今天上午A股商场和港股整体低位震动,但走势整体平稳,动摇不大。 A股商场方面,TMT赛道股走强,近期火热的券商板块则现分解,昨夜发布半年报的公司今天上午股价也分解明显。 港股商场,大都股票动摇不大&#…

【数据结构入门指南】单链表

概述: 由于顺序表插入和删除元素需要移动大量数据,导致运行效率下降。因此引入了另一种数据结构 —— 链表。链表又分为单链表和双链表。单链表结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、…

Windows下安装Scala(以Scala 2.11.12为例)

Windows下安装Scala(以Scala 2.11.12为例) 一、Scala2.11.12官网下载二、Scala2.11.12网盘下载三、Scala各版本下载地址四、Scala安装4.1、点击 scala-2.11.12.msi 文件安装4.2、设置环境变量 %SCALA_HOME%4.3、环境变量Path添加条目%SCALA_HOME%\bin 四…

安卓读取,添加,更新,删除联系人,读取短信

目录 读取联系人 添加联系人 更新联系人 删除联系人 读取短信 读取联系人 安卓可以通过contentResolver来读取联系人表,联系人表的Uri信息是:content://com.android.contacts/data/phones 从而输出联系人信息, 需要相关权限&#xff1a…

如何选择最适合您的Excel处理库?

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 引言 GcExcel和POI是两个应用于处理Excel文件的技术库。为了帮助开发者更好地了解它们…

Wisej.NET Crack,Wisej.NET的核心功能

Wisej.NET Crack,Wisej.NET的核心功能 Wisej.NET是一个跨平台的web框架,用于使用.NET和C#/VB.NET而不是HTML和JavaScript构建现代HTML5应用程序。它包含创建任务关键型web应用程序所需的一切,包括UI组件、会话处理、状态管理和后端集成。借助…

【C语言学习——————预处理3000字讲解】

欢迎阅读新一期的c语言学习模块————预处理 ✒️个人主页:-_Joker_- 🏷️专栏:C语言 📜代码仓库:c_code 🌹🌹欢迎大佬们的阅读和三连关注,顺着评论回访🌹&#x1f339…

运动耳机哪个最好、顶级运动耳机推荐

拥有一款出色的运动耳机,是每个运动爱好者追求完美体验的必备选择。今天,我为大家推荐五款顶级运动耳机,它们不仅将音乐和运动完美结合,还具备出色的防水性能、舒适的佩戴感和激动人心的音质表现,让你在运动中尽情释放…

人到中年不得已,保温杯里泡枸杞--送程序员

目录 一:你现在身体的体能状况如何?你有身体焦虑吗? 二:如何保持规律性运动? 三:你有哪些健康生活的好习惯? 大厂裁员,称35岁以后体能下滑,无法继续高效率地完成工作&…

阿里云官方关于数据安全保护的声明

“阿里云监控用户的数据流量?”“真的假的?”随着近日早晨 朱峰肥鹅旅行 对阿里云的一条朋友圈截图传遍了整个IT圈。 对于网络上的各种传播,以下是阿里云的官方答复,原文如下: 关于数据安全保护的声明 今天有客户反映…

Django实现音乐网站 ⑺

使用Python Django框架制作一个音乐网站, 本篇主要是后台对歌手原有实现功能的基础上进行优化处理。 目录 新增编辑 表字段名称修改 隐藏单曲、专辑数 姓名首字母 安装xpinyin 获取姓名首字母 重写保存方法 列表显示 图片显示处理 引入函数 路径改为显示…

P1156 垃圾陷阱(背包变形)

垃圾陷阱 题目描述 卡门――农夫约翰极其珍视的一条 Holsteins 奶牛――已经落了到 “垃圾井” 中。“垃圾井” 是农夫们扔垃圾的地方,它的深度为 D D D( 2 ≤ D ≤ 100 2 \le D \le 100 2≤D≤100)英尺。 卡门想把垃圾堆起来&#xff0c…

星辰天合成功入选“2023 中国大数据企业 50 强”

8 月 3 日,大数据与数字经济大会暨 2023(第八届)大数据产业生态大会在京圆满举办。论坛期间,隆重揭晓了 2023 中国数据英雄、2023 中国大数据企业 50 强等奖项,星辰天合凭借在数据基础设施领域的领先技术优势&#xff…

Java的抽象类不能被实例化

Java的抽象类不能被实例化。如果试图实例化,会编译报错。 示例: 定义一个抽象类: package com.thb;public abstract class AbstractPoint {public AbstractPoint() {} }再定义一个主类: package com.thb;public class Test4 {p…