亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2589 | 回復: 0
打印 上一主題 下一主題

移植 UNIX 應用到 IBM i PASE [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-01-18 13:10 |只看該作者 |倒序瀏覽
PASE 簡介
IBM i PASE(Portable Application Solution Environment)提供了一個集成的類 UNIX 的運行時環(huán)境,使得我們只要對 UNIX/Linux 應用程序做很少甚至不修改就能夠在 IBM i 上運行。PASE 同時提供了工業(yè)標準的及事實標準的 Shell 及工具,從而給我們提供了一個強大的腳本平臺。IBM i PASE 系統(tǒng)架構如圖 1 所示:

圖 1. IBM i PASE 系統(tǒng)架構

從中可以看出,PASE 環(huán)境不像 IBM i 原生環(huán)境下的應用程序,IBM i 原生環(huán)境下的應用程序通過 MI 層實現(xiàn)了硬件無關的特性。而 PASE 會跟底層的硬件有直接的交互,這使得 PASE 應用跟其它的 UNIX/Linux 應用一樣具有硬件依賴性;即當硬件升級時,需要重新編譯程序才能與新硬件兼容或者發(fā)揮新硬件的新特性。
移植UNIX應用到 IBM i PASE 帶來的好處有:
  • 利用現(xiàn)有的技能:
    對于應用的開發(fā)者來說,他們可以繼續(xù)使用他們已有的 UNIX 經(jīng)驗,并且只要掌握很少的 IBM i 技能;對于 IBM i 的客戶來說他們只要運行移植到 PASE 下的應用,而不需要額外的 UNIX 系統(tǒng);
  • 縮短產(chǎn)品推向市場的時間:
    如果要把一個 UNIX 產(chǎn)品一直到 IBM i 的原生環(huán)境下,那么將消耗極大的時間和人力。因為 IBM i 系統(tǒng)與 UNIX 系統(tǒng)有著截然不同的系統(tǒng)架構。而移植一個 UNIX 應用到 PASE,在大多數(shù)情況下我們只要做少量的修改甚至不修改就可以運行在 PASE 下,從而極大的減少了開發(fā)成本,加快產(chǎn)品推向市場的時間。


PASE 開發(fā)環(huán)境的搭建
以下具體介紹如何在 IBM i 上搭建 PASE 的開發(fā)環(huán)境。
1. 系統(tǒng)需求
在 IBM i 上運行 PASE 首先要滿足下面的系統(tǒng)需求。
  • 許可程序 SS1, option 33 - IBM i End of change Portable Application Solutions Environment (IBM i PASE);
  • 許可程序 SC1, option 1 - OpenSSH, OpenSSL, zlib functions, IBM Portable Utilities for i。
其中“SC1, Option 1”是可選的,如果安裝了該許可程序,那么我們可以通過 SSH 連接到 PASE 環(huán)境里,使得操作方式更像 UNIX 系統(tǒng)。
2. 安裝 RPM 軟件包管理器
您可以利用 RPM 軟件包管理器來管理 PASE 下的開源的 AIX 軟件。以下介紹如何在 PASE 上安裝 RPM:
  • 在 /QOpenSys 下創(chuàng)建一個子目錄, 這里將其命名為 rpm_inst;
  • 下載ftp://ftp.software.ibm.com/aix/f ... NSTALLP/ppc/rpm.rte到剛才創(chuàng)建的目錄/QOpenSys/rpm_inst中;
  • 執(zhí)行清單 1 中的命令:

清單 1. 安裝 RPM
        cd /QOpenSys/rpm_instrestore -xqf rpm.rtemv /QOpenSys/rpm_inst/usr/opt /QOpenSys/mv /QOpenSys/rpm_inst/var/lib /QOpenSys/varmv /QOpenSys/rpm_inst/var/opt /QOpenSys/varmkdir /optln -s /QOpenSys/opt/freeware /opt/freewareln -s /QOpenSys/var/opt /var/optcd /opt/freeware/libmv librpmbuild.so.0.0.0 librpmbuild.somv librpm.so.0.0.0 librpm.somv libpopt.so.0.0.0 libpopt.socd /QOpenSysrm -rf rpm_inst

注:忽略出現(xiàn)的所有告警信息。
3. 利用 RPM 軟件包管理器安裝開源的 UNIX 工具
http://www-03.ibm.com/systems/p/os/aix/linux/toolbox/download.htm 下載所需工具的安裝包。然后用 RPM 安裝到 PASE。下面以 gmake 為例示范 RPM 安裝,參見清單 2:

清單 2. 用 RPM 安裝 gmake
        rpm --ignoreos --ignorearch --nodeps -i -v make-3.80-1.aix5.1.ppc.rpm

注:忽略出現(xiàn)的所有告警信息。
絕大多數(shù)的 AIX 工具都能在 PASE 上運行,如 bash、gcc、vim、bash、gzip、gtar 等等。
4. 在 PASE 上安裝 IBM XL C/C++ for AIX
  • 將編譯器產(chǎn)品安裝 CD 插入 CD 驅(qū)動器;
  • 使用具有 *ALLOBJ 權限的用戶登陸系統(tǒng);
  • 在 PASE 下執(zhí)行清單 3 中的命令來恢復相應的編譯器安裝腳本:

清單 3. 用 RPM 安裝 gmake
        cd /restore -qf /QOPT/CDROM/USR/SYS/INST.IMA/VACPP.NDI ./usr/vacpp/bin/vacppndi

  • 運行清單 4 中的安裝腳本以安裝編譯器。編譯器的目標目錄由命令 -b 選項指定:

清單 4. 用 RPM 安裝 gmake
                /QIBM/ProdData/DeveloperTools/pase/bin/perl /usr/vacpp/bin/vacppndi -i –d \ /QOPT/CDROM/USR/SYS/INST.IMA -b /QOpenSys/xlcpp

安裝后可在 /QOpenSys/xlcpp/usr/vacpp/bin/ 中找到 XL C/C++ 編譯命令(例如, xlc)。可以將個目錄添加到系統(tǒng)路徑中:export $PATH=$PATH:/QOpenSys/xlcpp/usr/vacpp/bin。
至此 PASE 的開發(fā)環(huán)境已經(jīng)搭建完畢,我們可以開始進行 UNIX 應用的移植工作了。

移植 UNIX 應用到 PASE
1. 項目的配置
UNIX/Linux 應用通常用 Autoconfig 進行配置,下面我們講解如何進行項目的配置。
方法一:如果項目配置允許指定平臺信息,那么我們可以用 AIX 平臺的配置來配置 PASE 項目。通常 configure 允許用 --build 來指定 build 系統(tǒng)的信息,我們可以將其指定為 powerpc-ibm-aix,表示將在 AIX 系統(tǒng)中進行編譯。清單 5 以 ICU 為例:

清單 5. 項目配置
        export CC=xlc_rexport CXX=xlC_r./configure --build=powerpc-ibm-aix --enable-debug=yes --prefix=/QOpenSys/QIBM/ProdData/ICU/icu-4.0

方法二:在AIX系統(tǒng)中進行項目配置,配置完成后再將工程文件拷回到IBM i PASE下進行編譯調(diào)試。配置完工程后我們就可以運行gmake命令來編譯工程了。
2. 調(diào)用 ILE 下的 API
有時 PASE 下不支持某些 UNIX 下的 API 或者產(chǎn)品需要和 IBM i 的某些特性集成,需要調(diào)用 ILE 下的 API 來實現(xiàn)。PASE 提供了調(diào)用 ILE PGM/SVRPGM 接口。
當從 PASE 下調(diào)用 ILE PGM/SRVPGM 接口時,我們應該:
  • 確保 ILE 端程序支持 teraspace:所有支持從 PASE 下調(diào)用的 ILE PGM/SRVPGM 在編譯時必須將 teraspace 選項設成 *YES,否則會導致 PASE 調(diào)用時產(chǎn)生 MCH4433(無效存儲模式)錯誤。
  • 相關的頭文件:當需要從 PASE 調(diào)用 ILE API 時,應當包含 as400_types.h 和 as400_protos.h 這兩個頭文件。 這兩個頭文件包含了一些 IBM i 系統(tǒng)獨特數(shù)據(jù)類型及函數(shù)的定義。
  • 調(diào)用 ILE API:首先用 _ILELOAD 或 ILELOADX() 函數(shù)將 API 所在的對象加載到內(nèi)存中,再用 _ILESYM() 或 _ILESYMX() 函數(shù)找到 ILE API 的程序入口,最后用 ILECALL() 或 _ILECALLX() 來調(diào)用函數(shù)。
  • CCSID 編碼轉(zhuǎn)換:通常 ILE PGM/SRVPGM 接口返回的是 EBCDIC 編碼字符,PASE 程序用的是 ASCII 或 UNICODE 編碼。在使用這些 ILE API 返回的字符串前必須經(jīng)過適當?shù)霓D(zhuǎn)換。
示例代碼如清單 6 所示:

清單 6. 調(diào)用 ILE API
                #include <as400_types.h>#include <as400_protos.h>……/*ILE API _Ropen procedure wrapper*/ILEpointer _Ropen(const char * filename, const char * mode, ...){    va_list argList;    va_start(argList, mode);/* pointer to ILE procedure */        ILEpointer ILEtarget __attribute__((__aligned__(16)));         ILEarglist_base *ILEarglist;        ILEpointer rtnILEpointer __attribute__((__aligned__(16)));        char parms[48] = {0};    short signature[] =    {        ARG_MEMPTR,        ARG_MEMPTR,        ARG_MEMPTR,        PARM_END        };        _SETSPP(&rtnILEpointer,NULL);        ……      /* _ILELOADX() loads the service program */      actmark = _ILELOADX("QSYS/QC2IO", ILELOAD_LIBOBJ);      rc = _ILESYMX(&ILEtarget, actmark, "_Ropen");        memcpy(&parms[0], filename,sizeof(filename));    memcpy(&parms[16], mode,sizeof(mode));    memcpy(&parms[32], argList,sizeof(argList));    ILEarglist = (ILEarglist_base*)malloc( size_ILEarglist(signature));          /* * Build the argument list into an ILE arg list buffer * adhering to the signature provided */    build_ILEarglist(ILEarglist, parms, signature);              /*     * _ILECALL calls the ILE procedure. If an exception or signal     * occurs, the heap allocation is orphaned (storage leak)     */    rc = _ILECALL(ILEtarget, ILEarglist, signature, RESULT_VOID);    _MEMCPY_WT(&rtnILEpointer, & ILEarglist->result.r_aggregate, sizeof(ILEpointer));    return rtnILEpointer;}

調(diào)用 ILE PGM/SRVPGM 時的注意事項:
  • 當從 PASE 端調(diào)用 ILE PGM/SRVPGM 時,Activation group 需要被調(diào)用的程序具有 *CALLER 編譯選項,這是因為:
    • 只有運行在 activation group 的代碼才能使用 ILE 端的 API,例如 Qp2CallPase,從而與 PASE 端的程序進行交互;
    • 對于具有多線程的進程,如果在線程中被調(diào)用的 ILE 端程序需要銷毀 activation group 的時候,即使 PASE 端所起的所有的進程是線程安全的,ILE 端也可能結(jié)束整個進程(包括 PASE 端程序)。 這個時候你可以使用 ACTGRP(*CALLER) 來阻止你的進程被結(jié)束;
  • 避免上述多線程所帶來的問題,可以使用 systemCL() 來在一個獨立的進程里運行一個 IBM i CL 命令(包括CALL)。
3. 程序的調(diào)試
IBM i PASE 提供了基于命令行的 dbx 調(diào)試器及基于 GUI 的 System i5 調(diào)試器。關于 dbx 請參考 dbx 手冊或在線幫助。
System i5 調(diào)試器是基于 Java 技術的遠程調(diào)試工具,能運行于所有支持 Java GUI 的系統(tǒng)中。System i5 調(diào)試器要求運行于 Java 1.4 或以上版本,并要求系統(tǒng)有 Javahelp 的 jhall.jar。System i5 調(diào)試器的 jar 包(jt400.jar 和 tes.jar)可以從 IBM i 服務器的目錄 /QIBM/ProdData/HTTP/Public/jt400/lib/ 復制到調(diào)試客戶機上,并把以上的 jar 包加到 CLASSPATH 的環(huán)境變量中。
在使用 System i5 調(diào)試器前必須確保被調(diào)試的目標系統(tǒng)中調(diào)試服務是啟動的,如果未啟動,請用 STRTCPSVR *DBG 命令啟動。
接著可以用以下命令啟動調(diào)試管理器:java utilities.DebugMgr。啟動后的管理器界面如圖 2 所示:

圖 2. 調(diào)試管理器

點擊開始按鈕開始 PASE 程序的調(diào)試。

圖 3. 開始調(diào)試

System i5 調(diào)試器允許我們提交新的程序或者調(diào)試已經(jīng)運行的程序,選定后就可以啟動 PASE 的調(diào)試器了。PASE 的調(diào)試器非常簡單易用,這里就不詳細介紹了。

圖 4. PASE 調(diào)試器



結(jié)束語
IBM i PASE 環(huán)境提供了一個集成的類 UNIX 的運行時環(huán)境,使得我們只要對 UNIX 應用程序做很少甚至不修改就能夠在 IBM i 上運行,從而有效地擴大了 IBM i 平臺解決方案的組合,節(jié)省開發(fā)成本,加快了企業(yè)在 IBM i 平臺上對應產(chǎn)品推出速度。


作者簡介
應錦鑫是 2006 年加入 IBM 中國系統(tǒng)科技實驗室的軟件工程師,主要從事 IBM i 上 CIM Provider 的開發(fā)及 OpenPegasus 在 IBM i 上的移植工作。您可以訪問他在 developerWorks 社區(qū)中的概要信息。

趙新峰是 2008 年加入 IBM 中國系統(tǒng)科技實驗室的軟件工程師,主要從事 CIM Server for IBM i 項目的開發(fā)工作。所感興趣和專長的領域包括 CIM 架構,CIM Server 和 IBM i License Program 安裝和退出程序的開發(fā)。

劉立功是 2010 年加入 IBM 中國系統(tǒng)科技實驗室的軟件工程師,當前從事 IBM i 上 CIM產(chǎn)品的研發(fā),此外他還對 DMTF 標準化組織工作非常感興趣。


http://www.ibm.com/developerworks/cn/ibmi/library/i-cn-unixtopase/index.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP