内容


为 Linux on Power 系统开发 C/C++ 交叉编译应用程序

交叉编译、QEMU 用户模式和 IBM SDK for Linux on Power 的简单介绍

Comments

简介

IBM® Software Development Kit (SDK) for Linux on Power 是免费的基于 Eclipse 的集成开发环境(integrated development environment,IDE)。此 SDK 集成了 C/C++ 源代码开发与 Advance Toolchain、Post-Link Optimization 和典型的 Linux 性能分析工具,包括 Oprofile、Perf 和 Valgrind。

本文介绍如何通过 IBM SDK 提供的集成环境使用 IBM Advance Toolchain 和 QEMU 用户模式为 Linux on Power 开发交叉编译应用程序,这样做允许运行和调试针对一个处理器编译的应用程序,使其在另一个拥有不同架构的处理器上运行(这就是交叉编译/调试)。

要求

为使用 SDK 中的 QEMU 用户模式,需要安装 IBM Advance Toolchain 交叉编译器、QEMU 用户模式和 IBM SDK for Linux on Power。

出于本文的目的,我们使用了以下版本:

  • IBM Advance Toolchain cross compiler 8.0-1
  • IBM SDK for Linux on Power 1.6
  • QEMU 用户模式

重要提示:在编写本文时,SDK 1.6 已推出,但还未提供支持 ppc64le(Linux on Power 的小端版本)的软件包。为了提供最新的改进,SDK 团队为它创建了一个可安装的软件包。

使用的操作系统是 Fedora 20。

安装 IBM Advance Toolchain 交叉编译器

IBM Advance Toolchain for PowerLinux™ 是一组开源开发工具和运行时库,它使用户能够在 Linux 上利用以下最新的 IBM Power® 硬件特性(在本文发布时):

  • IBM POWER8™ 支持
  • POWER8 优化的调度程序
  • POWER8 Transactional Memory 支持
  • OWER8 Crypto Operations 支持
  • POWER8 Fusion 支持

执行以下步骤来安装 IBM Advance Toolchain 交叉编译器。

  1. 下载 AT 8.0-1 交叉编译器的通用包
  2. 下载 AT 8.0-1 交叉编译器的 ppc64le 版本
  3. 运行以下命令来安装两种包:
    1. $sudo yum install -y ./advance-toolchain-at8.0-cross-common-8.0-1.x86_64.rpm
    2. $sudo yum install -y ./advance-toolchain-at8.0-cross-ppc64le-8.0-1.x86_64.rpm

您会注意到,AT 8.0-1 交叉编译器已安装且目录为 /opt/at8.0。

安装 x86_64 版本的 SDK

x86_64 版本的 IBM SDK 支持 IBM Advance Toolchain 交叉编译器版本 7.0-1、7.1-0 和 8.0-1。还可以使用它创建同步项目,这允许使用远程 IBM Power 服务器开发应用程序。

有关如何创建同步项目的更多信息,请参见 SDK 用户指南。如果您想访问 Power 服务器,请访问 MiniCloud 网站并提交您的请求。它是免费的!

返回到 SDK 安装。按照以下步骤进行操作:

  1. 下载 x86_64 版本的 IBM SDK for Linux on Power
  2. 运行以下命令以安装软件包。

$sudo yum install -y ./ibm-sdk-lop-1.6.0-1.x86_64.rpm

安装 QEMU 用户模式

QEMU 是一个广泛使用的开源计算机模拟器和虚拟机。此用户模式允许在一个处理器上启动针对另一个处理器编译的程序,这样就可以运行和调试交叉编译应用程序。

当 SDK 1.6 发布时,所支持的发行版中可用的 QEMU 用户模式版本并未包含支持 ppc64le 的补丁。为了克服这种情况,SDK 团队为它创建了一个可安装的包。

要安装 QEMU 用户模式,请执行以下步骤。

  1. 下载 QEMU user-mode 软件包。
  2. 运行以下命令来安装此软件包。

$sudo yum install -y ./qemu-user-space-emulator-1-1.x86_64.rpm

现在,QEMU 直接投入使用,但是如果您想使用最新版的 QEMU,可以在本地构建它。这个过程非常简单,步骤如下所示:

在您开始之前,确保已安装了 Git

  1. 使用以下命令克隆 QEMU 源代码:
    1. git clone git://git.qemu.org/qemu.git
    2. cd ./qemu
  2. 使用以下命令创建构建目录:
    1. mkdir -p bin/debug/native
    2. cd bin/debug/native
  3. 使用以下命令安装依赖项:
    $sudo yum install -y zlib.x86_64 glibc-devel.x86_64 zlib-devel.x86_64 pixman-devel.x86_64 libfdt-devel.x86_64 glib2-devel.x86_64
  4. 使用以下命令配置项目:
    ../../../configure --disable-debug-tcg --enable-tcg-interpreter --target-list="ppc64abi32-linux-user ppc64le-linux-user ppc64-linux-user" --disable-vnc --extra-cflags="-O3"
  5. 运行以下 make 命令。
    make -j5
  6. 使用以下命令安装 QEMU 库。
    $sudo make install

重要提示:安装完成之后,QEMU 库位于 /usr/local/bin 下,但 SDK 希望它们的目录为 /opt/ibm/qemu-user-space-emulator。以下步骤提供了一种解决此问题的方法:

  1. 使用以下命令创建目录:
    $sudo mkdir -p /opt/ibm/qemu-user-space-emulator
  2. 使用以下命令将库从 /usr/local/bin 复制到 /opt/ibm/qemu-user-space-emulator:
    $sudo cp /usr/local/bin/qemu-ppc64 /usr/local/bin/qemu-ppc64abi32 /usr/local/bin/qemu-ppc64le /opt/ibm/qemu-user-space-emulator

创建交叉编译项目

使用 IBM SDK for Linux on Power 创建交叉编译项目非常简单。完成 Advance Toolchain、QEMU 和 SDK 的安装后,就可以开始开发 C/C++ 交叉编译应用程序了。

  1. 第一步是启动 SDK。可以通过在用户界面选择 SDK 或者使用命令行来启动它。
    • 使用用户界面:
      搜索 IBM SDK for Linux on Power 1.6。
    • 使用命令行:
      运行以下命令:/opt/ibm/ibm-sdk-lop/ibm-sdk-lop

    当 SDK 启动时,将提示您选择工作区。

    图 1. 定义工作区
    定义工作区
    定义工作区

    定义了工作区之后,就可以使用 SDK。

    图 2. SDK 视图
    SDK 视图
    SDK 视图
  2. 现在,您可以创建交叉编译项目了。在 Getting Started 选项卡中,选择 New IBM Advance Toochain C Project 或 IBM Advance Toolchain C++ Project

    图 3. 选择项目类型
    选择项目类型
    选择项目类型
  3. 选择了所需的项目类型后,需要配置新项目,包括名称、位置、类型和工具链。

    图 4. 项目配置
    项目配置
    项目配置
  4. 还可以通过选择处理器类型来调优应用程序。

    图 5. 调优应用程序
    调优应用程序
    调优应用程序
  5. 单击 Finish 以在之前创建的工作区中设置项目。它将位于 Project Explorer 选项卡中。

    图 6. 项目结构
    项目结构
    项目结构

构建交叉编译项目

现在已经创建了项目,可以开始构建它了。选择项目,右键单击并选择 Build Project

图 7. 构建项目
构建项目
构建项目

构建过程完成之后,交叉编译库会出现在 Project Explorer 选项卡下的 Binaries 节点中。

图 8. 构建结果
构建结果
构建结果

使用 QEMU 用户模式运行交叉编译项目

要使用 QEMU 用户模式运行交叉编译项目,需要执行以下步骤。

  1. 选择您的项目,右键单击,然后单击 Run As → Qemu
    图 9. 使用 QEMU 运行交叉编译应用程序
    使用 QEMU 运行交叉编译应用程序
    使用 QEMU 运行交叉编译应用程序

    由于这是您第一次尝试使用 QEMU 运行应用程序,因此需要为应用程序配置一个新的启动器。

    图 10. QEMU 启动器配置
    QEMU 启动器配置
    QEMU 启动器配置
  2. 现在,需要选择应用程序。单击 Browse,会显示 Program Selection 对话框。

    图 11. 二进制选择
    二进制选择
    二进制选择
  3. 单击 OK。这会自动填写所有必填字段。必填字段是 QEMU 位置和路径,这是运行应用程序所需库的存放位置。

    重要提示:如果您的应用程序依赖具体的库,则需要在运行应用程序之前处理此依赖关系。

    图 12. 必填字段
    必填字段
    必填字段
  4. 要设置新库的位置,请单击 Libraries Paths 部分的 Browse

    图 13. 库路径管理器
    库路径管理器
    库路径管理器
  5. 在 Libraries Paths 对话框中,可以使用选项 New Path 或 Remove 来添加或删除路径位置。

    一个可选的步骤是设置 QEMU 选项。选择一个选项时,此选项的输出将包含在名为 qemu.log 的文件中,此文件显示在 Project Explorer 选项卡下。可用的选项如下图所示。

    图 14. QEMU 选项
    QEMU 选项
    QEMU 选项

    如果将鼠标指针移动到任意选项上,可以看到有关此选项的简单介绍(或工具提示)。例如,如果将鼠标指针移动到选项 int 上,可用看到如下图所示的描述。

    图 15. 快速提示
    快速提示
    快速提示

    配置了所有选项来运行应用程序后,单击 Run。可以在 Console 选项卡中看到输出结果。

    图 16. 运行应用程序
    运行应用程序
    运行应用程序

    重要提示:如果选择了任意 QEMU 选项,则需要在运行应用程序之后更新应用程序,以便可以看到 qemu.log

支持

本文所展示的工具都是免费的。可以在 developerWorks 的社区支持中找到这些工具的用户支持。可以通过 developerWorks 相关论坛提交问题、建议和帮助请求,专家将负责这些内容的审核。

参考资料

请参见以下参考资料,了解有关 IBM SDK、IBM Advance Toolchain、交叉编译和 QEMU 的更多信息。


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=999298
ArticleTitle=为 Linux on Power 系统开发 C/C++ 交叉编译应用程序
publish-date=03032015