一. 安装环境
服务器:x86, intel四核
操作系统:RHEL4.1.1
GCC:4.1.1
Hostname: localhost.localdomain
Usr: root
GEMS: Gems-2.1
SIMICS: simics- 3.0.31
辅助软件:FlEXlm11.6.1.0
参考: GEMS_Ubuntu.pdf
二. 安装SIMICS_3.0 + GEMS_2.1
1. 安装FLEXlm
申请simics注册码时,会有FLEXlm的下载链接.选择符合自己安装环境的那款.
解压并安装:
tar –zxvf lmgrd_i86_re3.tar.gz
tar –zxvf lmutil-i86_re3.tar.gz
./lmadmin-i86_re3-11_1_0.bin
获取lmhostid: ./lmutil lmhostid
2. 设置环境变量
vim ./root/.bash_profile
添加如下字段:
export GEMS=/root/gems
export SIMICS_INSTALL=$GEMS/simics-3.0.31
export SIMICS_EXTRA_LIB=./modules
export PYTHONPATH=./modules
退出vim后reboot
3. SIMICS安装
a) 在/root目录创建gems文件夹
mkdir gems
cd gems
tar xvf simics_path/simics-pkg-20-3.0.31-linux.tar
b) 安装SIMICS
cd simics-3.0-install
./install-simics.sh
当提示输入序列号时,找到注册成功后,随注册文件一起寄过来的注册说明--”smics_reg.doc”, 输入其中的序列号
c)注册
i. 安装完成后,将注册文件simics_3.0.lic复制到$GEMS/simics-3.0.31/licenses
ii. 修改 simics_3.0.lic: 将第二行的this_host替换为服务器的hostname. (最好是默认的主机称:localhost.localdomain, 这与安装操作系统时的设置有关, 安装好后再手动修改主机名的话,认证总是失败!). 在第三行末尾添加vtech路径. 如果没有,请重新安装FLEXlm.
iii. ./lmgrd –c $GEMS/simics-3.0.31/licenses/simcs_3_0.lic
4. GMES安装
a) 解压gems-release2.1.tar.gz
cd $GEMS
tar –zxvf gems_path/gems-release2.1.tar.gz
cp –r $GEMS/gems-2.1/* $GEMS
rm –r $GEMS/gems-2.1
b) 建立工作站
Mkdir $GEMS/simics_3_workspace
Cd $SIMICS_INSTALL/bin
./workspace-setup $GEMS/simics_3_workspace
c) 修改makesymlinks.sh
cd scripts
vim makesymlinks.sh
在echo “Making symlink for import directory”后面添加 ln –s $SIMICS_INSTALL/import import
d) 运行makesymlinks.sh
cd $GEMS/simics_3_workspace
../scripts/makesymlinks.sh
e) 链接simics workspace
cd $GEMS
ln –s simics_3_workspace simics
f) 修改$GEMS/common/Makefile.simics_version
SIMICS_VERSION := 3.0
g) 修改$GEMS/common/Makefile.common
CC_VERSION=4.1.1
HOST_TYPE=x86-linux,并注释掉原来的赋值
对ifeq($(SIMICS_VERSION),3.0)后的以下两项进行修改
SIMICS_ROOT := $(GEMS_ROOT)/simics
SIMICS_INCLUDE_ROOT := $(SIMICS_INSTALL)/src/include
h) 修改$GMES/ruby/module/Makefile
CC_VERSION=4.1.1
修改GEMS_ROOT, 即注掉For Simics 2.x后面的语句, 解注For Simics 3.0后面的语句
HOST_TYPE=x86-linux,并注释掉原来的赋值
i) 修改$GMES/opal/module/Makefile
CC_VERSION=4.1.1
修改GEMS_ROOT, 即注掉For Simics 2.x后面的语句, 解注For Simics 3.0后面的语句
HOST_TYPE=x86-linux,并注释掉原来的赋值
j) 修改$GMES/tourmaline/module/Makefile
CC_VERSION=4.1.1
HOST_TYPE=x86-linux,并注释掉原来的赋值
5. 编译ruby
cd $GEMS/ruby
make PROTOCOL=MOSI_SMP_bcast DESTINATION=MOSI_SMP_bcast
注: 此处常见错误:
1).出现错误:SIM_hap_register_callback
答:在ruby.c文件中,将SIM_hap_register_callback改为SIM_hap_add_callback
2).找不到libelf.so.0时,会出现
/root/simics-3.0.31/x86-linux/bin/libsimics-common.so: undefined reference to `elf_nextscn'
/root/simics-3.0.31/x86-linux/bin/libsimics-common.so: undefined reference to `elf64_getshdr'
…………………
答:到网上下载安装libelf.so.0
3).出现错误: Simics SLA not accepted, Exiting since in batch-mode,
答:运行workspcae 中的simics软件: ./simics
4).出现错误:
Using the Simics 3.0 API for ruby module
CCLD ruby.so
Make[2]: ***[/opt/gems-2.1/simics_3_workspace/x86-linux/obj/ modules/ruby.so]错误2
Make[2]: ***正在删文件”opt/gems-2.1/simics_3_workspace/x86-linux/obj/modules/ruby.so”
答: 这个错误让我郁闷两周了,最后发现是因为中文系统的原因, 我的青春啊,死的心都有了!!在/root/.bash_profile中添加一项
export LC_ALL=en_US.UTF-8
6. 编译opal
cd $GEMS/opal
make module DESTINAION=MOSI_SMP_bcast
三. 安装solaris 10
1. 下载如下文件(其它版本不行)
sol-10-u2-ga-sparc-v1.iso;
sol-10-u2-ga-sparc-v2.iso;
sol-10-u2-ga-sparc-v3.iso;
sol-10-u2-ga-sparc-v4.iso;
sol-10-u2-ga-sparc-v5.iso;
2. 安装
1) cd $GEMS/simics-3.0.31 /targets/serengeti
2) vim abisko-sol10_cd-install1.simics
在if not defined cdrom_path 后面修改
$cdrom_path= “sol-10-u2-ga-sparc-v1.iso_path”
3) vim abisko-sol10_cd-install2.simics
在while $idx < 6 后面修改
$cdrom_path[$idx] = (“sol-10-u2-ga-sparc-v” + $idx + “.iso”)
4) Cd ../../bin
a) ./simics ../targets/serengeti/abisko-sol10-cd-install1.simics
当终端里提示出现”now exit simics and continue with the abisko-sol10-cd-install2.simics”时, 输入命令exit, 退出
b) ./simics ../targets/serengeti/abisko-sol10-cd-install2.simics
当终端里提示出现”now exit simics and continue with the abisko-sol10-cd-install3.simics”时, 输入命令exit, 退出
c) ./simics ../targets/serengeti/abisko-sol10-cd-install3.simics
simics> exit
5) 启动simics
vim ../targets/serengti/abisko-setup.inc lude
将第一句改为if not defined os {$os = “solaris10”}
./simics -x tartgets/serengeti/abisko-common.simics
simics〉continue
注: 此处常见错误
1) unable to qualify my own domain name (abisko) -- using short name
答:在/etc/hosts文件的最后一行尾添加 localhost.localdomain.com也就是($(hostname).com)
2) showmount: tesler: RPC: Program not registered
Do you want to continue? (y or n): Broadcast Message from root (pts/4) on
tesler Wed May 22 17:47:15...
False Alarm: The system tesler will not be brought down.
showmount: tesler: RPC: Program not registered
Shutdown aborted.
答:solaris老有这样的问题,输入命令
Share –F nfs /mnt
Unshared /mnt
四. 安装SIMICSFS
1. 概述
详情查看simics-3.0.31/doc/simics-user-guide-unix.pdf文件, SimicsFS用于实现目标机和虚拟机间的文件传输. 支持solaris7,8,9,10,以及linux内核2.0,电2.2, 2.4, 下载 https://www.simics.net/pub/ 安装和编译方法在 README_2.4和 README_2.6 文件 将文件拷贝到目标机上的方法有network, loopback disk access, 或CD-ROM
主要有如下限制:
虚拟OS | 限制 |
Linux | 访问方式是只读. (实验支持写操作) |
Solaris | 不支持Truncating files (截短的文件). |
Other | 不支持 |
内核版本小于 2.4的linux上, SimicsFS 内核模型是 hostfs.之后的版本才叫simicsfs, 因此安装在低版本的linux目标机上时,将下面simicsfs 部分替换成 hostfs.
2. 目标机是linux
1) 在目标机上新建目录 /lib/modules/version/kernel/fs/simicsfs/ ,其中version是目标机的内核版本.
2) 将新编译的 SimicsFS模型文件拷贝到目标机的/lib/modules/version/kernel/fs/simicsfs/ 目录下,注:不大于2.4的linux版本下,模型文件名称是simicsfs.o ,linux2.6版本的叫simicsfs.ko
3) 在目标机上建立挂载点 mkdir /host.
4) 在目标机的/etc/fstab文件中添加下面的内容(用挂载点替换/host)
special /host simicsfs noauto,ro 0 0
注意: ro表示只读, rw表示支持实验写操作.
5) 在目标机上挂载SimicsFS: mount /host
这样, SimicsFS 就可以工作了, 在目标机上通过ls /host 可以得到主机文件列表.
早期的Simics版本称为hostfs而不是simicsfs. 参考setup_simicsfs.sh
3. 目标机是solaris
1) 为方便向目标机中传递simics-3.0.31/import/sun4u/mount_simicsfs和simics-3.0.31/import/sun4u/simicsfs-sol10到目标机,我们将二者做成ISO文件,即:
cd $GEMS/simics-3.0.31/import/sun4u/
mkdir sol10-simicsfs
cp mount_simicsfs sol10-simicsfs
cp simicsfs-sol10 sol10-simicsfs
cd sol10-simicsfs
mv mount_simicsfs mount
mv simicsfs-sol10 simicsfs
cd ../
mkisofs –o 10.iso –J –r sol10-simicsfs //-o输出文件名, –J与windows兼容, -r与unix/linux兼容
sol10-simicsfs.iso即为所需要的镜相文件
2) 运行./simcis –x ../target/serengeti/abisko-common.simics
simics> continue
3) 当XTerm中出现#,即启动完成后,Ctrl+C退回到simcis>界面加载10.iso文件
simics>new-file-cdrom 10.iso_path
simics> cd0.insert iso
simics> con0.input “mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /mnt\n”
simics> con0.input “mkdir /usr/lib/fs/simicsfs\n”
4) 复制文件mount_si,并重命名为mount,
simics> con0.input “cp –r /mnt/mount /usr/lib/fs/simicsfs\n”
5) 复制文件simicsfs ,
simics> con0.input “cp –r /mnt/simicsfs /usr/kernel/fs/sparcv9\n”
6) 在目标机的/etc/vfstab文件中添加一行,即
simics> con0.input “echo simicsfs - /host simicsfs - no - >>/etc/vfstab\n”
7) 在目标机上建立挂载点 并添加路径:
simics> con0.input “mkdir /host\n”
simics> continue
8) 目标机运行时,输入命令
mount /host
ls /host 查看主机上的文件列表
4. 使用simicsFS
默认在/host下访问主机上的文件.也可以通过命令 <hostfs>.root command来修改挂载点, 如simics> hfs0.root /home/alice/sandbox ,新命令在下次挂载simicsFS时生效.
注: 加载检查点时,上次被挂载的SimicsFS的中文件不变.
注: 此处常见错误:
1) 制作ISO文件时, mkisofs –o sol10-simicsfs.iso –J –r sol10-simicsfs
制作ISO文件成功,但是运行simics并加载时出现错误:
simcis> cd0.insert iso
Argument error: argument 1 (iso) given to ‘<scsi-cdrom>’.insert has the wrong type; object expected. SYNOPSIS: <scsi-cdrom>.insert medium
答: 开始一直以为是光盘制作的有问题, 换了好多种方式制作光盘,如dd if=filedirectory of=sol10-simicsfs.iso, mkisofs –o sol10-simicsfs.iso –Jrv filedirectory等, 但是都得到相同的结果,后来发现是因为ISO文件名中包含了英文字母的问题, 在simics命令行加载ISO文件时,文件名只能包含数字!
五. 加载,配置ruby和opal
1. 配置simics
./simics –stall
simics> instruction-fetch-mode instruction-fetch-trace
simics> istc-disable
simics> dstc-disable
simics> cpu-switch-time 1
simics> read-configuration file.simics_path
2. 加载ruby 和opal
simics> load-module ruby
simics> load-module opal //一般不需要加载opal
3. 配置ruby 和opal
ruby0.setparam g_NUM_PROCESSORS 1
ruby0.setparam g_MEMORY_SIZE_BYTES 4294967296
ruby0.init
opal0.init
4. 运行ruby和opal
ruby0.dump-stats
opal0.sim-step 10000000000
opal0.listparam
opal0.stats
注: 此处常见错误:
1) Error loading module ‘ruby’: Failed to load module ‘ruby’ (‘/root/gems/simics_3_workspace/x86-linux/lib/ruby.so’): “version ‘Gcc_4.2.0’ not found (required by /usr/lib/libstdc++.so.6)”或Error loading module ‘ruby’: Module ‘ruby’ not found
答: ldd ruby.so可以发现ruby.so依赖的库函数, 移除libgcc_s.so.1
2) 加载ruby后,保存检查点, 重新启动该检查点时,出现错误:
Physical memory object cannot be found. If you are NOT compiling Ruby and you see this message, something is wrong. This message is part of the normal complication process.
答: 加载ruby一般是运行目标机前的最后一个操作, 加载ruby后是不支持检查点操作的.