Nachos 3.4 安装教程

来源:互联网 发布:软件开发书籍 编辑:程序博客网 时间:2024/04/29 20:31

Nachos 3.4安装过程日志

 

环境

       OS Ubuntu 10.04.2

       Editor gedit

       Nachos3.4

       GCC(G++)3.4.6

 

安装过程

 1      手动安装低版本的GCCG++

可能由于Nachos 3.4版本的代码太老的原因,编译Nachos需要GCC的版本要小于4.0。通过

$ gcc -v

指令查看Ubuntu自带的GCC版本,如果高于4.0则需要安装低版本的GCC(Ubuntu 10.04.2GCC的版本是4.4.3)

 1.1              下载GCCG++3.4.6

UbuntuSoftware Center apt-get中都找不到低于4.0GCC版本,因此需要手动下载安装,这里推荐使用北京交通大学的镜像下载,国外的镜像速度实在是太不给力了。

网址:http://mirror.bjtu.edu.cn/ubuntu/pool/main/g/gcc-3.4/

我选择的GCC版本是3.4.6,依次下载以下7个文件:

libg2c0-dev_3.4.6-1ubuntu2_i386.deb

cpp-3.4_3.4.6-1ubuntu2_i386.deb

g77-3.4_3.4.6-1ubuntu2_i386.deb

gcc-3.4-base_3.4.6-1ubuntu2_i386.deb

gcc-3.4_3.4.6-1ubuntu2_i386.deb

g++-3.4_3.4.6-1ubuntu2_i386.deb

libstdc++6-dbg_3.4.6-1ubuntu2_i386.deb

 1.2              安装GCCG++

上述文件的安装是有顺序的,具体数序我也记不清楚。不过不用担心,双击运行gcc-3.4_3.4.6-1ubuntu2_i386.debUbuntu会自动使用deb package installer安装,installer会检查包依赖,不出意外的话会出现依赖缺失的错误,看清楚缺失是哪个包实现安装就OK了(不会超出上面下载的7个文件)。

这里有个搞笑的问题,g++-3.4_3.4.6-1ubuntu2_i386.deblibstdc++6-dbg_3.4.6-1ubuntu2_i386.deb是相互依赖的。囧。没关系,运行命令

$ sudo kpkg g++-3.4_3.4.6-1ubuntu2_i386.deblibstdc++6-dbg_3.4.6-1ubuntu2_i386.deb

OK了。

 1.3              检查GCCG++)是否安装成功

运行命令

$ g++-3.4

$ gcc-3.4

如果提示no input files就说明安装成功了。可以进行下一步了。

 2      安装make工具

如果系统中没有安装make工具,运行命令

$ sudo apt-getinstall make

稍等片刻就安装好了,由于Nachos中使用的命令是gmake,因此在make的时候会出现找不到gmake的错误提示,这里把二者link一下,运行指令

$ sudo ln/usr/bin/make /usr/bin/gmake

 3      解压缩Nachos 3.4

nachos 3.4 解压缩到/usr/local/lib/nachos-3.4中。大概会有三个目录c++examplecodedoc,安装过程只需要关注code目录即可。

 4      修改 Nachos 3.4准备安装

 4.1              修改Makefile.dep文件,我的机器是i386平台,因此将HOST = -DHOST_MIPS这行代码注释掉。同时取消386平台后的两行代码的注释:

HOST =-DHOST_i386

CPP=/usr/bin/cpp

 4.2              修改Makefile.common文件,修改默认使用的编译器为GCCG++3.4。找到并修改下述代码

CC = g++-3.4

LD = g++-3.4

 4.3              修改code/threads/utility.h文件,注释掉代码#include <bool.h>,同时添加两条预编译代码:

#define TRUE true

#define FALSEfalse

否则会出现找不到bool.h的错误,这是由于Nachos自己定义来bool变量却又不给我们头文件,!囧,我们完全可以使用标准的bool变量代替。

 4.4              修改threads/utility.cc文件,注释掉以下代码

//#ifdefHOST_SNAKE

//#include<stdarg.h>

//#else

//#ifdefHOST_SPARC

//#include<stdarg.h>

//#else

//#include"/usr/include/stdarg.h"

//#endif

//#endif

同时添加一行包含头文件的代码,#include <stdarg.h>否则会出现找不到stdarg.h的错误,通过上面的预编译代码可以看出问题所在。

 4.5              修改threads/switch.s文件,这个文件中有四个预定义的块。以

#ifdef XXXX开始,#endif结束,注释掉除HOST_i386之外的三个块。修改HOST_i386块,修改.globl  _ThreadRoot .globl ThreadRoot,SWITCH,相对应的也要把下面的两个procesure名字前的_删掉。

 4.6              修改machine/sysdep.cc文件,这个文件需要修改的地方非常多,有些地方可能会忘记记录在这里或者有不同的错误发生,只要根据错误提示找到对应的代码进行修改即可。大部分的错误是函数定义出突和强制类型转化的问题。这里记录一部分。

增加两行头文件包含代码

#include <unistd.h>

#include <errno.h>

注释掉以下的所有的函数,,这些函数与unistd.h中的函数定义冲突:

int creat()

int open()

void signal()

int unlock()

int read()

int write()

int write()

int lseek()

int unlink()

extern int recvfrom()

extern int sendto()

void exit()

void exit(exitCode)

int mprotect()

int bind()

int revcfrom()

int sendto()

强制类型转换:

ReadFromSocket函数中

retVal = recvfrom(sockID, buffer,packetSize, 0, (struct sockaddr *) &uName, (socklen_t *)&size);

SendToSocket函数中

retVal = sendto(sockID, buffer, packetSize,0,  (const sockaddr* ) &uName, sizeof(uName));

 5      make Nachos 3.4

cdcode目录,执行命令:

$ sudo make

如果没有错误提示的话,Nachos 3.4 就编译成功了。编译成功后会在vm目录内生成一个nachos可执行文件,运行之可以看到很多BacktraceMemory map的信息。

 6      交叉编译(待续)

参考文献

http://hi.baidu.com/ruxbin/blog/item/fc923982d6454396f603a6b5.html

http://forum.ubuntu.org.cn/viewtopic.php?f=70&t=117289

http://blog.csdn.net/yang_0723sf/archive/2005/08/25/464754.aspx