Barrelfish研究——环境搭建
最近要在Barrelfish上做一些工作。这是一个众核操作系统。由苏黎世理工大学和微软研究院一起开发,目前处于研究阶段,还不成熟。这个系统未来对于分布式领域以及云计算领域可能会有很大的贡献。更多的信息请看官方网站。
现在搭建环境,主要参考 wiki.barrelfish.org。wiki中有一个详细的安装过程,但是过程中遇到了不少曲折,在此做简单记录:准备阶段:
首先从官网下载了最新版的(截至目前是release2012-11-03), 另外需要安装gcc, ghc, ghc-path,qemu。gcc应该大家都装着,官方说gcc-4.6也可以,但是我试过在启动阶段会遇到奇怪的问题。于是换到了gcc-4.5。为了稳定起见,建议安装gcc-4.5。
ghc最好是6.10.4版本,所以不能用Ubuntu中自带的高版本的ghc,最好从haskell的官网下载binary。
ghc-path也要自己安装,并且要安装与ghc对应版本的。从http://hackage.haskell.org/packages/archive/ghc-paths/0.1.0.5/ghc-paths-0.1.0.5.tar.gz下载安装包,安装方法为:
runhaskell Setup.hs configure --ghc
runhaskell Setup.hs build
runhaskell Setup.hs install
(参考http://www.haskell.org/ghc/docs/7.0.2/html/Cabal/builders.html)
至于qemu,建议下载0.14.0版本进行编译安装。到这里,基本的准备工作就以及完成了。
安装阶段:
这个过程与wiki说的基本一致。cd Barrelfish
mkdir build
cd build
../hake/hake.sh -s .. -a x86_32(生成Makefile)
make
make sim(执行qemu。看到一份ppt里面这一步用sudo, 其实不用,用了反而可能会有各种问题)
如果没有问题的话,这一步最后会进入一个类似bash的一个简单的shell程序中,名为fish。
运行程序:
跟着wiki继续走,跑hello world程序。hello world源码路径为 Barrelfish/usr/examples/xmpl-hello/,其中有一个hello.c是它的源码,还有一个Hakefile文件用来描述编译规则,另外还有一个menu.lst用来描述启动加载。给build/symbolic_targets.mk文件的MODULES_COMMON变量中,加一行:
/sbin/examples/xmpl-hello \
然后重复上面的两步
../hake/hake.sh -s .. -a x86_32(生成Makefile)
make
在build/menu.lst中加一行:
module /x86_32/sbin/examples/xmpl-hello(如果你忘记了内容,可以在usr/examples/xmpl-hello/menu.lst中找到)
接下来
make sim
开机就可以看到hello world打印的结果了。
也可以在fish中执行
./x86_32/sbin/examples/xmpl-hello
运行hello world
亦或者用oncore命令指定再某个核上执行
oncore 0 ./x86_32/sbin/examples/xmpl-hello
另一个例子是msg and rpc类似
类似hello world给build/symbolic_targets.mk文件的MODULES_COMMON变量中,加入:
sbin/examples/xmpl-rpc_rpc \
sbin/examples/xmpl-rpc_msg \
在build/menu.lst中加入:
module /x86_32/sbin/examples/xmpl-rpc_msg core=1 server
module /x86_32/sbin/examples/xmpl-rpc_msg core=0 client
module /x86_32/sbin/examples/xmpl-rpc_rpc core=1 server
module /x86_32/sbin/examples/xmpl-rpc_rpc core=0 client
编译,启动。
启动的时候,就会看到相应的结果了。当然,同样也可以在启动后,用oncore分别加载。