命令:
rpm -i 需要安裝的包文件名
舉例如下:
rpm -i example.rpm 安裝 example.rpm 包;
rpm -iv example.rpm 安裝 example.rpm 包并在安裝過程中顯示正在安裝的文件信息;
rpm -ivh example.rpm 安裝 example.rpm 包并在安裝過程中顯示正在安裝的文件信息及安裝進度;
RPM 查詢操作
命令:
rpm -q …
附加查詢命令:
a 查詢所有已經(jīng)安裝的包以下兩個附加命令用于查詢安裝包的信息;
i 顯示安裝包的信息;
l 顯示安裝包中的所有文件被安裝到哪些目錄下;
s 顯示安裝版中的所有文件狀態(tài)及被安裝到哪些目錄下;以下兩個附加命令用于指定需要查詢的是安裝包還是已安裝后的文件;
p 查詢的是安裝包的信息;
f 查詢的是已安裝的某文件信息;
舉例如下:
rpm -qa | grep tomcat4 查看 tomcat4 是否被安裝;
rpm -qip example.rpm 查看 example.rpm 安裝包的信息;
rpm -qif /bin/df 查看/bin/df 文件所在安裝包的信息;
rpm -qlf /bin/df 查看/bin/df 文件所在安裝包中的各個文件分別被安裝到哪個目錄下;
RPM 卸載操作
命令:
rpm -e 需要卸載的安裝包
在卸載之前,通常需要使用rpm -q …命令查出需要卸載的安裝包名稱。
舉例如下:
rpm -e tomcat4 卸載 tomcat4 軟件包
RPM 升級操作
命令:
rpm -U 需要升級的包
舉例如下:
rpm -Uvh example.rpm 升級 example.rpm 軟件包
RPM 驗證操作
命令:
rpm -V 需要驗證的包
舉例如下:
rpm -Vf /etc/tomcat4/tomcat4.conf
輸出信息類似如下:
S.5....T c /etc/tomcat4/tomcat4.conf
其中,S 表示文件大小修改過,T 表示文件日期修改過。限于篇幅,更多的驗證信息請您參考rpm 幫助文件:man rpm
RPM 的其他附加命令
--force 強制操作 如強制安裝刪除等;
--requires 顯示該包的依賴關系;
--nodeps 忽略依賴關系并繼續(xù)操作
]]>有很多人都說Ubuntu和Fedora有很多相似之處,但就發(fā)布日期來說就非常接近。這兩個版本的發(fā)布周期大致相同,六個月發(fā)布一次,都在春季和秋季發(fā)布主要版本。這不10月10日Ubuntu 10.10的發(fā)布似乎還近在眼前呢,我們又迎來了Fedora 14的閃亮登場。
代號“Laughlin”的Fedora 14在11月2日如期發(fā)布。Fedora 14使用Linux 2.6.35版核心與KDE 4.5.2、GNOME 2.32桌面環(huán)境,把RedHat的虛擬桌面架構(VDI,virtual desktop infrastructure) Spice完整加入,該功能讓Fedora可以主控虛擬桌面,讓遠端用戶自網(wǎng)路登入使用。 Spice具有2D加速、處理音訊播放與錄制、加密連線等特性。
這次的正式版添加了之前的測試版沒有的新功能,那就是系統(tǒng)工具鏈升級及D語言支持。不過,F(xiàn)edora 14的桌面設置還是搶先吸引了用戶的眼球。Fedora 14的桌面是GNOME的最新發(fā)布版本GNOME2.32。相比較Ubuntu最近才開始使用GNOME,F(xiàn)edora 14則一直堅持使用GNOME。這個完整的發(fā)行版還包括最新版本的桌面KDE4.5.2。
從最新的試用體驗來看,F(xiàn)edora 14以藍色為主題的GNOME桌面使用起來很有樂趣。在它上面你可以找到平時使用的Linux桌面程序。這些程序包括網(wǎng)頁瀏覽Firefox;即時通訊的Empathy;電子郵件和群組軟件Evolution;以及辦公軟件Openoffice。展望未來,F(xiàn)edora的團隊還沒有承諾轉換到 OpenOffice fork,LibreOffice,看來或許會和Ubuntu的下一個版本步調(diào)一致吧!
Fedora 14的另一個亮點則是納入了使用環(huán)境MeeGO 1.0,趕上熱門的平板電腦話題。這個由Intel及Nokia合作推廣的技術搭配Sugar CRM展示版、開發(fā)工具使用,展現(xiàn)平板電腦在商務上的應用,與一般平板電腦所強調(diào)的多媒體休閑走向大異其趣。
另一方面,在Fedora中有一些非常靈巧的新功能,使之能很好的工作。我不得不說相比于那些使用Fedora系統(tǒng)開發(fā)者和管理者,這些新功能更加適合于Fedora家庭用戶。
但最重要的是獨立計算機環(huán)境的簡單協(xié)議(SPICE)的到來。這是一個桌面介紹的服務協(xié)議,如微軟的RDP(遠程桌面協(xié)議)和Citrix的ICA(獨立計算架構),你用來運行精簡電腦的桌面。
還有一個很有意思的特點是你不需要在你自己的桌面或服務器上自己運行Fedora。你現(xiàn)在就可以在亞馬遜靈活計算機云(EC2)的服務器上運行Fedora。
該測試版原來還有個隱藏性功能Systemmd,可以快速啟動整個系統(tǒng),并自動裝、卸各項服務,亦可制作系統(tǒng)狀態(tài)快照或追蹤系統(tǒng)、服務及附加套件等各種程序。但是在版本開發(fā)的最后階段被推遲了,計劃將在Fedora 15中和大家見面。那么到底是什么原因?qū)е耂ystemmd功能最終被擱置呢?本次專輯我們將帶給大家官方的相關解答,有興趣的朋友可別錯過了。
開篇我們就提到,有很多人都說Ubuntu和Fedora有很多相似之處,但是Ubuntu10.10和Fedora 14注重的側重點還是大不相同的。Ubuntu主要關注于10.04版本的完善,而Fedora 14則重點關注于系統(tǒng)基礎設施的完善。那么這兩個版本究竟都更新了哪些部分呢?又有什么不同呢?有心要比較的朋友,不妨通過本次專輯先來品評一翻吧!
既然Ubuntu和Fedora非常相似,那么作為用戶來說卻面臨了選擇的難題。在Red Hat的支持下,F(xiàn)edora一直領跑社區(qū)版linux系統(tǒng)。但隨著Canonical公司支持一些開源軟件開發(fā)者,2004年,在Debian的基礎上推出了Ubuntu,情況就有所改變,時至今日,可以說Ubuntu是穩(wěn)穩(wěn)地占據(jù)著Linux排行榜的寶座。
這兩款操作系統(tǒng)毫無疑問都給人留下深刻印象,所以,很多初嘗linux操作系統(tǒng)的人,也時常糾結一個問題:選擇誰作為你第一個學習的linux操作系統(tǒng)?這里編者通過整理資料呈現(xiàn)兩者的微妙差別,試圖為你選擇一款適合自己學習的linux系統(tǒng)作為依據(jù)。Linux的新人們不妨通過本次專輯來做一下自己的選擇吧!
Ubuntu 10.10已經(jīng)于十月登場了,如今Fedora 14帶著最新的開源技術全面來襲,那么哪個更合用戶的胃口呢?大家還是先去試試Fedora 14,再下定論吧!
]]>1:
mipsel-linux-gcc xxxx.o -L/xxxx/lib -lixml -lthreadutil -lpthread -lupnp -o ushare -static
/xxxx/upnpapi.c:216: undefined reference to `pthread_rwlock_init'
應該使用下面的命令
mipsel-linux-gcc -o ushare -static -Wall -Wl,--start-group xxxxxx.o -L/xxxx/lib -lixml -lthreadutil -lpthread -lupnp -Wl,--end-group
原因未知
2:
echo -ne "string \n" -ne參數(shù)解釋轉義字符
-n do not output the trailing newline
-e enable interpretation of the backslash-escaped characters listed
below
3:
sed /^$/d 刪除文件中的空行
全速運行、待機和睡眠等宏觀行為利用CPU的固有能力通過降低工作電壓或時鐘頻率來節(jié)省功耗。除了全面地改變系統(tǒng)狀態(tài)外,大多數(shù)設備用戶察覺不到的是,實際的電源管理也能夠逐漸地改變系統(tǒng)狀態(tài),這種情況在一秒之內(nèi)可以發(fā)生數(shù)百次。
任何動態(tài)電源管理策略的基礎都是調(diào)整便攜式設備中一個或多個處理器內(nèi)核的工作電壓和頻率,此外,在高集成度的PowerPC、ARM和基于x86的系統(tǒng)中經(jīng)常包含一個DSP或智能基帶處理器。的確,諸如英特爾的StrongARM和XScale處理器、TI的OMAP處理器系列以及IBM最近發(fā)布的PowerPC 405LP和Transmeta Crusoe等CPU都提供內(nèi)核電壓和頻率的動態(tài)調(diào)節(jié)功能。不過,現(xiàn)代的嵌入式處理器具有非常高的電源效率,以至于CPU并不總是最主要的耗能器件,其它高耗能的器件包括高性能存儲器、彩色顯示器和射頻接口等。因此,如果動態(tài)電源管理系統(tǒng)只能調(diào)節(jié)處理器內(nèi)核的電壓和頻率,那么它的用途將有限。
一個真正有用的動態(tài)電源管理方案應該可以采用與CPU內(nèi)核運行相協(xié)調(diào)或相獨立的方式,???持對一系列電壓和時鐘的快速調(diào)節(jié)。
DPM架構
兩個現(xiàn)有的電源管理方案分別來自于PC和筆記本電腦領域:一個是傳統(tǒng)的高級電源管理(APM)方案,它目前仍然使用在許多基于Linux的便攜設備中,但在基于微軟操作系統(tǒng)的筆記本電腦和手持設備中已經(jīng)被逐步淘汰;另一個是高級配置和電源接口(ACPI)方案,它是英特爾、東芝和其他一些公司???持的現(xiàn)行標準。在PC、筆記本電腦、服務器、甚至刀片式通信設備等商業(yè)硬件中,類似ACPI的系統(tǒng)是人們的首選,但它強烈依賴于流行的x86/IA-32 BIOS 架構。
嵌入式系統(tǒng)通常沒有類似于PC中的BIOS,而且通常不具備那么高的機器抽象水平,能夠把操作系統(tǒng)與低層次的設備和電源管理活動隔離開來。與其它瞄準電池供電應用的操作系統(tǒng)類似,在嵌入式Linux中,電源管理活動需要對操作系統(tǒng)內(nèi)核和設備驅(qū)動程序進行特殊的干預。不過,需要重點強調(diào)的是,雖然低層次的動態(tài)電源管理是駐留在操作系統(tǒng)內(nèi)核中,但電源管理策略和機制是來源于中間件和用戶應用代碼。
接口和API
理想的電源管理系統(tǒng)應盡可能對更多軟件堆棧層達到幾乎完全透明的程度。事實上,這是Transmeta公司在其Crusoe架構中所遵循的路線,而且已經(jīng)成為基于BIOS的現(xiàn)有電源管理方案追求的目標。然而,具備手持設備設計經(jīng)驗的開發(fā)人員證實,系統(tǒng)內(nèi)部各部分之間需要某種程度的直接合作,具體描述如下:
內(nèi)核接口
在面向Linux的DPM架構中,內(nèi)核中的DPM子系統(tǒng)負責維持整個系統(tǒng)的電源狀態(tài),并把DPM系統(tǒng)的不同電源管理模塊聯(lián)系在一起。如果內(nèi)核的任何其它部分需要與DPM直接對話(盡管這種情況相對較少),那么最好把DPM看成是為驅(qū)動程序、中間件和應用程序提供服務的元素。
驅(qū)動程序接口
???持DPM功能的設備驅(qū)動程序比默認的驅(qū)動程序更了解系統(tǒng)狀態(tài):它們在外部事件的驅(qū)使下通過設定不同的狀態(tài)來反映或遵循那些操作機制,或者通過來自內(nèi)核DPM子系統(tǒng)的調(diào)用來反映或遵循那些操作機制。為了實現(xiàn)更精確的機制決策,驅(qū)動程序API也允許驅(qū)動程序注冊與它們接口或由它們管理的那些設備的基礎操作特征。
應用程序API
應用程序可以分為三類:
*電源管理知會型(PM-aware)應用程序
*在電源管理知會“包裹器”中的傳統(tǒng)應用程序
*不帶有電源管理的傳統(tǒng)應用程序
電源管理知會型應用程序能夠利用機制管理器提供的API,建立其基本的約束條件,并強迫電源管理機制發(fā)生與其執(zhí)行需求相匹配的變化。不直接帶有電源管理能力的傳統(tǒng)應用程序能夠被“包裹”在代碼或補丁中,以達到較高的效率,但它們也能夠根據(jù)更大范圍的默認機制管理,按默認的行為運行。
在嵌入式Linux DPM下的實際機制包括以下API,如dpm_set_os()(內(nèi)核)、assert_constraint()、remove_constraint()和set_operating_state()(內(nèi)核和驅(qū)動程序)、set_policy()和set_task_state()(經(jīng)系統(tǒng)的用戶級調(diào)用)以及/proc接口。
對實時性能的影響
迄今為止,調(diào)整CPU電壓和頻率對系統(tǒng)的實時性能而言依然是一個重大挑戰(zhàn)。任何參數(shù)的改變都將導致系統(tǒng)不穩(wěn)定,重新鎖定鎖相環(huán)和其它動態(tài)時鐘機制也需要相應的時間,這兩個因素將使系統(tǒng)的響應出現(xiàn)長延時(有時達到數(shù)十毫秒),在此期間,CPU既不能執(zhí)行計算操作,也不能對外部事件(中斷)做出響應。
TI的OMAP、英特爾的Xscale和IBM的PowerLP等嵌入式處理器能夠在十幾毫秒的延時內(nèi)調(diào)整頻率,在數(shù)十毫秒的延時內(nèi)改變電壓,而且所有這些動作都不會中斷系統(tǒng)的操作,從而允許實現(xiàn)更大膽和更精確的節(jié)電機制。例如,在處理MPEG視頻幀或IP語音包的過程中可以降低電壓和頻率。
實時性能面臨的一個更普遍的挑戰(zhàn)是,如何在睡眠模式期間對中斷做出響應。雖然通過編程,大多數(shù)片上外圍元件在收到中斷之后都可以喚醒系統(tǒng),但開發(fā)者必須謹慎地定義用于喚醒設備的機制,并把整個系統(tǒng)的延時和存儲器類別考慮在內(nèi),以確保處理中斷的執(zhí)行時間和用戶空間對事件的響應(優(yōu)先延時)。
向嵌入式Linux發(fā)展的趨勢
理想情況下,用戶既無需知道也無需關心???撐其手持設備的底層操作系統(tǒng)。現(xiàn)在,設備制造商對操作系統(tǒng)有了更多的選擇余地。雖然微軟一直非常重視品牌,但Windows系列操作系統(tǒng)進入手持設備市場(如蜂窩電話)的規(guī)模卻落后于Symbian和Brew,也落后于嵌入式Linux。設備制造商轉向Linux的原因之一是可以利用標準的電源管理技術替代專有技術,這樣既能達到更快的上市時間,同時又能滿足終端用戶和運營商的技術需求。
]]>以下內(nèi)容含腳本,或可能導致頁面不正常的代碼 |
---|
說明:上面顯示的是代碼內(nèi)容。您可以先檢查過代碼沒問題,或修改之后再運行. |
Linux是自由的操作系統(tǒng),它的開放源碼使用戶獲得了最大的自由度。Linux上的軟件
資源十分豐富,每一種通用程序在Linux上都可以找到。
2.功能強大的內(nèi)核,性能高效、穩(wěn)定,多任務
Linux的內(nèi)核非常穩(wěn)定,它的高效和穩(wěn)定性已經(jīng)在各個領域,尤其在網(wǎng)絡服務器領域,得到了事實的驗證。Linux內(nèi)核小巧靈活,易于裁減,這使得它很適合嵌入式系統(tǒng)的應用。
3.支持多種體系結構,如X86、ARM、MIPS、ALPHA、SPARC等
目前,Linux已經(jīng)被移植到數(shù)十種硬件平臺上,幾乎支持所有流行的CPU。
4.完善的網(wǎng)絡通訊、圖形、文件管理機制
Linux自產(chǎn)生之日起就與網(wǎng)絡密不可分,網(wǎng)絡是Linux的強項。另外,Linux還支持多種文件和圖形系統(tǒng)。
5.支持大量的周邊硬件設備
Linux上的驅(qū)動已經(jīng)非常豐富了,它們支持各種主流硬件設備和最新硬件技術。
6.大小、功能都可定制
Linux秉承Unix的優(yōu)秀設計思想,非常靈活,各部分的可定制性都很強。
7.良好的開發(fā)環(huán)境,不斷發(fā)展的開發(fā)工具集
Linux有著非常優(yōu)秀的完整開發(fā)工具鏈,有十幾種集成開發(fā)環(huán)境,其中很多是免費的,大大降低了開發(fā)費用。
8.軟件開發(fā)者的廣泛支持
Linux的自由精神吸引了成千上萬的程序員投入到Linux的開發(fā)和測試中來,這使得Linux在短時間內(nèi)就成為一個功能強大的操作系統(tǒng)。
9.價格低廉
有效降低產(chǎn)品成本,對成本敏感的嵌入式系統(tǒng)來說至關重要,Linux恰好具有這一特性。
由此,我們有理由相信,在國內(nèi)外眾多Linux廠商的推動下,嵌入式Linux一定會成為Internet時代嵌入式操作系統(tǒng)
]]>Linux具有豐富的網(wǎng)絡功能,完善的內(nèi)置網(wǎng)絡是Linux的一大特點。嵌入式Linux專用于微控制器,同樣具有優(yōu)秀的網(wǎng)絡功能。Linux是一種可移植的操作系統(tǒng),能夠在從微型計算機到大型計算機的任何環(huán)境中和任何平臺上運行。可移植性為運行Linux的不同計算機平臺與其他任何機器進行準確而有效的通訊提供了手段,不需要另外增加特殊的,昂貴的通訊接口。
該文在構建基于嵌入式Linux和MPC852T無線網(wǎng)關平臺的基礎上,編程實現(xiàn)了無線網(wǎng)關平臺與無線終端之間的無線通信,并給出了無線網(wǎng)關平臺與無線終端之間通信的測試結果。
2 Linux下的socket編程
2.1 Socket編程
socket有3種類型:流式套接字、數(shù)據(jù)報套接字及原始套接字。流式套接字定義了一種可靠的面向連接的服務,實現(xiàn)了無差錯的數(shù)據(jù)傳輸。數(shù)據(jù)報套接字定義了一種無連接的服務,數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證可靠。原始套接字允許對低層協(xié)議如IP或ICMP直接訪問,主要用于新的網(wǎng)絡協(xié)議實現(xiàn)的測試等。
無連接服務器一般都是面向事務處理的,一個請求和一個應答就完成客戶程序與服務程序之間的相互作用。
面向連接服務器處理的請求比較復雜,往往是并發(fā)服務器。工作過程如下:服務進程首先調(diào)用socket( )創(chuàng)建一個字節(jié)流套接字,并調(diào)用bind( )將服務器地址捆扎在該套接字上,接著調(diào)用listen( )監(jiān)聽連接請求,隨后調(diào)用accept( )做好與客戶進程建立連接的準備,無連接請求時,服務進程被阻塞。當連接請求到來后,服務器進程被喚醒,建立一個新的Socket,并用新套接字同客戶進程的套接字建立連接,而服務進程最早生成的套接字則繼續(xù)用于監(jiān)聽網(wǎng)絡上的服務請求。客戶進程調(diào)用socket( )創(chuàng)建字節(jié)流套接字,然后調(diào)用connect( )向服務進程發(fā)出連接請求。服務進程和客戶進程通過調(diào)用read( )/recv( )和Write( )/send( )交換數(shù)據(jù)。
2.2 Linux下的socket函數(shù)庫
socket是面向用戶的,針對客戶和服務器程序提供不同的socket系統(tǒng)調(diào)用。客戶隨機申請一個socket,系統(tǒng)為之分配一個socket號,服務器擁有全局公認的socket,任何客戶都可以向它發(fā)出一個連接請求和信息請求。無論socket的內(nèi)部機制如何,它提供給程序員的最終是一組系統(tǒng)調(diào)用,即socket的庫函數(shù)。Linux這些庫函數(shù)同樣適用于嵌入式linux。下面是編制程序常用的庫函數(shù):
1) socket( ):建立Socket,此函數(shù)用來建立Socket描述字,并為此Socket建立資源(為一個Socket數(shù)據(jù)結構分配存儲空間)。應用程序在使用socket之前,首先必須擁有一個socket。socket( )向應用程序提供創(chuàng)建socket的手段。socket( )函數(shù)原形為int socket(int domain,int type,int protoco1);函數(shù)中的domain是參數(shù)指定通信中使用的協(xié)議簇,也就是網(wǎng)絡的類型,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol是參數(shù)指定通信中使用的協(xié)議。
函數(shù)在正常時返回socket描述符;否則返回l,錯誤狀態(tài)在全局變量error里。
2) bind( ):綁定本地地址,即將一個本地地址與一個SOCKET描述字連接在一起。此函數(shù)在服務程序上使用,是調(diào)用監(jiān)聽函數(shù)listen()必須要調(diào)用的函數(shù)。
Bind函數(shù)原型為:
int bind(int sockfd, struct sockaddr *my_addr, int addrlen)。bind()函數(shù)給已經(jīng)打開的socket指定本地地址。函數(shù)中的sockfd是調(diào)用socket函數(shù)返回的socket描述符;addrlen是my-addr結構的長度,常被設置為sizeof(struct sockaddr);my-addr是用于偵聽連接請求的本地地址。
函數(shù)在正常時返回0,否則返回l,同時error是系統(tǒng)錯誤碼。
3) listen( ):準備接收連接請求。在用bind()給一個socket設定本地地址之后,就可以將這個socket用于接受連接請求,即listen()。函數(shù)原形為int listen(int s,int backlog);函數(shù)中的s是socket描述符;backlong是連接請求暫存隊列長度。
函數(shù)正常時返回0,否則返回1,同時error是系統(tǒng)錯誤碼。
4) accept( ):服務端應用程序調(diào)用此函數(shù)來接受客戶端socket連接請求。在系統(tǒng)調(diào)用listen( )之后,系統(tǒng)就在socket的連接請求暫存隊列里存放每一個向該socket建立的連接請求,accept()的作用是從該暫存隊列中取出一個連接請求,用該socket的數(shù)據(jù),創(chuàng)建一個新的socket用來在服務端和客戶端之間傳遞接收信息,而原來socket仍然可以接收其他客戶端的連接要求。
函數(shù)正常創(chuàng)建了一個新的連接,那么返回非負的整數(shù),即新連接的socket描述符,否則返回l,error是系統(tǒng)錯誤碼。
5) connect( ):建立連接。bind( ),listen( )和accept( )都是用于被動地等待對方建立連接時需要使用的,connect( )函數(shù)是在主動地向?qū)Ψ浇⑦B接時使用的。函數(shù)原形為int connect(int sockfd,struct sockaddr*srvaddr,int addrlen);函數(shù)中的sockfd是socket描述符;srvaddr是通信目的方地址;addrlen是目的地址長度。
函數(shù)在正常建立連接時返回0,否則返回l,系統(tǒng)錯誤碼在error中。
6) close( ):此函數(shù)是用來關閉某一socket。socket和文件描述符的關閉操作都使用這個函數(shù)。函數(shù)原形為int close(int fd);參數(shù)fd是socket描述符。函數(shù)在正常時返回0,返回1表示出錯。
7) send( )/recv( ):用于socket的發(fā)送和接收數(shù)據(jù)。在連接建立完成后,通信雙方就可以使用以上這些函數(shù)來進行數(shù)據(jù)的發(fā)送和接收操作。
3 無線網(wǎng)關平臺的構建
為了將無線終端設備接入控制網(wǎng)絡實現(xiàn)遠程監(jiān)控,根據(jù)條件構建了基于MPC852T和嵌入式Linux的無線網(wǎng)關平臺。MPC852T是Motorola推出的面向低端的一款通信處理器,具有通信和網(wǎng)絡處理能力強、可靠性高、功耗低、功能集成度高等優(yōu)點,并且有眾多的操作系統(tǒng)支持,這使得它在各種嵌入式系統(tǒng),尤其是在網(wǎng)絡通信以及數(shù)據(jù)采集和傳輸?shù)认到y(tǒng)中的應用較為廣泛。
無線網(wǎng)關的硬件設計方案采用中心控制方案,中央處理器選用MPC852T,在MPC852T外圍配置一個RS-232串口、一個10M以太網(wǎng)口、一個100M以太網(wǎng)接口、SDRAM同步動態(tài)隨機存儲器等構成無線網(wǎng)關的硬件平臺,無線網(wǎng)關的硬件系統(tǒng)結構圖如圖1所示。
4 無線網(wǎng)關與無線終端通信的實現(xiàn)
嵌入式Linux具有完善的TCP/IP協(xié)議棧,為滿足工業(yè)控制過程中傳輸數(shù)據(jù)量小、可靠性高、速度快等要求,這里使用socket編程來實現(xiàn)網(wǎng)絡通信。無線終端通過無線網(wǎng)卡與無線網(wǎng)關自動建立鏈接,無線終端完成數(shù)據(jù)的采集,并將采集的數(shù)據(jù)以無線的方式發(fā)送給網(wǎng)關,無線網(wǎng)關把收到的數(shù)據(jù)上傳給上位機進行分析、處理,最后計算出數(shù)據(jù)發(fā)送的速率。
將編寫好的服務器端和終端程序進行交叉編譯,將編譯得到的二進制可執(zhí)行文件添加到RAMDISK中,壓縮新生成的ramdisk.image文件系統(tǒng)映像文件,重新編譯Linux內(nèi)核,生成Linux內(nèi)核映像文件,然后將內(nèi)核映像文件燒寫到無線網(wǎng)關平臺的FLASH中。無線網(wǎng)關平臺(服務器端)的主程序代碼如下:
#define PORT 3000 /*設定服務器監(jiān)聽端口*/
………………
int main(int argc,char* argv[ ])
{
int second;
int sockfd,new_fd; /* sockfd為監(jiān)聽用描述符*/
struct sockaddr_in srvaddr; /*定義服務器sock地址*/
struct sockaddr_in cliaddr; /*定義客戶的sock地址*/
………………
if(bind(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr))==-1) /*綁定*/
………………
if(listen(sockfd, QUEUE_SIZE) == -1) /*監(jiān)聽端口是否有請求*/
………………
for(;;){ /*開始服務器循環(huán)*/
/*等待連接*/
sin_size=sizeof(struct sockaddr_in);
new_fd=accept(sockfd,(struct sockaddr*) &cliaddr,&sin_size); /*接收連接請求*/
printf("Server:Got connection from %s \n",
inet_ntoa(cliaddr.sin_addr));
if(read(new_fd,&second,4)==-1) /*接收連接請求*/
………………
close(new_fd); /*父進程不再需要該socket*/
………………;
close(sockfd);
return 0;
}
}
5 測試結果
在上位機開啟通信終端,設置好串口參數(shù),進入超級終端。無線網(wǎng)關平臺上運行服務器端程序,同時在終端上運行客戶端程序,即可進行測試,測試結果如圖2所示。
圖2 無線網(wǎng)關與無線終端測試結果圖
6 結 語
目前基于TCP/IP協(xié)議的工業(yè)以太網(wǎng)的在組網(wǎng)時仍需要布線,但在工業(yè)現(xiàn)場,布線時常會受到限制,電纜的連接也限制了現(xiàn)場設備的移動和網(wǎng)絡結構的重組,還有一些高速旋轉設備根本無法通過電纜來傳輸數(shù)據(jù)。將802.11b無線通信技術應用于工業(yè)控制網(wǎng)絡,工控網(wǎng)絡就兼有了無線通信的優(yōu)點:現(xiàn)場設備無需電纜即可與控制網(wǎng)絡連接,實現(xiàn)現(xiàn)場數(shù)據(jù)的無線采集和傳輸,對于在一些不可預知的環(huán)境,尤其是不適于布線的強腐蝕惡劣環(huán)境。本文作者創(chuàng)新點:通過Linux下的socket編程實現(xiàn)了無線網(wǎng)關與無線終端的通信,可以使用無線通信來完成對現(xiàn)場設備的控制。
]]>在華清遠見的嵌入式培訓課程中,Qt是嵌入式學院<嵌入式工程師職業(yè)培訓班>二期課程中嵌入式linux應用開發(fā)方面的重要內(nèi)容。不少學員對QT方面的內(nèi)容比較關注,所以在這里我們先對QT做一下簡單介紹。
QT
Qt是一個多平臺的C++圖形用戶界面應用程序框架,由挪威 TrollTech 公司出品。它提供給應用程序開發(fā)者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向?qū)ο蟮暮苋菀讛U展,并且允許真正地組件編程。
自1996年Qt進入商業(yè)領域開始,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應用程序的基礎。Qt也是流行的Linux桌面環(huán)境KDE 的基礎,KDE是所有主要的Linux發(fā)行版的一個標準組件。
基本上,Qt 同 X Window (X Window是一種用于UNIX系統(tǒng)的標準圖形化用戶界面)上的 Motif、Openwin、GTK 等圖形界面庫和 Windows 平臺上的 MFC、OWL、VCL、ATL是同類型的東西,但是Qt 具有下列優(yōu)點:
● 優(yōu)良的跨平臺特性
Qt支持Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等操作系統(tǒng), Qt的跨平臺特性,是選擇Qt的一個非常重要的原因。對于相同功能的軟件,我們無須針對不同的操作系統(tǒng)編寫不同程序,只需將相同的代碼針對不同的環(huán)境編譯即可;
● 面向?qū)ο?
Qt 的良好封裝機制使得 Qt 的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt 提供了一種稱為 signals/slots(信號/槽) 的安全類型來替代 callback(回調(diào)函數(shù)),這使得各個元件之間的協(xié)同工作變得十分簡單;
● 豐富的API
● Qt 包括多達400個以上的 C++ 類,同時不斷擴展。
● 支持 2D/3D 圖形渲染,支持 OpenGL;
● XML 支持;
● 開放源碼
開放源優(yōu)勢包括一個活動的開放源開發(fā)員社團。由于Qt的不間斷開發(fā),以及完整的代碼透明性,以允許Qt開發(fā)員進行徹底深入地查看,進行自定義并擴展Qt來滿足其獨特的需求。
Qt/Embedded
Qt/Embedded是Qt的嵌入式版本,它在原始Qt的基礎上,做了許多出色的調(diào)整以適合嵌入式環(huán)境。同Qt/X11相比,Qt/Embedded很節(jié)省內(nèi)存,因為它不需要X server或是Xlib庫,它在底層摒棄了Xlib,采用framebuffer作為底層圖形接口。Qt/Embedded的應用程序可以直接寫內(nèi)核幀緩沖,因此它在嵌入式linux系統(tǒng)上的應用非常廣泛。
最后再了解下Qtopia
在Qt/Embedded版本4之前,Qt/Embedded和Qtopia是兩套不同的程序,Qt/Embedded是基礎類庫,Qtopia是構建于Qt/Embedded之上的一系列應用程序。但從版本4開始,Trolltech將Qt/Embedded并入了Qtopia,并推出了新的Qtopia4。在該版中,原來的Qt/Embedded被稱為Qtopia Core,作為嵌入式版本的核心,既可以與Qtopia配合,也可以獨立使用。原來的Qtopia則被分成幾層,核心的應用框架和插件系統(tǒng)被稱為 Qtopia Platform,上層的應用程序則按照不同的目標用戶分為不同的包,如Qtopai PDA,Qtopia Phone等。
于Qt方面的內(nèi)容,除了Qt、基于 Framebuffer(幀緩沖) 的 Qt /Embedded外,還有快速開發(fā)工具 Qt Designer以及國際化工具 Qt Linguist 等
(1) 指令系統(tǒng)
RISC設計者把主要精力放在那些經(jīng)常使用的指令上,盡量使它們具有簡單高效的特色。對不常用的功能,則通過組合指令來完成。因此,在RISC機器上實現(xiàn)特殊功能時,效率可能較低。但可以利用流水技術和超標量技術加以改進和彌補。而CISC計算機的指令系統(tǒng)比較豐富,有專用指令來完成特定的功能。因此,處理特殊任務時的效率較高。
(2) 存儲器操作
RISC對存儲器操作有限制,使控制簡單化;而CISC機器的存儲器操作指令多,操作 直接。
(3) 程序
RISC匯編語言程序一般需要較大的內(nèi)存空間,實現(xiàn)特殊功能的程序復雜,不易設計;而CISC匯編語言程序編程相對簡單,科學計算及復雜操作的程序設計相對容易,效率較高。
(4) 中斷
RISC機器在一條指令執(zhí)行的適當?shù)胤娇梢皂憫袛啵欢鳦ISC機器是在一條指令執(zhí)行結束后才響應中斷。
(5) CPU
RISC CPU包含較少的單元電路,因而面積小、功耗低;而CISC CPU包含豐富的電路單元,因而功能強、面積大、功耗大。
(6) 設計周期
RISC微處理器結構簡單,布局緊湊,設計周期短,且易于采用最新技術;CISC微處理器結構復雜,設計周期長。
(7) 用戶使用
RISC微處理器結構簡單,指令規(guī)整,性能容易把握,易學易用;CISC微處理器結構復雜,功能強大,容易實現(xiàn)特殊功能。
(8) 應用范圍
由于RISC指令系統(tǒng)的確定與特定的應用領域有關,故RISC機器更適合于專用機;而CISC機器則更適合于通用機。
2. 嵌入式微控制器
嵌入式微控制器(Microcontroller Unit,MCU)又稱單片機,顧名思義,就是將整個計算機系統(tǒng)集成到一塊芯片中。嵌入式微控制器一般以某一種微處理器內(nèi)核為核心,芯片內(nèi)部集成ROM/EPROM、RAM、Flash、總線、總線邏輯、定時/計數(shù)器、WatchDog、I/O、串行口、脈寬調(diào)制輸出、A/D、D/A等各種必要的功能模塊。為適應不同的應用需求,一般一個系列的單片機具有多種衍生產(chǎn)品,每種衍生產(chǎn)品的處理器內(nèi)核都是一樣的,不同之處在于存儲器和外設的配置及封裝。這樣可以使單片機最大限度地同應用需求相匹配,從而減少功耗和成本。
與嵌入式微處理器相比,微控制器的最大特點是單片化,體積大大減小,從而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系統(tǒng)工業(yè)的主流。微控制器的片上資源一般比較豐富,適合于控制,因此稱為微控制器。
嵌入式微控制器目前的品種和數(shù)量最多,比較有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16和68300等。另外還有許多半通用系列,如支持USB接口的MCU 8XC930/931、C540和C541。目前MCU占嵌入式系統(tǒng)約70%的市場份額。
特別值得注意的是,近年來提供x86微處理器的著名廠商AMD公司將AM186CC /CH/CU等嵌入式處理器稱之為Microcontroller,Motorola公司把以Power PC為基礎的PPC505和PPC555亦列入單片機行列。TI公司亦將其TMS320C2XXX系列DSP做為MCU進行 推廣。
3. 嵌入式DSP處理器
DSP處理器對系統(tǒng)結構和指令進行了特殊設計,使其適合于執(zhí)行DSP算法,編譯效率較高,指令執(zhí)行速度也較高。在數(shù)字濾波、FFT和譜分析等方面,DSP算法正在大量進入嵌入式領域,DSP應用正從在通用單片機中以普通指令實現(xiàn)DSP功能過渡到采用嵌入式DSP處理器。嵌入式DSP處理器有兩個發(fā)展來源,一是DSP處理器經(jīng)過單片化、EMC改造和增加片上外設成為嵌入式DSP處理器,TI的TMS320C2000/C5000等屬于此范疇;二是在通用單片機或片上系統(tǒng)(SOC)中增加DSP協(xié)處理器,例如Intel的MCS-296。
推動嵌入式DSP處理器(Embedded Digital Signal Processor,EDSP)發(fā)展的一個重要因素是嵌入式系統(tǒng)的智能化,例如各種帶有智能邏輯的消費類產(chǎn)品,生物信息識別終端,帶有加解密算法的鍵盤,ADSL接入,實時語音壓解系統(tǒng),虛擬現(xiàn)實顯示等。這類智能化算法一般都是運算量較大,特別是向量運算、指針線性尋址等較多,而這些正是DSP處理器的長處 所在。
嵌入式DSP處理器比較有代表性的產(chǎn)品是Texas Instruments的TMS320系列和Motorola的DSP56000系列。TMS320系列處理器包括用于控制的C2000系列,移動通信的C5000系列,以及性能更高的C6000和C8000系列。DSP56000目前已經(jīng)發(fā)展成為DSP56000、DSP56100、DSP56200和DSP56300等幾個不同系列的處理器。
DSP的設計者們把重點放在了處理連續(xù)的數(shù)據(jù)流上。在嵌入式應用中,如果強調(diào)對連續(xù)的數(shù)據(jù)流的處理及高精度復雜運算,則應該選用DSP器件。
4. 嵌入式片上系統(tǒng)
隨著VLSI設計的普及化及半導體工藝的迅速發(fā)展,可以在一塊硅片上實現(xiàn)一個更為復雜的系統(tǒng),這就是System On Chip(SOC)。各種通用處理器內(nèi)核將作為SOC設計公司的標準庫,和許多其他嵌入式系統(tǒng)外設一樣,成為VLSI設計中一種標準的器件,用標準的VHDL等語言描述,存儲在器件庫中。用戶只需定義出整個應用系統(tǒng),仿真通過后就可以將設計圖交給半導體工廠制作樣品。這樣除個別無法集成的器件以外,整個嵌入式系統(tǒng)大部分均可集成到一塊或幾塊芯片中去,應用系統(tǒng)電路板將變得很簡潔,對于減小體積和功耗、提高可靠性非常有利。
SOC可以分為通用和專用兩類。通用系列包括Motorola的M-Core,某些ARM系列器件,Echelon和Motorola聯(lián)合研制的Neuron芯片等。專用SOC一般專用于某個或某類系統(tǒng)中,不為一般用戶所知。一個有代表性的產(chǎn)品是Philips的SmartXA,它將XA單片機內(nèi)核和支持超過2048位復雜RSA算法的CCU單元制作在一塊硅片上,形成一個可加載Java或C語言的專用的SOC,可用于公眾互聯(lián)網(wǎng)(如Internet安全)方面。
1.1.2 嵌入式處理器的選擇
針對各種嵌入式設備的需求,各個半導體芯片廠商都投入了很大的精力研發(fā)和生產(chǎn)適用于這些設備的CPU及協(xié)處理器芯片。用于嵌入式設備的處理器必須高度緊湊、低功耗和低成本。針對每一類應用來說,開發(fā)者對處理器的選擇都是多種多樣的,掌上電腦就是一例,如表1.1所示。與全球PC市場不同的是,沒有一種微處理器和微處理器公司可以主導嵌入式系統(tǒng),僅以32位的CPU而言,就有100種以上的嵌入式微處理器。由于嵌入式系統(tǒng)設計的差異性極大,因此選擇是多樣化的。設計者在選擇處理器時要考慮的主要因素有如下幾個 方面。
表1.1 部分掌上電腦處理器一覽
廠家/型號 |
處理器 |
速 度 |
卡西歐Cassiopeia E-100系列 |
MIPS-based NEC VR4121 |
131MHz |
康柏Aero 2100系列 |
MIPS-based NEC VR4111 |
70MHz |
菲利浦Nino 500系列 |
MIPS-based Toshiba PR31700 |
75MHz |
惠普Jornada 400系列 |
Hitachi SH-3 7709a |
100MHz/133MHz |
3Com PalmPilotTM系列 |
Motorola DragonBall 68VZ328 |
33MHz |
蘋果MessagePad 2000/2100 Intel |
Intel StrongARM SA-110 |
160MHz |
康柏iPAQ H3650Intel |
Intel StrongARM SA-1110 |
206MHz |
(1) 調(diào)查市場上已有的CPU供應商
有些公司(如Motorola、Intel、AMD)很有名氣,而有一些小的公司(如QED)雖然名氣很小,但也能生產(chǎn)很優(yōu)秀的微處理器。另外,有一些公司,如ARM、MIPS等,只設計但并不生產(chǎn)CPU,他們把生產(chǎn)權授予世界各地的半導體制造商。ARM是另外一種近年來在嵌入式系統(tǒng)中有影響力的微處理器制造商,ARM的設計非常適合于小的電源供電系統(tǒng)。Apple在Newton手持計算機中使用ARM,另外有幾款數(shù)字無線電話也在使用ARM。
(2) 處理器的處理速度
一個處理器的性能取決于多個方面的因素:時鐘頻率,內(nèi)部寄存器的大小,指令是否對等處理所有的寄存器等。對于許多需用處理器的嵌入式系統(tǒng)設計來說,目標不是在于挑選速度最快的處理器,而是在于選取能夠完成作業(yè)的處理器和I/O子系統(tǒng)。如果你的設計是面向高性能的應用,那么建議你考慮某些新的處理器,其價格極為低廉,如IBM和Motorola的Power PC。以前Intel的i960是銷售極好的RISC高性能芯片,但是最近幾年卻遇到強勁的對手,讓位于MIPS、SH以及后起之秀ARM。
(3) 技術指標
當前,許多嵌入式處理器都集成了外圍設備的功能,從而減少了芯片的數(shù)量,進而降低了整個系統(tǒng)的開發(fā)費用。開發(fā)人員首先考慮的是,系統(tǒng)所要求的一些硬件能否無需過多的膠合邏輯(Glue Logic)就可以連接到處理器上。其次是考慮該處理器的一些支持芯片,如DMA控制器、內(nèi)存管理器、中斷控制器、串行設備、時鐘等的配套。
(4) 處理器的低功耗
嵌入式微處理器最大并且增長最快的市場是手持設備、電子記事本、PDA、手機、GPS導航器、智能家電等消費類電子產(chǎn)品,這些產(chǎn)品中選購的微處理器典型的特點是要求高性能、低功耗。許多CPU生產(chǎn)廠家已經(jīng)進入了這個領域。
(5) 處理器的軟件支持
若僅有一個處理器,沒有較好的軟件開發(fā)工具的支持,也是不行的,因此選擇合適的軟件開發(fā)工具對系統(tǒng)的實現(xiàn)會起到很好的作用。
成數(shù)據(jù)的訪問和刷新,即以同一個周期、相同的速度同步地工作,因而可以與系統(tǒng)總線以同頻率工作,可大大提高數(shù)據(jù)傳
]]>什么是開放源代碼?
開放源代碼軟件是現(xiàn)代計算環(huán)境的寶貴資源。本質(zhì)上,開放源代碼軟件使得源代碼對使用軟件的任何人可用,即不對最終用戶隱藏任何內(nèi)容。開放源代碼軟件不一定是免費的,雖然大多數(shù)都是免費的。許可證協(xié)議決定了軟件的使用方式;最流行的許可證是 GNU 公共許可證(GNU Public License,GPL)。
開放源代碼軟件是由許多不同的發(fā)起者所開發(fā)的,包括選擇與其他人共享其工作成果的技術愛好者所開發(fā)的項目。商業(yè)性的公司,比如 IBM,也在為開放源代碼出力,以便在社區(qū)中提供優(yōu)秀的技術,同時確保他們的專有硬件和軟件得到開放工具的支持。能夠編程、編寫文檔或執(zhí)行其他一些軟件開發(fā)相關任務的任何人,都能夠幫助創(chuàng)建開放源代碼軟件 —— 并且他們正是這樣做的!
![]() ![]() |
![]()
|
為什么要使用開放源代碼工具?
許多人選擇開放源代碼工具是因為它們便宜(開放源代碼軟件經(jīng)常是免費的,這當然非常便宜)。開放源代碼軟件還傾向于非常可靠。由于有技術興趣的任何人都能夠查看源代碼,因而可能會有數(shù)千個質(zhì)量控制機構在評估代碼。程序員能夠無隔閡地直接接觸用戶,因此問題和 bug 通常是大家都知道的,從而迅速得到糾正。此外,由于沒有對用戶隱藏任何東西,這樣有利于更好的技術脫穎而出。
對于擔心安全問題的用戶,開放源代碼軟件能夠給他們帶來心靈的平靜。如果懷疑應用程序隱藏有“后門(back door)”,您可以獲得源代碼,自己檢查它,或讓您信任的人檢查它。然后您可以自己編譯該代碼,確保它和您預期的完全一樣。當發(fā)現(xiàn)與安全相關的缺陷時,社區(qū)會立即采取行動,并且通常會在幾小時內(nèi)提供建議使用的補丁。正式的項目解決辦法可能要花稍長一點的時間,但是通常不會超出幾小時或幾天。開放源代碼軟件使您能夠在必要時對您的資源采取動作。
開放源代碼軟件還有助于確保技術不會被忽略。由于開發(fā)過程對感興趣的任何人都是開放的,您通常會找到人們?yōu)椴怀R姷挠布_發(fā)的驅(qū)動程序。此外,您還能找到由那些利用不常見協(xié)議的小社區(qū)為此類協(xié)議提供的支持。Linux 之所以在廣泛的 IBM 硬件上可用,正是由于采用了這種開放方法。這有助于保持您的硬件的生命力,同時幫助保護您避免失去對某種關鍵技術的軟件支持。如果某個項目不再提供官方支持了,您總是能夠選擇自己提供該支持!
![]() ![]() |
![]()
|
獲得開放源代碼工具
獲得開放源代碼軟件是很容易的;Linux 內(nèi)核本身就是開關放源代碼的。當您安裝 Linux 時,就開始使用開放源代碼了。除了內(nèi)核外,Linux 發(fā)行套件中還包含其他許多開放源代碼包,其中包括開發(fā)工具、庫和應用程序。對于所有這些包,它們的源代碼都是可用的,您可以編譯任何包以優(yōu)化或為特定用途而自定義它。
除了發(fā)行套件中包含的包外,Internet 上還有其他開放源代碼軟件可供使用。有些是專用的項目或正處于首次開發(fā)中的新技術,而其他則是與 Linux 發(fā)行套件中包含的包相競爭的方法。這是一個思想的自由市場。成功的開放源代碼軟件通常最終會作為輔助包或公共包被接納到發(fā)行套件中。有些項目甚至被接納為 Linux 內(nèi)核的一部分,此時這個單獨的項目將解散,而它的開發(fā)將作為標準內(nèi)核維護的一部分繼續(xù)進行。
SourceForge
SourceForge.net(請參閱 參考資料)是一個很受歡迎的針對開放源代碼項目的知識庫。它通過易于使用的 Web 界面來組織項目,該界面具有搜索功能以幫助您查找項目。每個 SourceForge 項目都有版本歷史記錄、bug 列表、討論組、文檔,當然還包括源代碼。如果擁有自己的開放源代碼項目,您也可以利用 SourceForge。
RPM 與源代碼
無論何時只要可能,預編譯的二進制 RPM 都是在 Linux POWER 環(huán)境中使用開放源代碼軟件的最簡單方式。軟件的所有部分都以二進制的形式準備好了,只需直接安裝即可。安裝通常只需幾秒鐘就能完成,軟件馬上就可供使用了。
由于 RPM 的工作方式,系統(tǒng)將自動接受依賴關系和兼容性檢查,在軟件開始安裝之前,您會接到關于缺少某個組件的通知。此外,升級、管理和刪除 RPM 包也很簡單。無論何時只要可能,采用 RPM 都是可取的。
針對 RPM 的一個優(yōu)秀知識庫是 Rpmfind.net(請參閱 參考資料)。它具有一個來自許多發(fā)行套件的可搜索索引,以及大多數(shù)主要發(fā)行套件和升級的鏡像。為 PPC 列出的任何包都應該與 POWER 系統(tǒng)兼容。您既可以搜索包的名稱,也可以搜索某個包中包含的單獨文件。得到的搜索結果將跨越廣泛的 Linux 發(fā)行套件,包括非常罕見的發(fā)行套件。所列出的每個包通常還指向?qū)椖康闹黜摚虼巳绻诓檎夷硞項目資源時遇到問題, rpmfind
可能會提供幫助。對于 POWER 體系結構,作為 PPC 包列出的所有 RPM 或許都能工作。在安裝新的包時務必細心一點。RPM 將會幫助保護您避免意外地完全摧毀系統(tǒng),不過強烈建議您使用常規(guī)的預防措施,比如制作備份以及在非生產(chǎn)系統(tǒng)上執(zhí)行測試。
![]() ![]() |
![]()
|
使用源代碼
由于 POWER 體系結構上的 Linux 還比較新,并非所有開放源代碼項目擁有者都曾想到過它。因此可能還沒有對那些包可用的 RPM 包。在這種情況下,您必須自己編譯源代碼。這對于諸如 Samba 這樣成熟的項目來說通常不是一件難事,但是對于不太常見的項目來說,可能需要做更多的工作。應該對在生產(chǎn)系統(tǒng)上編譯源代碼保持謹慎,因為這樣可能導致問題,或者失去對正在該系統(tǒng)上運行的商業(yè)軟件的支持。
Linux 本質(zhì)上在不同的體系結構上都是相同的;因此,許多項目的源代碼無需多少經(jīng)驗就能成功地編譯。源代碼通常作為壓縮的 tar 文件來提供。Gzip 是最常用的壓縮方式,不過 bzip2 正在變得流行起來,因為它創(chuàng)建的壓縮文件更小一些。
首先,您必須展開壓縮包。讓我們使用 Gimp 作為一個例子。Gimp 是一個照片編輯包,它處理各種各樣的圖像格式,并且包括昂貴的商業(yè)產(chǎn)品中具有的功能。
圖 1. Gimp 實際應用
要下載 Gimp 源代碼,請參閱本文后面 參考資料中指向 Gimp Web 站點的鏈接。要展開源代碼,請使用 tar -xvjf gimp-1.2.4.tar.bz2
命令。
文件將解壓縮到當前目錄。標準的方法是將源代碼包含在一個與產(chǎn)品名稱相同的目錄中。在此例中,文件包含在一個名為 gimp-1.2.4 的目錄中。
切換到該目錄就會看到源代碼、一些文檔、配置腳本,以及 README 文件。大多數(shù)源代碼包都有一個名為 INSTALL 和一個名為 README 的文件。在編譯軟件之前應該閱讀這些文件。通過閱讀這些文件,您可以在產(chǎn)生問題之前識別它們,并且獲得正確的編譯和安裝步驟,從而省去一些麻煩。我在編譯源代碼時遇到的大多數(shù)問題,都只是因為我沒有遵循那些文件中的指示。
最常見的下一個步驟是運行 configure
腳本。 Configure
是 autoconf 包的一部分,這個包包含在 Linux 發(fā)行套件的開發(fā)工具中。下面引用 Autoconf 的包描述:
“GNU 的 Autoconf 是一個用于配置源代碼和 Makefile 的工具。使用 Autoconf,程序員能夠創(chuàng)建可移植和可配置的包,因為生成包的人能夠指定各種配置選項。”
這個配置腳本在系統(tǒng)上運行一系列測試,以確定針對您的發(fā)行套件和體系結構編譯包的最佳方式。然后它為您的系統(tǒng)創(chuàng)建一個自定義的 Makefile。如果在系統(tǒng)上執(zhí)行編譯時遇到問題, configure
將會告訴您。 Configure
通常允許您定制要包括到編譯包中的特性,或者允許您提供關于庫或其他必需文件的位置參數(shù),以便該包能夠成功編譯。要不帶參數(shù)執(zhí)行 configure
腳本,請使用如下命令:
./configure
它將在系統(tǒng)用上執(zhí)行多個測試并成功地結束。要生成程序,請使用如下命令:
make
如果編譯出錯,您需要確定問題并修復它們。這些問題也許比較棘手,可能需要關于您的環(huán)境和總體編程的大量知識。如果一切順利,下一步通常是使用如下命令來安裝軟件:
make install
這個命令將把文件復制到系統(tǒng)中的適當位置,更新文件權限,復制配置文件,并把文檔添加到手冊頁。
這種方案存在許多可能的變化形式。這其中包括對 configure
腳本使用開關來調(diào)整將要編譯到程序中的特性,使用 Makefile 中的不同命令來調(diào)整編譯方式,等等。
如果程序在安裝后無法工作,大多數(shù) Makefile 都包含一個 uninstall 參數(shù)來刪除該程序。
make uninstall
務必記住,使用原始源代碼不會向 RPM 數(shù)據(jù)庫輸入任何內(nèi)容。以這種方式安裝的軟件是非托管的(unmanaged),因此應該小心進行。
![]() ![]() |
![]()
|
創(chuàng)建自定義 RPM
如果打算使用大量純源代碼,您應該了解更多關于創(chuàng)建自己的 RPM 的信息。創(chuàng)建 RPM 并不是特別困難,雖然這個主題超出了本文的討論范圍。從您自己的代碼創(chuàng)建 RPM 要比從陌生人編寫的代碼創(chuàng)建 RPM 容易得多。要創(chuàng)建良好的 RPM 包,您需要足夠了解某個軟件部分中的所有組件。本質(zhì)上,這個過程就是創(chuàng)建一個名為 SPEC 的配置文件,它識別 RPM 數(shù)據(jù)庫所必需的所有信息。關于依賴關系的信息、生成該文件的步驟,以及安裝后的操作連同該包中所有文件的列表,都包括在這個 SPEC 文件中。RPM 使用這個 SPEC 文件來編譯代碼和創(chuàng)建二進制包。請查看您的源包,以確定是否已經(jīng)創(chuàng)建了一個示例 SPEC 文件。包括 SPEC 文件已經(jīng)成了一個普遍習慣,這樣還可能允許您只需做很少工作或不需要做工作就能創(chuàng)建一個自定義的 RPM。
源 RPM
在創(chuàng)建 RPM 時,存在一個叫做源 RPM(Source RPM,SRPM)的工件(artifact)。這是一個與源代碼組合后的 SPEC 文件,設計用于構建一個或多個體系結構。這對兩個世界來說都是最好的!使用源 RPM,您能夠在系統(tǒng)上自定義編譯軟件,但是完成后的產(chǎn)品將是可安裝的 RPM 而不只是原始的二進制。作為預編譯 RPM 可用的大多數(shù)包也作為 SRPM 可用。這可能是在 Linux 中跨平臺移動軟件的一種簡單方式。當您在一個不同的平臺上成功地重新編譯時,可考慮與社區(qū)共享完成后的 RPM。
]]>
圖1
開發(fā)者必須精確地考慮到這些工具的松散集合能提供什么樣的功能,以及需要付出多大的努力才能形成完整的解決方案。"
在Linux應用程序和庫的除錯方面,GNU Debugger (GDB)作為一種標準已有幾年的歷史。它是一種命令行程序,由多個不同的圖形用戶接口前端予以支持,每個前端都能以多種方式提供除錯控制功能。盡管GDB不是一個完美的方案,但它足夠應對各種除錯任務,而且已經(jīng)得到開放原始程序代碼團體的廣泛支持。
Linux核心或設備驅(qū)動程序的除錯要比應用程序的除錯繁瑣得多。
在做調(diào)查時,以下方面應特別注意:
什么除錯方法支持要開發(fā)產(chǎn)品的硬件?
需要什么核心支持程序?
還需要其它什么支持程序?
除錯接口怎么樣,如何使用?
該工具需要除錯核心模塊及處理虛擬地址轉換嗎?
還需要其它什么工具才能提供完整的方案?
經(jīng)過進一步的調(diào)查,開發(fā)者往往發(fā)現(xiàn)工具A和工具B并沒有提供完全一致的功能,因為它們是在彼此獨立的情況下開發(fā)的。結果,開發(fā)者必須精確地考慮到這些工具的松散集合能提供什么樣的功能,還需要付出多大的努力才能形成完整的解決方案。
如果不同處理器類型間的整合、可用性、互通作業(yè)性和移植性很關鍵的話,開發(fā)者應考慮購買商用開發(fā)工具。這主要是因為將開發(fā)一個'免費'方案所付出的努力考慮進去,商用開發(fā)工具并不算貴。
Linux BSP
Linux系統(tǒng)有兩大主要部份:帶設備驅(qū)動程序的Linux核心;以及根文件系統(tǒng),包括系統(tǒng)所需的全部支持應用程序、服務和庫。
除了駐留在目標板上的OS組件外,還需要制作一個由GNU Compiler Collection構成的交叉編譯環(huán)境,為庫和二進制程式(binutils)提供支持。
雖然幾乎每一個組件都可在網(wǎng)上找到,但在硬件或設備驅(qū)動程序支持、整合測試信息、交叉編譯指南或軟件兼容性方面卻很難收集到太多信息。盡管開發(fā)者可從網(wǎng)上免費下載各種組件以配置嵌入式Linux操作系統(tǒng),但每個組件在版本、支持、穩(wěn)定性和測試等方面的狀態(tài)則需要開發(fā)者自己決定。然后,開發(fā)者還要完成最后的OS整合和測試,以及為所開發(fā)產(chǎn)品提供終身Linux OS維護。
另一方面,嵌入式Linux供貨商所提供的商用Linux板支持工具套件一般都是經(jīng)過預先安裝和測試的,而且提供支持和維護。其它須考慮的因素包括Linux桌面主機將會添加不同的庫和核心功能,以及由于組織內(nèi)的開發(fā)者變動而引起的長期維護問題。
品質(zhì)保證部門一般會執(zhí)行一系列嚴格的驗證和性能測試,其中包括內(nèi)存泄漏檢測/糾正、程序代碼最佳化和任務追蹤等。那些想利用開放原始程序代碼工具開發(fā)針對非X86平臺的嵌入式Linux產(chǎn)品開發(fā)者將會發(fā)現(xiàn)這一任務甚至要比選擇開放原始程序代碼除錯方案難得多。Linux Trace Toolkit、Valgrind工具及其它內(nèi)存分析程序可完成部份測試和驗證任務。但總的來說,它們?nèi)狈﹃P鍵特性、整合功能及廣泛的硬件支持。這些開放原始程序代碼分析工具的評估過程與評估除錯方案的過程基本相同。
最后的分析就是,一個設計得恰到好處的開發(fā)環(huán)境應能夠供貨商用和開放原始程序代碼兩個世界所具有的最好特性:
·完整的開發(fā)能力;
·易于使用和整合;
·大型工程組織的協(xié)調(diào)控制;
·品質(zhì)和支持保證;
·持續(xù)性;
·按照自己的判斷力使用開放原始程序代碼的能力。 本信息來源:CAD教育網(wǎng) www.cadedu.com