安装nachos3.4遇到的问题

victorique-de-blois victorique-de-blois     2023-04-11     318

关键词:

win10优先使用Vagrant+VirtualBox搭建环境,因为采用的是nachos集成开发镜像,所以遇到的基本上都是外部的安装问题。

我此前尝试过使用WSL(ubuntu-64bit)、VMware(ubuntu-32bit),都遇到了相当大的麻烦,而且耗费了很长时间也没搞定,结果花费了不到1/10的时间就搞定了Vagrant版本(绝大部分还都用在下载上了),故在此强烈推荐Vagrant版。

 

一、Vagrant版(视频教程:https://www.bilibili.com/video/av2929294/ 与本文叙述的步骤略微差异)

1.下载修改好的nachos源码及开发镜像:http://pan.baidu.com/s/1jGpO1me(密码:8oz1)

2.安装vagrant1.7.3,virtualbox4.3,vagrant和virtualbox之间的版本相互对应,不要将其中任何一方版本安装过高或者过低。

最好安装virtualbox4.3.12,如果安装成4.3.40版本,可能出现兼容性问题导致vagrant up失败:

==> default: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.
Command: ["startvm", "********", "--type", "headless"]
Stderr: VBoxManage.exe: error: The virtual machine ‘devdir_default_1584360377659_12426‘ has terminated unexpectedly during startup with exit code 1 (0x1).  More details may be available in ‘...VBoxHardening.log‘

试图用virtualbox直接打开的话会显示:

The virtual machine ‘Master‘ has terminated unexpectedly during startup with exit code 1 (0x1). More details may be available in ‘C:Users***VirtualBox VMsdevdir_default_1584360377659_12426LogsVBoxHardening.log‘.
    返回 代码: E_FAIL (0x80004005)
    组件: MachineWrap
    界面: IMachine f30138d4-e5ea-4b3a-8858-a059de4c93fd

3.安装Git,保守一点安装Git-2.5.2.2-64-bit。

安装时,在界面“Adjusting Your environment PATH"勾选最下面一项:

Use Git and optional Unix tools from the Windows Command Prompt

之所以不像视频里那样勾选第一、第二项,是因为我在选择第一、第二项后,如果只添加环境变量PATH$“C:Program FilesGitusrin”,发现vagrant ssh依然无法正常运行,提示我安装Git,而且连"ls"这种指令也无法使用(由此感受到了来自个人电脑深深的恶意)。其实这里就相当于多添加了“C:Program FilesGitmingw64in”。

4.修改/QLWH/devdir/.vagrant/machines/default/virtualbox/creator_uid,从501变为0,501是mac默认,0是windows默认。

5.在devdir目录下先后运行指令vagrant up和vagrant ssh,成功后进入Linux环境,并显示版本号等相关信息。

6.顺利执行以下指令(可能还需要install gcc,g++,make)

  1. cd /vagrant/nachos/nachos-3.4/code
  2. make
  3. cd threads
  4. ./nachos

 

 

------------------------分割线------------------------

以下为未整理内容,全是坑,中途崩溃若干次:

安装gcc-3.4(i386)缺少依赖:binutils (>= 2.16.1-2ubuntu3)

安装低版本binutils,如:binutils_2.18-0ubuntu3_i386.deb,error:libc6-dev:amd64 (2.23-0ubuntu11) breaks binutils (<< 2.20.1-1) and is installed.

安装高版本binutils,如:binutils_2.25.1-6ubuntu2_i386.deb,error: binutils:i386 depends on zlib1g (>= 1:1.2.0)

安装zlib1g:i386

加载动态库libz.so.1出现ELFCLASS32问题  #64位系统不能使用32位的库

用ldd命令查询执行程序

删除zlib1g

缺少动态库libz.so.1

网络解决方案1:使用apt-get指令  #然而此时dpkg和apt-get等指令均失效

网络解决方案2:安装共享库

(1)/lib或/usr/lib目录下,在/etc/ld.so.conf中加路径

(2)非/lib或/usr/lib目录下,export一个全局变量LD_LIBRARY_PATH

 

zlib-1.2.3为测试版,没有libz.so.1库

查看动态库链接,一般动态库都在这里

ls /usr/lib

ls /usr/local/lib

 

结果根本就都不顶用好吗???百度给的结果属实垃圾,google了一下libz.so.1,第一条即为正解:

1.访问packages.ubuntu.com(这个网站比墙内的镜像好使多了)

2.搜索包内容(contents):libz.so.1

3.下载zlib1g_1.2.8.dfsg-1ubuntu3.deb

4.由于无法使用dpkg或者apt-get安装,通过第三方软件(如好压)直接解压deb文件,得到data.tar.xz,继续解压

5.通过cp命令复制libz.so.1.2.11到/usr/lib或者/usr/local/lib(libz.so.1为动态库链接,libz.so.1.2.11才是动态库)

6.$ls /usr/local/lib可以看到绿色的libz.so.1.2.11,接着$sudo ldconfig,再$ls /usr/local/lib,可以看到新生成的青色的libz.so.1,至此大功告成

 

wtm,zlib1g:amd64对binutils:i386不管用,安装不了binutils:i386,也就安装不了gcc-3.4,zlib1g:i386就报ELFCLASS32问题

 

2011年的CSDN文章,默认32位操作系统,64位操作系统不可能安装gcc-3.4:i386

 

emm,最后切换版本的时候还遇到个小问题,自带的gcc-5.6修改优先度时路径错误,于是只调整了gcc-3.6的优先度为100

 

nb,最后放弃了,装了VMware,还专门挑了个低版本的32位的ubuntu(12.04),结果就因为这个版本问题在后面又为此忙活了半天

装个ubuntu装了一晚上没装好,然后才知道可以跳过语言包

ubuntu12.04自带的gcc版本是4.6,好嘛之前有经验了速度装了3.4,没出什么问题

尝试make了一下,出现一堆no such file or directory,诸如:

bits/types.h:No such file or directory

bits/stdio_lim.h:No such file or directory

bits/sys_errlist.h:No such file or directory

gnu/stubs.h:No such file or directory

gnu/stubs-32.h:No such file or directory

查阅了一下资料,说是需要apt-get install gcc-multilib安装32位的共享库

但问题是上面指令会安装一大堆64位的包,这让我犹豫起来,32位系统还能装64位的包?

又搜了一下,似乎也可以直接装需要的32位的包

看到一篇文章:https://blog.csdn.net/yanbixing123/article/details/52300900

ia32-libs,或者lib32z1、lib32ncurses5、lib32bz2-1.0,可惜这4个包都提示虽然被引用,但已经被废弃

https://www.cnblogs.com/jikexianfeng/articles/5654571.html这篇文章提到了两种方法,

其一是安装g++-multilib,其二是添加源sudo add-apt-repository ppa:ubuntu-x-swat/x-updates,我尝试了一下方法二,抓取链接似乎失效或者被墙了

说到源,也是个坑,之前安装各种包的速度实在不敢恭维,被迫换了好几个国内的源,电子科大的和163的都不行,最后选了阿里云。

修改操作是(需要root权限):

gedit /etc/apt/sources.list

然后将其中全部内容用阿里云的源替换。

结果搞来搞去还是没有搞定,有的说要安装libc6-dev,但安装后依然没有解决问题,直到又看到了一篇英文文章:

http://www.it1352.com/783760.html

提问者遇到了与我一样的问题,他是ubuntu11.04安装nachos,遇到了gnu/stubs.h:No such file or directory

粗略地扫了一眼,On Ubuntu it‘s called libc6-dev-i386 - do sudo apt-get install libc6-dev-i386. See below for extra instructions for Ubuntu 12.04.

后半段话我最开始并没有在意,dpkg -l libc6-dev发现libc6-dev已经被安装过了,不过我当时的指令是apt-get install libc6-dev,而不是apt-get install libc6-dev:i386。这让我不禁但尤起是否会和gcc-multilib一样安装上amd64版本的,但转念一想,现在是32位系统,根本无法运行64位的包,自动安装总至于给自己找麻烦吧。

问题绕了半天还是没有解决,这时候却又看到另一篇有意思的提问:https://stackoverflow.com/questions/12591629/gcc-cannot-find-bits-predefs-h-on-i686

这名提问者同样遇到了bits/types:No such files or directory,他从64位的ubuntu12.04切换到32位环境,经过查阅发现还是需要安装gcc-multilib,因为Debian使用mutiarch系统分离了库,但他不能理解为什么他正在使用i686(32位),却需要安装64位的库。

下面的回答者依然建议他安装gcc-multilib,因为他认为安装32位系统不会改变计算机的体系结构,使用者的计算机将永远是64位计算机。安装64位版本的ubuntu应该只能提供更好的多核性能。由于计算机仍然是64位计算机,因此可能需要C编译器,该编译器将在64位计算机上进行编译。

(嗯,说的不错,那么虚拟机和这是大同小异吗?……我打算未来花点时间总结一下)

下面的评论也很有趣:

从32位到64位的主要变化是系统可以使用多少内存,而不是多处理。32位系统支持约2GB的内存,而64位系统最多可以支持16艾字节(尽管从技术上讲,64位Intel和AMD计算机仅寻址48位,最大256 TB,这仍然足够。 。 目前)。——Dan Albert

@DanAlbert:32位系统支持基于内核内定义的PAGE_OFFSET宏值的VM模型(仅可在内核构建时配置(通常通过CONFIG_VM_SPLIT))。Linux上32位系统的典型默认设置是“ 3:1” VM拆分,这意味着3GB用户模式虚拟内存和1GB内核模式VM。可能是2:2,可能是1:3。——kaiwan

还有人提到这并不是一个32、64bit的问题。

暂不做进一步讨论,无论如何,在我尝试安装了gcc-multilib和g++-multilib后,发现居然解决了……一半的问题。

只剩下一种no such file or directory,出在gnu/stubs-32.h上。

另一篇文章(https://blog.csdn.net/meilinghu/article/details/52855046)又启发了我一下:既然提示缺少文件,那为何不去该目录下看一下呢?

果然,我在/usr/include/gnu下没有找到stubs-32.h,却在/usr/include/i386-linux-gnu/gnu下找到了stubs-32.h

我回过头又翻到之前粗略扫过的英文文章,注意到ubuntu12.04需要进行额外操作:

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)

export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

我不太理解这里的gcc -print-multiarch是什么意思,根据回答中叙述“a known problem that put files in a non standard location”,基本确定就是我遇到的问题——将文件放在了不标准的位置。

上面的链接是国内转载帖,这句话的超链接内容似乎也被替换过,而且还失效了。然后又花了点时间找到这个“known problem”:https://gcc.gnu.org/ml/gcc/2012-02/msg00314.html

实际操作应该是:

export LIBRARY_PATH=/usr/lib/i386-linux-gnu/

export C_INCLUDE_PATH=/usr/include/i386-linux-gnu

export CPLUS_INCLUDE_PATH=/usr/include/i386-linux-gnu

ok,问题解决,下一个处理stdarg.h,很轻松

然后是sysdep.cc的重复定义函数和强制转换问题,注释了全部矛盾函数,并添加了头文件,提示void exit(int exitCode)未声明,这和2011年那篇文章就不一样。

嗯,两种方法暂时先跳过这个问题,①#include <unistd.h>里有void _exit(int)函数,修改EXIT()中关于exit(int)的调用为_exit(int);②添加声明void exit(int exitCode)。实在没理解文章里要注释掉void exit(int exitCode)是闹那样,本来就没有这个函数呀。

不知道是不是某次采用了①的缘故,结束后发现ubuntu系统进不去了,记得百度后的结果是“趁早重装”,呵呵

强制转换有两个error,ReadFromSocket和SendToSocket,其他的都是些warning,记得有一个是format ‘%x’ expects type ‘unsigned int’, but argument 2 has type ‘int *’,实在是太多,百度起来一个个解决也费劲。

然后是switch.s,这里提示我#endif XXXX是错误的,必须用#endif,也不知是哪门子版本的gcc,然后是修改HOST_i386块的_Threadroot和_SWITCH为Threadroot和SWITCH

到此,还以为总算结束了,结果砰的一下warning和error刷屏了,全是没见过的问题……

问了几个人说是应该是gcc版本的问题,好的

此后又尝试了14.04,重复上面的步骤,没安装gcc3.4,用的默认版本,搞完switch.s后提示我有几个.o文件出错,错误是Threadroot和SWITCH未定义,完全懵圈,因为这些不都是在switch.s中解决了的吗?好的已经彻底解决不了了,我认栽

对,VMware这里也有一些小问题,除了一定要换源外,还有apt-get remove vim-common,apt-get install vim。

为了使用共享文件夹和复制粘贴方便,还需要安装VMware Tools,有几次明明安装VMware Tools成功后却依然无法在主机和虚拟机之间复制粘贴,而且VMware Tools光碟有时候加载的巨慢,莫名其妙!

安装相互依赖包的方法:sudo dpkg -i a.deb b.deb c.deb

hcl安装遇到的问题

安装后无法启动。 查看详情

安装vmwareworkstation遇到的两个问题:安装过程中的dll问题和安装后打开需要的管理权限问题

1、安装过程中遇到MicrosoftruntimeDLL安装程序未能完成安装的问题?在遇到这个问题时不要点击确定,需要在开始菜单中输入%temp%,然后跳转到一个文件夹里,找到后缀为setup的文件夹(一般是第一个文件夹),然后双击打开找到vm... 查看详情

wepack安装遇到的问题

 这是我在安装的时候遇到的问题,最后的解决办法是用了npmcacheclear,查阅网上的资料,其中需要注意的是自己的文件夹不能跟安装包同名,第二还有类似报错的是由于权限不够,要在管理员的权限下运行。  查看详情

sqlserver安装遇到的问题

开始安装都没有问题,然后我中途取消了一下,它提示我缺少sqlsupport.msi文件,求解啊参考技术A删除已安装组件,清理电脑注册表,重启电脑,重新安装 查看详情

visualstudio2015community安装过程中遇到问题的终极解决

去年就有给自己电脑升级VS的想法,可是安装过程并不顺利,一直拖到现在,昨天下定决心,把遇到的问题一个个解决,终于安装成功了,将安装过程中遇到的问题和解决方法记录一下。需要说明一下的是,不同的电脑环境可能... 查看详情

安装zeromq遇到的问题

安装zeromq-3.2.5./configureyuminstallgcc-c++本文出自“我是程序我最大”博客,请务必保留此出处http://skinglzw.blog.51cto.com/10729606/1850768 查看详情

centos安装遇到的问题

...设置couldn‘tresolvehost‘mirrorlist.centos.org问题解决在VBox上安装完CentOS6之后,首次使用时yum命令安装软件时,经常遇到”couldn‘tresolvehost‘mirrorlist.centos.org”这个问题,上网上查了半天,很多都说在/etc/resolv.conf文件末尾添加nameserve... 查看详情

sccm2016安装过程中遇到的那些问题

【推荐】SCCM2016+SQL2016+Server2012R2安装教程一、安装过程中遇到的问题在安装sql的过程中,提示需要安装KB2919355,但无论是下载补丁包手动安装还是自动更新安装均无法正常安装,提示0x8007000d错误。最后通过对比MD5,发现网络问题... 查看详情

编译安装zabbix服务端时遇到的问题

    前面在编译安装zabbix时,遇到了不少的问题,通过百度已经解决了,问题如下在编译时遇到的问题:问题一:configure:error:unixODBClibrarynotfound解决方法:yuminstallunixODBC-devel-y问题二:configure:error:InvalidNet-SNMPdirectory... 查看详情

docker安装中遇到的问题

错误一提示:SegmentationFaultorCriticalErrorencountered.Dumpingcoreandaborting.Aborted解答:安装错误安装docker了,应该安装docker-io 错误二提示:TransactionCheckError: file/usr/bin/dockerfrominstallofdocker-io-1.7.1-2. 查看详情

windows2003的安装以及安装时遇到的问题

windows2003的安装以及安装时遇到的问题简介:WindowsServer2003是微软于2003年3月28日发布的基于WindowsXP/NT5.1开发的服务器操作系统,并在同年4月底上市。WindowsServer2003的官方支持即已在2015年7月14日结束,WindowsServer2003的安全性不再获... 查看详情

安装hcl时遇到的问题

HCL安装完成后启动成功,创建设备报错,提示:”创建设备失败”HCL安装完成后启动HCL成功,但是启动设备报错,提示:“设备启动失败”如果之前安装过HCL,又删除了,再次安装提示请先卸载已安装的版本再安装此版本!HCL安... 查看详情

随笔安装code::blocks遇到的问题

在安装Code::Blocks的时候,遇到cantfindcompilerexecutableinyourconfiguredsearchpathsforGNUGCCCompiler的时候,解决的方法有两个:1.去Code::Blocks的官网去安装包含编译器的version  2.如果安装的是带有编译器的版本,但是还是不行就需要我们去菜... 查看详情

vue.js开发环境搭建(安装过程遇到的问题)

    网络上关于Vue.js的安装过程有很多介绍,这里不多赘述,这里只是记录自己安装过程和遇到的问题   1首先安装node.js 到官网下载node.js安装包,安装过程和一般软件没有区别。安装完成后到终端查... 查看详情

genymotion安装及遇到的问题

...n.com/首先注册,不注册看不到下载按钮。注册登陆后下载安装包(一定要记住用户名和密码,因为安装后登陆要用)一路下一步。 选择虚拟设备genymotion无法启动的问题,VirtualBoxcannotstartthevirtualdevice 解决办法:  查看详情

sass的安装及遇到的问题

安装sass:  首先sass是基于ruby语言编写的,要先下载ruby, 之后再安装,安装完毕后,在开始菜单中,找到刚才我们安装的ruby,打开StartCommandPromptwithRuby输入下面的然后回车 呵呵,在这里我的出现了以下错误 &nbs... 查看详情

同时安装不同版本jdk遇到的问题

安装JDK1.8出现Erroropeningregistrykey‘softwareJavasoftJavaRuntimeEnvironment‘  java安装1.8后的问题:之前安装了jdk1.7和jdk1.6,之后又安装jdk1.8,然后执行java-version,打印错误信息:如下Error:Registrykey‘SoftwareJavaSoftJavaRuntimeEnvir 查看详情

安装zabbix时遇到的一个问题

安装zabbix2.0.3,到最后阶段,遇到一个问题:PHPbcmathextensionmissing,   phpconfigurationparameter--enable-bcmath 解决方法:yuminstall*bcmath*--skip-broken 然后在/etc/php.ini文件里,添加:  extension=bcmath. 查看详情