導航:首頁 > 源碼編譯 > x86虛擬機源碼

x86虛擬機源碼

發布時間:2023-07-21 22:01:43

『壹』 如何在 Intel x86 伺服器上構建 IBM Powerlinux 應用程序 第2頁

環境和配置
測試環境有一個 IBM Flex System® 組成,該系統有多個 IBM Flex System x240 計算節點和兩個基於 IBM POWER7 處理器的節點(一個 Flex System p260 和一個 Flex System p460)。出於本項目的目的,我使用一個 Flex system x240 計算節點來交叉編譯 Apache httpd 和 PostgreSQL。構建二進製程序後,我將它們轉移到 Flex System p460 計算節點。圖 7 顯示了 IBM Flex System 測試環境的布局圖。
圖 7. IBM Flex System 測試環境

以下是我的系統配置、操作系統級別和其他與系統設置相關的信息。
Flex System x240 計算節點
用於交叉編譯二進製程序的 Intel 節點僅需要足夠的處理能力和內存,以便能夠構建 Power 二進製程序。配置如下:
基於內核的虛擬機 (KVM) 管理程序 Red Hat 6.5
32 個處理器
64 GB 內存
IBM Storwize® V7000 存取區域網路 (SAN) 連接磁碟
KVM Guest 系統
Red Hat Enterprise Linux 6.5
4 個處理器
16 GB 內存
一個 virtio 磁碟:100 GB
一個配置為 br0 的虛擬網路介面卡 (NIC)
所有其他 KVM Guest 系統都已關閉,以消除破壞環境的任何可能性。
Flex System p440 計算節點
Flex System p440 計算節點包含多個邏輯分區 (LPAR),其中一個配置為測試伺服器。PowerLinux 伺服器配置如下:
IBM PowerVM® 來賓
Red Hat Enterprise Linux 6.5
8 個處理器(專用)
32 GB 內存
Storwize V7000 SAN 連接磁碟 (50 GB)
通過虛擬 I/O 伺服器 (VIOS) 共享的乙太網適配器
LPAR 配置
最小內存:256 MB
目標內存:32 GB
最大內存:64 GB
最少處理器數:8
目標處理器數:8
最大處理器數:32
處理模式:專用
專用內存
虛擬乙太網適配器(通過 VIOS 建立)
適配器 ID:2
VLAN ID:1
需要此適配器來激活虛擬伺服器:已選擇
以下是我運行的其他一些命令
# ppc64_cpu --frequency
min: 3.56 GHz (cpu 28)
max: 3.56 GHz (cpu 4)
avg: 3.56 GHz
# ppc64_cpu --cores-present
Number of cores present = 8
# sysctl.conf
kernel.sem = 250 32000 32 12288
使用 toolchain 構建應用程序
通常,構建開源發行版的過程是一個迭代過程。如果您很幸運的話,該過程可能已構建完成。不幸的是,因為大多數開源發行版都構建於 x86 伺服器之上,所以在嘗試為不同架構(比如 IBM Power 架構)構建它們時可能遇到問題。
如果在 Power 上構建開源包時遇到問題,只需在互聯網上搜索類似情形,查看這些已報告的問題是否與您的經歷密切相關。如果是相關的,那麼在大多數情況下,您可以找到如何解決該問題的建議。
對我而言,盡管為配置腳本選擇正確參數後,postgresql 很好地構建完成了,但 apache httpd 沒那麼幸運。接下來的幾節將介紹為 Power 架構構建 apache httpd 所需的修復程序。
交叉編譯器經驗
編寫本文時,我使用的交叉編譯器版本是一個僅供 IBM 內部使用的版本,它專為修復我在測試期間遇到的一個錯誤而構建。讀者可以下載 AT 7.0-5 版,它是最新的交叉編譯器(在發表本文時),擁有接下來的幾段中描述的錯誤的修復程序。
在我嘗試交叉編譯 apr-1.5.1 源代碼發行版時,我看到了以下編譯器消息。
"sorry - this program has been built without plugin support"

按照我在互聯網上搜索可能的幫助和解決方案的建議,我找到多個鏈接提到編譯器需要使用 「plugin enabled」 選項來構建。我向 toolchain 支持小組報告了此問題,toolchain 維護人員很快就回復了我,為我提供了一個使用 plugin enabled 選項構建的修改版本。請注意,toolchain 的交叉編譯器和原生編譯器版本都需要使用 plugin enabled 選項構建。我能夠在獲得擁有該修復程序的 toolchain 版本後繼續工作。
這是我使用 PowerLinux toolchain 的第一次經歷。
交叉編譯 httpd 2.4.3
要交叉編譯 Apache httpd,需要使用另外 3 個包。它們是:apr、apr-util 和 pcre。找到下載最新包的位置後,開始使用 toolchain 交叉編譯器在 x86 伺服器上構建它們。
我構建 apr-1.5.1 時遇到的問題是構建 gen_test_char.o 模塊。請參閱 ASF Bugzilla – 錯誤 51257 了解有關的更多細節。我修改了 Makefile.in 文件(如下所示)並運行 buildconf 腳本,以便將更改包含在配置腳本中。
對 Makefile.in 的修改如下所示:
[root@stgisv240 apr-1.5.1]# diff -u Makefile.in ../../apr-1.5.1/Makefile.in
--- Makefile.in 2014-03-17 10:10:26.000000000 -0500
+++ ../../apr-1.5.1/Makefile.in 2014-07-03 13:36:11.125013781 -0500
@@ -46,7 +46,6 @@

CLEAN_TARGETS = apr-config.out apr.exp exports.c export_vars.c .make.dirs build/apr_rules.out tools/gen_test_char@EXEEXT@ - tools/gen_test_char.o tools/gen_test_char.lo \
include/private/apr_escape_test_char.h
DISTCLEAN_TARGETS = config.cache config.log config.status include/apr.h include/arch/unix/apr_private.h @@ -132,10 +131,9 @@
make_tools_dir:
$(APR_MKDIR) tools
-OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)
-tools/gen_test_char.lo: make_tools_dir
-tools/gen_test_char@EXEEXT@:$(OBJECTS_gen_test_char)
- $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)
+tools/gen_test_char@EXEEXT@: make_tools_dir
+tools/gen_test_char@EXEEXT@: tools/gen_test_char.c
+ $(BUILD_CC) $(CFLAGS_FOR_BUILD) $< -o $@
include/private/apr_escape_test_char.h: tools/gen_test_char@EXEEXT@
$(APR_MKDIR) include/private
修改 Makefile.in 文件後,我運行 buildconf 來創建了一個新配置腳本。下一段將介紹用於配置腳本的參數和變數。順便說一下,我是根據其他嘗試在其他平台(比如 ARM)上交叉編譯 Apache httpd 及其組件的開發人員的建議,為配置腳本選擇配置參數的。
以下是我在 x86 伺服器上運行 apr-1.5.1 組件的配置腳本時,使用的參數和環境變數。
# Config script using Power Linux toolchain on x86
BUILD_CC=gcc
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=powerpc64-linux-cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/tmp/usr/local/apr --host=powerpc64-linux ac_cv_file__dev_zero=no
ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1
BUILD_CC=gcc make install
我在 Power 伺服器上了略加修改的相同發行版。請注意,用於 Power 伺服器的 PowerLinux toolchain 使用了具有類似命名的可執行程序,比如從原生 cpp 和 binutils 包安裝的 cpp 和 ld。修改腳本中的 CPP 和 LD 變數,如下所示。確保 Power toolchain 的路徑首先傳入您的 PATH 環境中。
以下是我在 Power 伺服器上運行 apr-1.5.1 的配置腳本時使用的參數和環境變數。
# Config script using PowerLinux toolchain on Power
BUILD_CC=gcc
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=cpp # Note the difference
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=ld # Note the difference
STRIP=powerpc64-linux-strip
#CFLAGS="-mcpu=440fp -mtune=440fp --sysroot $SYSROOT"
#LDFLAGS=-L$SYSROOT/lib
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/home/usr/local/apr ac_cv_file__dev_zero=no
ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1
ac_cv_struct_rlimit=yes
BUILD_CC=gcc make install
以下是我在 x86 伺服器上運行 apr-util-1.5.3 組件的配置腳本時使用的參數和環境變數。
# Configure script for apr-util-1.5.3 on x86
BUILD_CC=gcc
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=powerpc64-linux-cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/tmp/usr/local/apr --host=powerpc64-linux --with-
apr=/tmp/usr/local/apr ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no
apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1
以下是我在 Power 伺服器上運行 apr-util-1.5.3 組件的配置腳本時使用的參數和環境變數。
# Configure script for apr-util-1.5.3 on Power
BUILD_CC=gcc
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/home/usr/local/apr --host=powerpc64-linux --with-
apr=/tmp/usr/local/apr ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no
apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1
以下是我在 x86 伺服器上運行 httpd 組件的配置腳本時使用的參數和環境變數。
# Configure script for httpd 2.4.3 on x86
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=powerpc64-linux-cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/tmp/usr/local --host=ppc64 ap_cv_void_ptr_lt_long=no --with-
pcre=/tmp/usr/local/bin/pcre-config --with-apr=/tmp/usr/local/apr --with-mpm=worker--
with-apr-util=/tmp/usr/local/apr/bin/apu-1-config
以下是我在 Power 伺服器上運行 httpd 組件的配置腳本時使用的參數和環境變數。
# Configure script for httpd 2.4.3 on Power
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=cpp
AS=powerpc64-linux-as
#ASCPP=powerpc-apm-linux-gnu-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
#CXXCPP=powerpc-apm-linux-gnu-cpp
CXX=powerpc64-linux-c++
LD=/opt/at7.0-5-rc1/bin/ld
STRIP=powerpc64-linux-strip
#CFLAGS="-mcpu=440fp -mtune=440fp --sysroot $SYSROOT"
#LDFLAGS=-L$SYSROOT/lib
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/home/usr/local --host=ppc64 ap_cv_void_ptr_lt_long=no--with-
pcre=/home/usr/local/bin/pcre-config --with-apr=/home/usr/local/apr --with-mpm=worker--
with-apr-util=/home/usr/local/apr/bin/apu-1-config
交叉編譯 PostgreSQL 9.4.3
不同於之前構建 httpd 所需的源代碼發行版,我在交叉編譯 PostgreSQL 時未遇到問題。PostgreSQL 是使用以下配置腳本來構建的。
以下是我在 x86 伺服器上運行 PostgresSQL 的配置腳本時使用的參數和環境變數。
# Configure script for postgresql-9.3.4 on x86
CC=powerpc64-linux-gcc
CPP=powerpc64-linux-cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
D=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/tmp/usr/local --host=powerpc64-linux --without-readline --without-zlib
與 Apache 配置腳本一樣,您可以注意到針對 Power 伺服器 toolchain 使用了具有類似命名的可執行程序,比如從原生 cpp和 binutils 包安裝的 cpp 和 ld。修改腳本中的 CPP 和 LD 變數,如下所示。確保 toolchain 的路徑首先傳入您的 PATH 環境中。
以下是我在 Power 伺服器上運行 PostgresSQL 的配置腳本時使用的參數和環境變數。
# Configure script for postgresql-9.3.4 on Power
CC=powerpc64-linux-gcc
CPP=cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/home/usr/local --host=powerpc64-linux --without-readline --without-zlib
結束語
toolchain 交叉編譯器的實際價值在於,開發人員可在他們熟悉的開發平台上(在大多數情況下是 x86)編譯和構建 Power Architecture 應用程序。從我們的用例中可以看到,toolchain 可生成像原生編譯的應用程序一樣高效地執行的二進制可執行程序和庫。而且,交叉編譯的庫與原生編譯的應用程序兼容。最後但同樣重要的是,交叉編譯的應用程序可在本地調試以及使用 gdb 調試器遠程調試。
PowerLinux toolchain 與在 x86 平台上使用原生 Linux toolchain 沒什麼不同。希望本文能讓讀者很好地了解 PowerLinux toolchain 的特性和功能。

閱讀全文

與x86虛擬機源碼相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163