【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.hqwc.cn/news/54684.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

No112.精选前端面试题,享受每天的挑战和学习

文章目录 说一说JavaScript有几种方法判断变量的类型?说一说defer和async区别?HTTP(超文本传输协议)是什么?说一下浏览器输入URL发生了什么?一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青…

学python的心得体会1000字,学python的心得体会2000字

这篇文章主要介绍了学python的心得体会2000字,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 1. 初学者应该从简单的练习开始,先掌握基本的语法和概念,…

如何用python做自然语言处理

如何用python做自然语言处理 使用Python进行自然语言处理(NLP)是非常常见和强大的。以下是一些基本步骤: 安装所需的库: 首先,您需要安装一些用于自然语言处理的Python库,如NLTK(自然语言工具包…

html,css日常记录

动态绑定class,当index3!0时,class的值为bdt :class"{bdt:index3!0}" 动态绑定style中的height和lineheight,其中,height的值为函数px(item.length)的返回值,函数名可以随意取。 :style"{height:px(…

规划路线(微信小程序、H5)

//地图getLocationDian(e1, e2) {console.log(e1, e2);let self this;self.xx1 [];self.xx2 [];self.points [];// self.markers[]console.log(self.markers, >marks);// self.$jsonp(url, data).then(re > {// var coors re.result.routes[0].polyline;// for (v…

05|Oracle学习(UNIQUE约束)

1. UNIQUE约束介绍 也叫:唯一键约束,用于限定数据表中字段值的唯一性。 1.1 UNIQUE和primary key区别: 主键/联合主键每张表中只有一个。UNIQUE约束可以在一张表中,多个字段中存在。例如:学生的电话、身份证号都是…

数据结构:双向链表的实现(C实现)

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》 文章目录 前言 一、实现思路1.节点的结构(ListNode)2.新节点的创建(BuyListNode)3.头结点的创建(ListCreate)4.双向链表的销毁(ListDestroy)5.双向链表的打印(ListPrint)6.双向链表的尾插(ListPu…

面试热题(打家窃舍)

一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负…

windows 同时安装 Mysql 5.7 和8.0

下载链接 https://dev.mysql.com/downloads/mysql/ 推荐下载 MSI,可以通过图像化界面配置 8.1 版本 安装5.7 系统安装两个MySQL 怎么访问 都是mysql,所以环境变量 配置,只能一个生效,生效就是谁靠前谁生效 cmd 录入 services.m…

[Linux]理解文件系统!动静态库详细制作使用!(缓冲区、inode、软硬链接、动静态库)

hello,大家好,这里是bang___bang_,今天来谈谈的文件系统知识,包含有缓冲区、inode、软硬链接、动静态库。本篇旨在分享记录知识,如有需要,希望能有所帮助。 目录 1️⃣缓冲区 🍙缓冲区的意义 …

【框架篇】Spring MVC 介绍及使用(详细教程)

Spring MVC 介绍 1,MVC 设计模式 MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑分离成三个独立的组件: 模型(Model):模型是应用程序的数据和业务逻辑…

wolfSSL5.6.3 虚拟机ubuntu下编译运行记录(踩坑填坑)

网上相关教程很多(包括wolfSSL提供的手册上也是如此大而化之的描述),大多类似如下步骤: ./configure //如果有特殊的要求的话可以在后面接上对应的语句,比如安装目录、打开或关闭哪些功能等等 make make install 然后结束,大体…