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

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

http://www.lryc.cn/news/111692.html

相关文章:

  • java+springboot+mysql个人日记管理系统
  • 旋转图像 LeetCode热题100
  • Vue3 element-plus表单嵌套表格实现动态表单验证
  • VSCode插件Todo Tree的使用
  • 无人驾驶实战-第五课(动态环境感知与3D检测算法)
  • Tomcat 的内存配置
  • pycharm出现python test运行报错(pytest模式)
  • JavaScript篇 this指向
  • 操作系统复习总结1
  • Matlab中图的最短路径
  • 没有jodatime,rust里怎么将字符串转为日期呢?
  • 【Markdown入门及使用】
  • 大数据面试题:HBase的读写缓存
  • springboot基于vue的高校迎新系统的设计与实现8jf9e
  • JVM入门到精通
  • Hive执行引擎的区别
  • 分布式 - 服务器Nginx:常见问题总结(二)
  • 【Paper Reading】CenterNet:Keypoint Triplets for Object Detection
  • 【BASH】回顾与知识点梳理(三)
  • C#设计模式之---单例模式
  • Git工具安装
  • 深度学习——注意力机制、自注意力机制
  • STM32入门学习之定时器中断
  • 基本数据类型与包装数据类型的使用标准
  • 小研究 - 基于 SpringBoot 微服务架构下前后端分离的 MVVM 模型(二)
  • ArmSoM-W3之RK3588安装Qt+opencv+采集摄像头画面
  • 基于长短期神经网络的风速预测,基于LSTM的风速预测
  • Mybatis引出的一系列问题-spring多数据源配置
  • Vue-组件二次封装
  • [C++]02.选择结构与循环结构