① 請問怎樣perl程序文件編譯成可執行文件
於是就有此問。答案:在linux下可以使用PerlCC(本身就隨著PERL有的),他是把PERL轉換成C語言,然後編譯它。
如果在Windows下可以使用perl2exe(找破解版),建議使用PERLAPP(也就是ActivePERL的PDK套件),功能非常強大,不過是商業軟體,也可以去找一個破解版本(最新版是5.3XXX).
PDK可以把PERL腳本編譯成常規應用程序/WINDOWS SERVICE/工具欄程序等等.功能非常強大.也就是說你利用PERL編寫的腳本,在Windows上面做一服務程序,完全沒有問題.
② 使用pdk編譯perl腳本。顯示"unknown encoding 'gb2312'"
use Encode;
gb2312 = euc-cn
③ android系統app frameworks層,hal層,core libs代碼編譯之後在哪個鏡像里
Google提供的Android包含了原始Android的目標機代碼,主機編譯工具、模擬環境,的代碼包經過解壓後(這里是Android2.2的源碼包),源代碼的第一層目錄結構如下:
|-- Makefile
|-- bionic (bionic C庫)
|-- bootable (啟動引導相關代碼)
|-- build (存放系統編譯規則及generic等基礎開發包配置)
|-- cts (Android兼容性測試套件標准)
|-- dalvik (dalvik java虛擬機)
|-- development (應用程序開發相關)
|-- external (android使用的一些開源的模組)
|-- frameworks (核心框架——java及C++語言)
|-- hardware (主要保護硬解適配層HAL代碼)
|-- libcore
|-- ndk
|-- device
|-- out (編譯完成後的代碼輸出與此目錄)
|-- packages (應用程序包)
|-- prebuilt (x86和arm架構下預編譯的一些資源)
|-- sdk (sdk及模擬器)
|-- system (文件系統庫、應用及組件——C語言)
`-- vendor (廠商定製代碼)
bionic 目錄
|-- libc (C庫)
| |-- arch-arm (ARM架構,包含系統調用匯編實現)
| |-- arch-x86 (x86架構,包含系統調用匯編實現)
| |-- bionic (由C實現的功能,架構無關)
| |-- docs (文檔)
| |-- include (頭文件)
| |-- inet
| |-- kernel (Linux內核中的一些頭文件)
| |-- netbsd (?netbsd系統相關,具體作用不明)
| |-- private (?一些私有的頭文件)
| |-- stdio (stdio實現)
| |-- stdlib (stdlib實現)
| |-- string (string函數實現)
| |-- tools (幾個工具)
| |-- tzcode (時區相關代碼)
| |-- unistd (unistd實現)
| `-- zoneinfo (時區信息)
|-- libdl (libdl實現,dl是動態鏈接,提供訪問動態鏈接庫的功能)
|-- libm (libm數學庫的實現,)
| |-- alpha (apaha架構)
| |-- amd64 (amd64架構)
| |-- arm (arm架構)
| |-- bsdsrc (?bsd的源碼)
| |-- i386 (i386架構)
| |-- i387 (i387架構?)
| |-- ia64 (ia64架構)
| |-- include (頭文件)
| |-- man (數學函數,後綴名為.3,一些為freeBSD的庫文件)
| |-- powerpc (powerpc架構)
| |-- sparc64 (sparc64架構)
| `-- src (源代碼)
|-- libstdc++ (libstdc++ C++實現庫)
| |-- include (頭文件)
| `-- src (源碼)
|-- libthread_db (多線程程序的調試器庫)
| `-- include (頭文件)
`-- linker (動態鏈接器)
`-- arch (支持arm和x86兩種架構)
bootable 目錄
|-- bootloader (適合各種bootloader的通用代碼)
| `-- legacy (估計不能直接使用,可以參考)
| |-- arch_armv6 (V6架構,幾個簡單的匯編文件)
| |-- arch_msm7k (高通7k處理器架構的幾個基本驅動)
| |-- include (通用頭文件和高通7k架構頭文件)
| |-- libboot (啟動庫,都寫得很簡單)
| |-- libc (一些常用的c函數)
| |-- nandwrite (nandwirte函數實現)
| `-- usbloader (usbloader實現)
|-- diskinstaller (android鏡像打包器,x86可生產iso)
`-- recovery (系統恢復相關)
|-- edify (升級腳本使用的edify腳本語言)
|-- etc (init.rc恢復腳本)
|-- minui (一個簡單的UI)
|-- minzip (一個簡單的壓縮工具)
|-- mttils (mtd工具)
|-- res (資源)
| `-- images (一些圖片)
|-- tools (工具)
| `-- ota (OTA Over The Air Updates升級工具)
`-- updater (升級器)
build目錄
|-- core (核心編譯規則)
|-- history (歷史記錄)
|-- libs
| `-- host (主機端庫,有android 「cp」功能替換)
|-- target (目標機編譯對象)
| |-- board (開發)
| | |-- emulator (模擬器)
| | |-- generic (通用)
| | |-- idea6410 (自己添加的)
| | `-- sim (最簡單)
| `-- proct (開發對應的編譯規則)
| `-- security (密鑰相關)
`-- tools (編譯中主機使用的工具及腳本)
|-- acp (Android "acp" Command)
|-- apicheck (api檢查工具)
|-- applypatch (補丁工具)
|-- apriori (預鏈接工具)
|-- atree (tree工具)
|-- bin2asm (bin轉換為asm工具)
|-- check_prereq (檢查編譯時間戳工具)
|-- dexpreopt (模擬器相關工具,具體功能不明)
|-- droiddoc (?作用不明,java語言,網上有人說和JDK5有關)
|-- fs_config (This program takes a list of files and directories)
|-- fs_get_stats (獲取文件系統狀態)
|-- iself (判斷是否ELF格式)
|-- isprelinked (判斷是否prelinked)
|-- kcm (按鍵相關)
|-- lsd (List symbol dependencies)
|-- releasetools (生成鏡像的工具及腳本)
|-- rgb2565 (rgb轉換為565)
|-- signapk (apk簽名工具)
|-- soslim (strip工具)
`-- zipalign (zip archive alignment tool)
dalvik目錄 dalvik虛擬機
.
|-- dalvikvm (main.c的目錄)
|-- dexmp (dex反匯編)
|-- dexlist (List all methods in all concrete classes in a DEX file.)
|-- dexopt (預驗證與優化)
|-- docs (文檔)
|-- dvz (和zygote相關的一個命令)
|-- dx (dx工具,將多個java轉換為dex)
|-- hit (?java語言寫成)
|-- libcore (核心庫)
|-- libcore-disabled (?禁用的庫)
|-- libdex (dex的庫)
|-- libnativehelper (Support functions for Android's class libraries)
|-- tests (測試代碼)
|-- tools (工具)
`-- vm (虛擬機實現)
development 目錄 (開發者需要的一些常式及工具)
|-- apps (一些核心應用程序)
| |-- BluetoothDebug (藍牙調試程序)
| |-- CustomLocale (自定義區域設置)
| |-- Development (開發)
| |-- Fallback (和語言相關的一個程序)
| |-- FontLab (字型檔)
| |-- GestureBuilder (手勢動作)
| |-- NinePatchLab (?)
| |-- OBJViewer (OBJ查看器)
| |-- SdkSetup (SDK安裝器)
| |-- SpareParts (高級設置)
| |-- Term (遠程登錄)
| `-- launchperf (?)
|-- build (編譯腳本模板)
|-- cmds (有個monkey工具)
|-- data (配置數據)
|-- docs (文檔)
|-- host (主機端USB驅動等)
|-- ide (集成開發環境)
|-- ndk (本地開發套件——c語言開發套件)
|-- pdk (Plug Development Kit)
|-- samples (演示程序)
| |-- AliasActivity ()
| |-- ApiDemos (API演示程序)
| |-- BluetoothChat (藍牙聊天)
| |-- BrowserPlugin (瀏覽器插件)
| |-- BusinessCard (商業卡)
| |-- Compass (指南針)
| |-- ContactManager (聯系人管理器)
| |-- CubeLiveWall** (動態壁紙的一個簡單常式)
| |-- FixedGridLayout (像是布局)
| |-- GlobalTime (全球時間)
| |-- HelloActivity (Hello)
| |-- Home (Home)
| |-- JetBoy (jetBoy游戲)
| |-- LunarLander (貌似又是一個游戲)
| |-- MailSync (同步)
| |-- MultiResolution (多解析度)
| |-- MySampleRss (RSS)
| |-- NotePad (記事本)
| |-- RSSReader (RSS閱讀器)
| |-- SearchableDictionary (目錄搜索)
| |-- **JNI (JNI常式)
| |-- SkeletonApp (空殼APP)
| |-- Snake (snake程序)
| |-- SoftKeyboard (軟鍵盤)
| |-- Wiktionary (?維基)
| `-- Wiktionary**(?維基常式)
|-- scripts (腳本)
|-- sdk (sdk配置)
|-- simulator (?模擬器)
|-- testrunner (?測試用)
`-- tools (一些工具)
④ 高分求教:如何架設linux無盤工作站
總的來說,無盤工作站是由網卡的啟動晶元(Boot ROM,有此網卡的啟動程序已嵌入主板的BIOS中,無需啟動晶元)以不同的形式向伺服器發出啟動請求號,伺服器收到後,根據不同的機制,向工作站發送啟動數據,工作站下載完啟動數據後,系統控制權由Boot ROM轉到內存中的某些特定區域,並引導操作系統。根據不同的啟動機制,目前比較常用無盤工作站可分為RPL、PXE和 虛擬硬碟等啟動類型,而Windows 2000終端從其原理來說,並不屬於無盤工作站,它也可以用終端卡或硬碟引導系統,進入工作站操作系統後,再連接Windows2000 伺服器,而這個連接程序與一般的應用軟體並沒有什麼本質區別,我們把它歸結到無盤網路的原因是:目前大多數的終端都是先通過RPL或PXE啟動無盤到DOS或Windows3x,再從無盤站中連接,成為終端,總之本文所指無盤網路,泛指工作站中沒有軟碟機和硬碟的網路,無論它是採取何種方式達到這一目的的,目前台灣順昱公司研發的基於Electronic Disk Communication電子硬碟(eDisk)系統,我們將它稱為偽無盤系統,但因它也具備無盤網路的特點,所以也可以把它歸結到無盤網路中來。
近年來,無盤技術發展十分迅速,產生了大量的分支,因此根據角度的不同,主要有以下幾種分類方式:
1. 按啟動類型主要有:RPL、PXE和Bootp。
2. 按工作站的操作系統:DOS無盤系統、Windows 32無盤系統、Windows 95無盤系統、Windows 98無盤系統、純Windows 2000及 XP 無盤系統、Windows 2000終端及Windows XP遠程桌面。
3. 按伺服器操作系統:基於Windows 2000的無盤系統、基於Windows NT 4.0的無盤系統、基於Windows XP下的無盤系統、基於Novell NetWare的無盤系統及基於Linux的無盤系統,甚至還有基於Windows 98的無盤系統,也就是說用Windows 98作伺服器。
4. 根據系統是否具有移植能力可以分為:PNP(即插即用)系統非PNP系統。
5. 根據所使用工具的不同進行分類: 使用Intel PDK+Litenet的無盤系統、使用國產相關第三方工具的無盤系統、使用Boot-NIC+3COM PXE的無盤系統。
6. 按虛擬磁碟分類:3Com VLD、Boot-NIC、BXP和Edisk等。
以上分類是可以組合有的,例如:基於Windows 2000 Server+3Com Dabs+Litenet15的PXE無盤Windows 98系統,請注意它們間的組合並不是任意的,例如基於Windows NT的RPL 純無盤Windows 2000就是不存在的。
1. RPL啟動工作原理
RPL為Remote Initial Program Load的縮寫,啟動過程分析如下:
客戶機開機後,初始化網卡,網卡BootROM上固化的軟體向網路廣播一個FIND幀,即引導請求幀,該幀中包含有客戶機的網卡ID號。
伺服器端的遠程啟動服務接收到客戶機廣播的FIND 幀後,根據幀中所帶的網卡ID號在遠程啟動資料庫中查找相應的工作站記錄,如果不存在這樣一個記錄,引導過程不能繼續;如果此工作站記錄已經存在,遠程啟動服務則發送一個FOUND 幀給客戶機的RPLROM,FOUND幀中已包含了伺服器的網卡ID。
當網路上有數台伺服器在運行遠程啟動服務時,RPLROM有可能會接收到多個FOUND幀,但RPLROM只對它收到的第一個FOUND幀有反應,它將根據第一個FOUND幀中所帶的伺服器網卡ID號,返回一個SEND.FILE.REQUEST幀給對應的伺服器。SEND.FILE.REQUEST幀是一個要求伺服器發送文件的請求。
伺服器端的遠程啟動服務在收到SEND.FILE.REQUEST幀後,將根據遠程啟動資料庫中的工作站記錄查找對應的啟動塊(BootBlock)——在實際配置時我們知道,它位於NETBEUI目錄,名為DOSBB.CNF和W95BB.CNF——用FILE.DAT.RESPONSE幀將啟動塊送回客戶機端的RPLROM。
RPLROM在收齊所有的FILE.DAT.RESPONSE幀後,將執行點轉向啟動塊的入口,啟動工作站。工作站以Windows 95實模式啟動後,將創建一個RAM盤,並將Windows 95實模式文件從遠程啟動伺服器拷貝到RAM盤,載入Windows 95實模式網路設備啟動並建立一個到SBS伺服器的連接。最後,連接到該客戶機的計算機目錄(Machine Directory)所在的伺服器上,並根據計算機目錄中的有關設置及數據完成Windows 95啟動過程。
2 PXE啟動原理
推出了PXE遠程無盤引導技術是由Intel推出的,配合Qualystem公司的LiteNet,最初選用台灣DTK公司的E-Terminal,成功地實現了Windows 98的遠程啟動和運行,並使可靠性和穩定性都大大提高。Windows 98的各種應用軟體只需通過簡單的幾個步驟即可加到無盤工作站上,並可隨時升級和擴充,其簡便的安裝方式和構架,很快得到了業內人士的認可,並廣泛流行起來。
PXE是RPL的升級品,它是Preboot Execution Environment的縮寫,意思為預置啟動環境。它們的不同之處在於RPL是靜態路由,而PXE是動態路由。其通信協議採用TCP/IP,與Internet連接高效而可靠,PXE無盤工作站的啟動過程分析如下:
¨ 客戶端個人電腦開機後, 在 TCP/IP Bootrom 獲得控制權之前先做自我測試。
¨ Bootprom 送出 BOOTP/DHCP 要求以取得 IP。
¨ 如果伺服器收到個人電腦所送出的要求, 就會送回 BOOTP/DHCP 回應,內容包括:客戶端的 IP 地址,預設網關,及開機影像文件。否則, 伺服器會忽略這個要求。
¨ Bootprom 由 TFTP 通訊協議從伺服器下載開機影像文件。TFTP協議為Trivial File Transfer Protocol縮寫,意為:簡單文件傳輸協議,TFTP可以看成一個簡化了的FTP,主要的區別是沒有用戶許可權管理的功能,也就是說TFTP不需要認證客戶端的許可權,這樣遠程啟動的客戶機在啟動一個完整的操作系統之前就可以通過TFTP下載啟動映象文件,而不需要證明自己是合法的用戶。
¨ 客戶機通過這個開機影像文件開機,這個開機文件可以只是單純的開機程序也可以是操作系統。
¨ 開機影像文件將包含 kernel loader 及壓縮過的 kernel, 此 kernel 將支持NTFS root系統。
¨ 並開機影像文件在工作站內存模擬成磁碟,從這個模擬磁碟啟動。
¨ 在實模式下連接伺服器,將無盤啟動預置好各種環境,例如操作系統所在路徑,相關注冊表的調整等。
¨ 實模式向保護模式下切換。(最後兩點只有無盤Windows 98時才存在)
PXE有以下優點:
¨ 因為其能支持Windows 98遠程啟動,所以現有的各種應用軟體都能得到非常好的應用。由於系統本機內存為64MB,虛擬內存大小可在伺服器自由設定,另具有3D圖形視覺增強和AC97 CODEC軟體音頻功能,相對終端或RPL Windows 95來說增強了多媒體功能。
¨ PXE還有一個最大的優點就是安全性,不管多少個台工作站,系統和應用軟體只需安裝一套 ,對用戶的許可權是在伺服器上設定的,用戶可以在自己的目錄下隨便操作,若有了誤操作,重新啟動便可以完全恢復。
¨ 操作維護簡便,升級軟體只需向伺服器重新傳一遍系統,所有工作站便已全部升級了。工作站的ip地址由伺服器自動給予,不用逐台設置。
¨ 多種操作系統及網路產品都支持PXE,作為新一代遠程啟動技術的代表各大公司的軟硬產品都支持PXE系統。例如:Intel公司的PXE PDK、3Com Dabs和Linux。很多內置網卡的主板都預置這PXE啟動代碼,這給PXE技術的發展奠定的良好的基矗
3. BOOTP協議原理
BOOTP的是BOOTSTRAP PROTOCOL的簡稱,是一種比較早出現的遠程啟動的協議,Bootp最早出在UNIX系統中,負責Unixt終端的遠程啟動,直到目前仍是UNIX及之後的Linux系統中最常用的方式,它在基於Windows的無盤網路運用較少,但隨著Windows 2000不支持RPL遠程啟動,並且以TCP/IP作為默認安裝網路協議,逐步表明今後的Windows也將以TCP/IP協議作為主要的發展方向,純TCP/IP的網路將是今後發展的方向。
我們經常用到的DHCP服務就是從BOOTP服務擴展而來的。BOOTP協議使用TCP/IP網路協議中的UDP 67/68兩個通訊埠。 BOOTP主要是用於無磁碟的客戶機從伺服器得到自己的IP地址、伺服器的IP地址、啟動映象文件名、網關IP等等。它的簡單啟動過程為:
¨ 由BOOTROM晶元中的BOOTP啟動代碼啟動客戶機,此時客戶機還沒有IP地址,它就用廣播形式以IP地址0.0.0.0向網路中發出IP地址查詢的請求,這個請求幀中包含了客戶機的網卡MAC地址。
¨ 網路中的運行BOOTP服務的伺服器接收到的這個請求幀,根據這幀中的MAC地址在BOOTPTAB啟動資料庫中查找這個MAC的記錄,如果沒有此MAC的記錄則不響應這個請求,如果有就將FOUND幀發送回客戶機。FOUND幀中包含的主要信息有客戶機的IP地址、伺服器的IP地址、硬體類型、網關IP地址、客戶機MAC地址和啟動映象文件名。
¨ 客戶機就根據ROUND幀中的信息通過TFTP伺服器下載啟動映象文件,並將此文件在工作站內存模擬成磁碟,從這個模擬磁碟啟動。
在PXE啟動中可以採用動態分配IP的DHCP方式,也可以採用固定IP方式的BOOTP方式,但它的應用場合不同,若為單一的無盤網路可採用DHCP方式簡化管理,若為多個網路互連的結構,則使用指定IP的Bootp方式更為合理一些。
4 Windows 2000終端(WBT)的特點及純軟體終端啟動原理
WBT(Windows Based Termintal)是Windows2000 Server/Advanced Server推出的一項標准服務,它允許用戶以Windows界面的客戶端訪問伺服器,運行伺服器中的應用程序,使用戶就像用自己的計算機一樣。 在WBT的網路中,所有應用軟體的安裝、配置、運行和存儲等均在伺服器上進行,客戶機(終端)只作為輸入輸出設備。當終端用戶登錄到伺服器後,就可以像使用本地資源一樣使用伺服器上的資源,運行伺服器上Windows應用程序。多個終端用戶可以同時登錄到伺服器上,互不影響地工作。這樣的網路十分容易進行集中管理,很適合學校和中小企業的區域網構建。WBT的這一特點跟早期的UNIX的字元終端類似,但WBT的優勢在於它是基於Windows的,具有友好的圖形界面和Windows的易用性。另外,在WBT的網路環境下,網路傳輸的數據主要是鍵盤和滑鼠的輸入信息與顯示器的輸出信息,數據的處理都在伺服器上進行,這就大大減少了網路的傳輸量。
此方案中將原本要淘汰的386、486計算機作為終端使用,有利於資源的再利用;同時,安裝軟體及運算等都在伺服器上進行,一般情況只需維護一台伺服器就行,對於軟體及防病毒的管理也降低了,所以利用該方案大大降低了總體擁有成本,節省了大量的資金。它有以下一些特點:
¨ 運算、存儲都在伺服器內進行,安裝軟體只需安裝在伺服器上一份,所有終端就都可以使用;所有終端用戶的文件都各自獨立地存放在伺服器上,即使掉電,也不會造成資料丟失;
¨ 機房維護由維護每一台PC,轉變為維護一台伺服器,維護成本大大降低;總擁有成本(TCO)大大降低;
¨ Windows2000 伺服器版本是最新的伺服器操作系統,性能非常穩定,整個系統的穩定性得到可靠保障;
¨ Windows2000 終端的界面是標準的 Windows風格界面,使用最新的Windows2000 的界面,用戶非常熟悉,無需特殊培訓;
¨ 能滿足對網際網路的需求;應用當今流行軟體時單機反映速度快;使用 Windows終端與使用PC完全相同,所以在 Windows終端上的學習經驗,可以應用到PC上;
¨ 管理和控制性強:終端伺服器能夠對終端進行管理,設定終端機運行的軟體,同時能對終端機進行隨時監控。
純軟體終端的啟動原理:它的啟動原理前一部分與RPL或PXE無盤啟動原理完全相同,這里就不再詳述了,後一部分的連接是基於Windows 2000多用戶、多任務的基礎上的終端服務,在工作站上安裝由微軟提供的32位的連接程序,或由第三方的提供的16位或32位在DOS、Windows 3x或Windows 9x無盤站安裝連接程序,並設置好連接屬性,然後在啟動無盤站時將其連接命令加到DOS站的開機批處理,或加到無盤Windows 的啟動組,使其自動連接Windows 2000伺服器。在終端安裝Windows CE,伺服器端安裝Windows 2000專業版,終端啟動以後透過RDP協議運行伺服器端的應用程序,伺服器端進行應用程序運算後同樣透過RDP協議將結果在終端顯示。
5 基於虛擬硬碟的無盤網路
所謂虛擬硬碟方式,指的是在工作站啟動時,用軟體將部分內存結合伺服器的一塊硬碟空間,為工作站虛擬出一個或多個本地硬碟的方式,例如:早期的3Com VLD系統、較新的Boot-NIC系統和最新的BXP系統,也有一些基於硬體的虛擬硬碟的解決方案,例如:Edisk 系統。目前只有基於虛擬硬碟的無盤網路能夠很好地解決系統文件共享沖突的問題,且很容易實現多種操作系統的無盤啟動,即工作站可以無盤啟動Windows 2000、Windows XP 甚至是Linux。
基於虛擬硬碟的無盤網路的工作原理:
對於純軟體方式,一般是先在有盤工作站作好一個為系統,再上傳至伺服器為工作站准備的虛擬硬碟文件中。無盤啟動時,先以PXE的方式啟動到實模式下,連接伺服器,並根據配置文件連接虛擬硬碟映象文件,再將控制權轉到虛擬硬碟中,從而完成保護模式下的切換。
對於基於硬體的虛擬硬碟方式,它是通過最標准、最普及的乙太網絡(Ethernet)用來傳輸eHD與eDisk間的數據,它們是建立在eDC傳輸協議基礎之上的。(eDC全名是Electronic Disk Communication.台灣順昱公司研發出一種傳輸協議),實現了Client SAN即客戶端儲存區域網絡架構,它具有早期大型機體系的集中管理集中存儲的優點,又有NC的分布式計算的特性(即完全利用了Client的硬體資源),還有對個人用戶來說完全和PC一樣,不論軟硬體的使用,功能和兼容性.即整個客戶端儲存區域網絡Client SAN的應用效果和使用方法與真正PC聯網一樣,但又管理容易,大幅度降低了企業IT環境的服務可用性總成本(total cost of service availability , TCSA)但一次性軟硬體投資較大,在一些對多媒體性能要求較高的場合可以考慮使用。