[转]支持XenPPC的IBM全系统仿真环境的建立

时间:2021-04-29 17:08:02

http://marc.ustc.edu.cn/pca/practice_sch.html

一.IBM全系统模拟器环境的建立

IBM全系统模拟器是由IBM奥斯汀研究实验室设计和开发的,在IBM内部被称作“Mambo”。针对PowerPC 970的IBM全系统模拟器是不开源的,它的二进制版本可在IBM alphaWorks Emerging Technologies网站到得到。
这一章主要介绍PowerPC 970的IBM全系统模拟器的安装环境的建立,包括安装要求,安装模拟器,PowerPC交叉工具链的编译,PowerPC Linux Kernel的编译和PowerPC 根文件系统的建立。

1.1 安装要求

在开始安装之前,请确认下你的系统满足以下硬件和软件的最小需求:

  • 要安装IBM全系统模拟器的机器必须有3GB或以上的可用磁盘空间,这些空间主要用于安装核心的模拟器文件及根文件镜像。模拟器必须被安装到一个网络无法访问的文件夹中。
  • 最小物理内存必须等于模拟内存的两倍。例如,如果模拟器模拟了一个具有256MB内存的系统,则主机必须有至少512MB的内存。
  • 模拟器目前只支持以下宿主操作系统:RedHat Linux v8.0, RedHat Linux v9.0, RedHat Enterprise Linux v3, Fedora Core 2, Fedora Core 3, and Fedora Core 4。
  • 在建立根文件镜像时,当前用户必须具有根用户的权限

1.2 安装适合你的模拟器

针对PowerPC 970的IBM全系统模拟器的二进制安装文件可以从IBM alphaWorks
Emerging Technologies
网站上得到(http://www.alphaworks.ibm.com/tech/systemsim970)表1-1列出了不同宿主机上对应的安装文件。 

表 1-1 不同宿主机的安装文件列表

安装文件

宿主主机平台

文件大小

SystemSim_x86_rh8_2.0.tar.bz2

运行在x86机器上的RedHat Linux v8.0 and RedHat Linux v9.0b

7.9MB

SystemSim_x86_rhel3_2.0.tar.bz2

运行在x86机器上的RedHat Enterprise Linux v3, Fedora Core 2, and Fedora Core 3

7.7MB

SystemSim_x86_fc4_2.0.tar.bz2

运行在x86机器上的Fedora Core 4

7.7MB

SystemSim_ppc_sles9_2.0.tar.bz2

运行在PowerPC机器上的SUSE LINUX Enterprise Server 9

7.7MB

SystemSim_ppc_fc4_2.0.tar.bz2

运行在PowerPC机器上的Fedora Core 4

7.8MB

这里下的是SystemSim_x86_rh8_2.0.tar.bz2,下完后直接将其解压,目录ibmsim /simulators/systemsim–gpul-release/bin中的systemsim-gpul即为针对PowerPC 970的全系统模拟器。

1.3 制作一个PowerPC的工具链

通过ibmsim/toolchain目录中的Makefile来创建PowerPC 工具链。在make的过程中,安装程序需要从网络上下载一些必要的工具、库和第三方文件,我们可以提前下载好这些文件,并将这些文件放于ibmsim/toolchain/src/packages中,表1-2列出所需要的一些文件: 
表1-2 编译时用到的文件


文件名

下载地址

crosstool-0.42.tar.gz

http://kegel.com/crosstool/crosstool-0.42.tar.gz

gcc-4.1.0.tar.bz2

http://www-uxsup.csx.cam.ac.uk/pub/gnu/gcc/gcc-4.1.0/gcc-4.1.0.tar.bz2

binutils-2.16.1.tar.bz2

http://ftp.gnu.org/gnu/binutils/binutils-2.16.1.tar.bz2

glibc-2.3.6.tar.bz2

http://ftp.gnu.org/gnu/glibc/glibc-2.3.6.tar.bz2

glibc-linuxthreads-2.3.6.tar.bz2

http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.6.tar.bz2

linux-2.6.15.4.tar.bz2

http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.15.4.tar.bz2

gcc-3.3.6.tar.bz2

http://ftp.gnu.org/gnu/gcc/gcc-3.3.6/gcc-3.3.6.tar.bz2

gdb-6.4.tar.bz2

http://ftp.gnu.org/gnu/gdb/gdb-6.4.tar.bz2

linux-libc-headers-2.6.12.0.tar.bz2

http://ftp.lfs-matrix.net/pub/linux-libc-headers/linux-libc-headers-2.6.12.0.tar.bz2

git-1.2.3.tar.gz

http://www.sz.kernel.org/pub/software/scm/git/git-1.2.3.tar.gz

zisofs-tools-1.0.6.tar.gz

http://www.kernel.org/pub/linux/utils/fs/zisofs/zisofs-tools-1.0.6.tar.gz

linux-2.6.16.tar.bz2

Git下载

文件准备好之后,切换到toolchain目录下,这里默认将文件解压到/home/xxx (~)目录下:

cd ~/ibmsim/toolchain

使用make来编译toolchain

make toolchain_all

注意:

  • 文件linux-2.6.16.tar.bz2不要从网上直接下载,否则在后边编译PowerPC Linux Kernel的时候会出错。
  • make toolchain_all时请使用普通帐户
  • toolchain的编译过程非常耗时,但是后边的编译过程都需要用到它

1.4 制作一个PowerPC Linux Kernel

在工具链构造成功后,我们就可以使用ibmsim/toolchain目录下的makefile来创建一个64位PowerPC Linux Kernel。切换到toolchain目录下: 
cd ~/ibmsim/toolchain
使用make编译kernel
make kernel_all
:在make kernel_all 时 git -checkout 步骤出错, linux-2.6.16.tar.bz2安装包有问题,建议让程序自己去下载,手动:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/systemsim.git linux-2.6.16
注:git需要提前编译安装好

1.5 制作一个PowerPC根文件环境

       这部分需要用户拥有root权限,在执行任务命令之前,确保你拥有了root权限。 
另外在编译时,安装程序会下载100多M的ISO文件 - install-ppc64-minimal-2006.0.iso,建议事先下载,放到ibmsim/images下,下载地址为: 

http://linux.rz.ruhr-uni-bochum.de/download/gentoomirror/releases/ ppc/2006.0/ppc64/installcd/install-ppc64-minimal-2006.0.iso

执行以下步骤:

  • 使用ibmsim/toolchain目录下的Makefile创建一个64位的PowerPC根文件环境,切换到toolchain目录下:

cd ~/ibmsim/toolchain

  • 使用make编译rootdisk

       make build_rootdisk

 

 

二.编译XenPPC

2.1 获取源代码

Xen项目使用Mercurial来管理源代码,你必须安装Mercurial来获取最新源代码。
Mercurial下载地址:http://www.selenic.com/mercurial/wiki/ ,下面的所有编译与安装均在~/xen目录下。
通过以下命令获取源代码:


$ mkdir ~/xen
$ cd ~/xen
$ hg clone http://xenbits.xensource.com/xen-unstable.hg
$ mkdir ~/xen/linux
$ cd ~/xen/linux
$ hg clone http://xenbits.xensource.com/ext/linux-ppc-2.6.hg
$ mkdir ~/xen/linux/xen

结果:

  • ~/xen/xenppc-unstable.hg: 这个是你本地的XenPPC仓库的一份克隆
  • ~/xen/linux/linux-ppc-2.6.hg: 这个是你本地的XenPPC Linux Kernel仓库的一份克隆
  • ~/xen/linux/xen: Linux Kernel最终将编译在这里

2.2 创建包含Linux Kernel的Xen

在下面的编译过程中,要使用到以powerpc64-unknown-linux-gnu-为前缀的交叉编译器,这个编译器在第一部分编译toolchain的时候生成。在使用这个交叉编译器的时候,确认你已经把交叉编译工具所在目录加入到环境变量PATH中。下边所有的make –C <dir>代表 cd <dir> && make。
不同于其它Xen架构,XenPPC使用的Linux内核既可以作为Dom0来用,又可以用作DomU,同时又可以脱离Xen直接运行。代码树中有Linux内核配置文件,这些配置文件可以让内核运行在Xen,裸Maple机和IBM商用P系列Hypervisor上。

注意

  • 如果你使用交叉编译,那么你必须使用一个带有前缀的交叉工具,这个前缀用来描述产生哪个目标机代码。在Linux内核编译的时候,加上CROSS_COMPILE=powerpc64-unknown-linux-gnu- 。
  • 如果你的交叉工具不具有既能生成64位代码又能生成32位代码的能力,那么你必须在编译Linux内核时,加上CROSS32_COMPILE=powerpc-unknown-linux-gnu-。

首先,通过下面的命令配置你的Linux kernel:
$ make -C ~/xen/linux/linux-ppc-2.6.hg ARCH=powerpc O=../xen \
xen_maple_defconfig CROSS_COMPILE=powerpc64-unknown-linux-gnu-

 

说明

  • ARCH=powerpc: 可以保证生成 PowerPC Linux 内核
  • O=../xen: 指定生成目录,即以后所有编译生成的东西都放到 ~/xen/linux/xen 目录中
  • xen_maple_defconfig: is a "fully tested" Linux configuration it is located in ~/xen/linux/linux-ppc-2.6.hg\ /arch/powerpc/configs/xen_maple_defconfig and came with out kernel

之后创建Linux kernel $ make -C ~/xen/linux/linux-ppc-2.6.hg ARCH=powerpc O=../xen zImage \ CROSS_COMPILE = powerpc64-unknown-linux-gnu-

 

编译结果

  • ~/xen/linux/xen/vmlinux:这是你刚编译的64位内核,这个内核包含所有符号和调试信息。这个文件相当大,而且如果你计划在代码级上调试你的内核,你会发现GDB使用这个文件调试相当方便。
  • ~/xen/linux/xen/vmlinux.strip:这是~/xen/linux/xen/vmlinux缩减后的版本,它非常小。这个镜像仍是64位,它可被Xen或者域管理工具加载。
  • ~/xen/linux/xen/arch/powerpc/boot/zImage:这是一个很多boot loader都支持的32位PowerPC可执行文件。它包含一个~/xen/linux/xen/vmlinux.strip压缩版(使用gzip),还有一些能够解压缩64位镜像和执行64内核的32位代码。这个镜是最适合被Xen装载并作为Dom0来运行。

创建Ramdisk/Initrd

当在模拟器上运行Linux内核时,我们希望将一个ramdisk植入到内核中。这里我直接从网络上下载一个现成的ramdisk,并命名为ramdisk.image.gz。下载地址为:
http://xm-test.xensource.com/ramdisks/initrd-1.1-powerpc.img ,创建ramdisk/initrd命令如下:
$ cp ramdisk.image.gz ~/xen/linux/xen/arch/powerpc/boot/ramdisk.image.gz
$ make -C ~/xen/linux/linux-ppc-2.6.hg ARCH=powerpc O=../xen zImage.initrd \ CROSS_COMPILE = powerpc64-unknown-linux-gnu-

 

编译结果

  • ~/xen/linux/xen/arch/powerpc/boot/zImage.initrd: 一个32位PowerPC可执行文件,很多boot loader都支持这种文件。它包含~/xen/linux/xen/vmlinux.strip的压缩版,还包含~/xen/linux/xen/arch/powerpc/boot /ramdisk.image.gz ramdisk

2.3 创建Xen Hypervisor

编译步骤
$ make -C ~/xen/xenppc-unstable.hg/xen CROSS_COMPILE=powerpc64-unknown-linux-gnu- \ XEN_TARGET_ARCH = powerpc64 DOM0_IMAGE = ~/xen/linux/xen/arch/powerpc/boot/zImage.initrd

说明

  • DOM0_IMAGE指被Xen装载作为Dom0的内核。
  • 其它可用的make变量:
  • debug=y: 创建一个未经优化的、具有GDB可用的全部调试信息的Xen。
  • crash_debug=y:让Xen去调用Xen自己的远程调试程序,因此你可以用GDB对Xen进行代码级调试。
  • CMDLINE="<bootarg>": 让你为Xen和Dom0编译你自己的引导参数。

CMDLINE= 这个变量只有在你的固件无法设置和保存引导参数的情况才可以使用。

编译结果

编译成功后,在你的创建树中将有以下镜像:

  • ~/xen/xenppc-unstable.hg/xen/xen-syms: 64位Xen Hypervisor镜像,这个镜像包含全部符号和调试信息。同时它里边也有一个Dom0内核。
  • ~/xen/xenppc-unstable.hg/xen/xen: Xen Hypervisor可引导且可执行文件,这个镜像是32位ELF格式镜像,多数boot loader都支持它。它的主要作用是将机器切换到64位模式下,并执行stripped过的~/xen/xenppc-unstable.hg/xen/xen-syms。