国产日韩欧美综合一区二区三区 ,久久福利,国产精品一区在线http://www.bjzhda.cnzh-cn曙海教育集團(tuán)論壇http://www.bjzhda.cnRss Generator By Dvbbs.Netofficeoffice@126.comimages/logo.gif曙海教育集團(tuán)論壇Linux下RPM軟件包的安裝及卸載http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1692&Page=1wangxinxin2010-11-23 14:06:30  RPM 安裝操作

  命令:

  rpm -i 需要安裝的包文件名

  舉例如下:

  rpm -i example.rpm 安裝 example.rpm 包;

  rpm -iv example.rpm 安裝 example.rpm 包并在安裝過程中顯示正在安裝的文件信息;

  rpm -ivh example.rpm 安裝 example.rpm 包并在安裝過程中顯示正在安裝的文件信息及安裝進(jìn)度;

  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 驗(yàn)證操作

  命令:

  rpm -V 需要驗(yàn)證的包

  舉例如下:

  rpm -Vf /etc/tomcat4/tomcat4.conf

  輸出信息類似如下:

  S.5....T c /etc/tomcat4/tomcat4.conf

  其中,S 表示文件大小修改過,T 表示文件日期修改過。限于篇幅,更多的驗(yàn)證信息請您參考rpm 幫助文件:man rpm

  RPM 的其他附加命令

  --force 強(qiáng)制操作 如強(qiáng)制安裝刪除等;

  --requires 顯示該包的依賴關(guān)系;

  --nodeps 忽略依賴關(guān)系并繼續(xù)操作

]]>
安防監(jiān)控系統(tǒng)的新秀LINUX平臺DVR視頻卡http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1691&Page=1wangxinxin2010-11-23 14:03:21
  視頻監(jiān)控系統(tǒng)一直是監(jiān)控領(lǐng)域中的熱點(diǎn),它以直觀、方便、信息內(nèi)容豐富而在各個行業(yè)得到廣泛應(yīng)用,如:交通、電力、通信、石油、碼頭、倉庫、金融、政府機(jī)關(guān)企事業(yè)單位辦事窗口,和軍隊(duì)、公安、監(jiān)獄、水利/水廠、民航等要害部門。 

      二、從微軟掌管操作系統(tǒng)至今,多數(shù)人認(rèn)為操作系統(tǒng)即是Windows95/98/2000/XP,甚至有很多人并不了解什么是操作系統(tǒng),更遑論是使用Linux了。近來由于多家國際計(jì)算機(jī)業(yè)龍頭紛紛表態(tài)支持Linux,使得Linux 頓時成為計(jì)算機(jī)界的熱點(diǎn),許多人相繼投入Linux。最近在許多的信息媒體上可以看到“Linux”的報(bào)導(dǎo),Linux也不再是資深計(jì)算機(jī)人才知道的操作系統(tǒng),有越來越多的人對Linux好奇,越來越多使用者愿意嘗試這個操作系統(tǒng)。到現(xiàn)在包括IBM等許多大型廠商都公開宣布旗下產(chǎn)品支持Linux,連最近相當(dāng)熱門的IA(信息家電)也都陸續(xù)宣布將采用Linux作為系統(tǒng)核心,監(jiān)控產(chǎn)業(yè)也已有廠商開始投入研發(fā)資金以Linux為作業(yè)平臺的監(jiān)控產(chǎn)品,Linux儼然形成的當(dāng)前唯一能對抗微軟的操作系統(tǒng)。 

  前面已很多次提到了Linux這個名詞,那Linux到底是什么?簡單地說,Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),這個系統(tǒng)是由世界各地的成千上萬的程序員設(shè)計(jì)和實(shí)現(xiàn)的。其目的是建立不受任何商品化軟件的版權(quán)制約的、全世界都能自由使用的Unix兼容產(chǎn)品。 

  Linux所具備的特性∶ 

  1. Linux提供多人使用(Multi-user)、多工(Multitask)的完整作業(yè)環(huán)境,只要很少的硬件支援,便能在多種不同電腦設(shè)備(或是單晶片)上運(yùn)作。 

  2. Linux具備高解析度與優(yōu)秀的圖形界面(GUI),大幅提升數(shù)字監(jiān)控系統(tǒng)應(yīng)用的親和力。 

  3. Linux完全免費(fèi),可任意在網(wǎng)路上下載、復(fù)制、使用,同時它的程式碼也完全公開,可以任意開發(fā)、更改。這樣的特點(diǎn)使得全世界已超過千萬人使用Linux,更由于許多廠商投入開發(fā)核心程式、發(fā)展相關(guān)軟體以及硬體周邊驅(qū)動程式,使Linux功能和完整性日益壯大。 

  4. Linux本身開放性的架構(gòu)與彈性(Scalable)設(shè)計(jì),可針對數(shù)位影像監(jiān)控應(yīng)用量身訂作,去除與監(jiān)控?zé)o關(guān)的多余功能,在提升系統(tǒng)效能的同時,也減少了出問題的機(jī)率。 

  5. Linux從頭到尾即針對網(wǎng)絡(luò)應(yīng)用而設(shè)計(jì),可支持TCP/IP、WWW等多項(xiàng)國際標(biāo)準(zhǔn),能迎合新一代DVR產(chǎn)品網(wǎng)際網(wǎng)絡(luò)/通信網(wǎng)絡(luò)連結(jié)的所有需求。 

  由于數(shù)字錄像監(jiān)控系統(tǒng)是比較專業(yè)的領(lǐng)域,其中又牽涉到大量I/O作業(yè)的錄像擷取/儲存以及CPU運(yùn)算的錄像壓縮/解壓縮,因此,為能滿足每天24小時、每周7天的線上服務(wù)需求,以及有效減少整體作業(yè)營運(yùn)的成本,除了對功能方面的考慮外,操作系統(tǒng)平臺的選擇亦十分重要。 

      三、Linux在DVR系統(tǒng)中的應(yīng)用 

  DVR 已成為全球熱門產(chǎn)品,在未來網(wǎng)絡(luò)時代,其重要性更是不容小覷,使用者的需求增加,使得全球知名監(jiān)控業(yè)大廠愈來愈積極在 DVR產(chǎn)品的研發(fā)與改良上。監(jiān)控行業(yè)的商家更是結(jié)合了圖象處理技術(shù)、數(shù)字管理技術(shù)、通訊傳輸技術(shù)、自動化集成界面技術(shù)及操控軟件技術(shù)于一體發(fā)展出數(shù)字硬盤錄像遠(yuǎn)程監(jiān)控產(chǎn)品,加上簡單易用的人性化圖形使用界面(GUI)使一般人可輕易地使用監(jiān)控系統(tǒng)。 

  Linux操作系統(tǒng)搭配實(shí)時視頻采集卡與攝影機(jī),進(jìn)行視訊即時壓縮、錄像、儲存等工作,除了可以開發(fā)操作簡單、功能簡易、價格大眾化的數(shù)字錄像監(jiān)控系統(tǒng)外,亦可有效整合互聯(lián)網(wǎng)絡(luò)、電話網(wǎng)路、安全防盜設(shè)備,作為自主性保全的安全監(jiān)控設(shè)備。 

  有別于其他視訊的應(yīng)用,DVR由于必須儲存大量的安全監(jiān)視錄像資料,因此具備高容納資料的儲存空間以及資料備份功能,是其選擇操作系統(tǒng)的重要條件。 

  Linux除了支持大容量的硬盤供資料儲存外,并可透過加裝硬盤及具有資料鏡映像功能的磁盤陣列來增加儲存容量;此外,其備份周邊支持豐富,可將資料有效備份在CD-RW以及結(jié)合網(wǎng)絡(luò)技術(shù)的NAS網(wǎng)絡(luò)存儲設(shè)備。 

  Linux操作系統(tǒng)具備分散式、無人操作、大量集中管理、設(shè)定、監(jiān)控、告警處理等所需的穩(wěn)定性與完整的網(wǎng)絡(luò)功能;多臺Linux base的數(shù)字硬盤錄像監(jiān)控系統(tǒng)可有效透過網(wǎng)絡(luò)予以結(jié)合,配合中央監(jiān)控系統(tǒng)與遠(yuǎn)端數(shù)字硬盤錄像監(jiān)控主機(jī)解決方案,不僅能滿足此一需求,并具備未來擴(kuò)充的彈性。在未來的網(wǎng)際網(wǎng)絡(luò)時代,使用者須要的是具有強(qiáng)大網(wǎng)絡(luò)功能的遠(yuǎn)端監(jiān)控系統(tǒng),整合數(shù)字錄像監(jiān)控、門禁防盜、消防受信等安全設(shè)備,藉由模組化的智能型中央監(jiān)控系統(tǒng)的圖形控制界面,讓使用者可透過網(wǎng)際網(wǎng)絡(luò)瀏覽器或是其他終端設(shè)備,隨時隨地有效地進(jìn)行遠(yuǎn)端多點(diǎn)即時影像監(jiān)看與相關(guān)設(shè)備的控制;透過Linux操作系統(tǒng)提供所需的穩(wěn)定性與效能,此系統(tǒng)將可有效協(xié)助企業(yè)、工廠、社區(qū)建立內(nèi)部控管中樞,控管分散在各地的分支機(jī)構(gòu)。 

      四、Linux DVR優(yōu)越的應(yīng)用前景 

  經(jīng)過幾年的發(fā)展,Linux技術(shù)和產(chǎn)品日趨成熟,有越來越多的公司了解Linux的優(yōu)點(diǎn),而選用Linux作為主要的操作系統(tǒng)和應(yīng)用平臺,安防監(jiān)控應(yīng)用亦不例外。Linux以其獨(dú)特的特性,已經(jīng)深入數(shù)字錄像監(jiān)控市場多時;其可針對不同硬件設(shè)備(PC或單晶片)與數(shù)字錄像監(jiān)控應(yīng)用需求而量身訂制,不僅可免去制式系統(tǒng)的復(fù)雜度,并可有效減少對硬體資源的需求;為了有效降低數(shù)字錄像監(jiān)控、安全管理系統(tǒng)的整體運(yùn)作成本,Linux操作系統(tǒng)應(yīng)是最適當(dāng)?shù)倪x擇。 

  Linux操作系統(tǒng)的穩(wěn)定性、安全性、可靠性已經(jīng)得到業(yè)界認(rèn)可,目前多數(shù)嵌入式系統(tǒng)皆傾向于采用Linux作業(yè)系統(tǒng),相關(guān)的開發(fā)工具、瀏覽器、GUI、應(yīng)用軟體技術(shù)基本上已相當(dāng)成熟,商業(yè)化的Linux系統(tǒng)應(yīng)用已經(jīng)切入的市場包括工業(yè)控制、網(wǎng)絡(luò)設(shè)備、機(jī)頂盒、網(wǎng)路電腦...等,數(shù)字硬盤錄像監(jiān)視系統(tǒng)亦是其中最具商業(yè)前景的Linux應(yīng)用之一,可見,Linux在IT界已經(jīng)走過泡沫概念期,進(jìn)入實(shí)用市場,已在豪威人的努力下開花結(jié)果。 

    豪威歷經(jīng)多年開發(fā)研究,將LINUX平臺與軟壓縮視頻技術(shù)進(jìn)行完美的融合,誕生了—紅色風(fēng)暴1號

1.國內(nèi)第一款基于LINUX平臺自主研發(fā)的軟壓縮視頻采集卡
2.堅(jiān)固不可侵入的LINUX系統(tǒng),體系結(jié)構(gòu)對病毒具有先天免疫能力, 徹底無病毒,無黑客,無死機(jī);
3.1+4+8路三款組合模式,使用便捷靈活;
4.軟件一裝到底,無需繁雜的WINDOWS平臺軟件安裝;讓您的商務(wù)人員都成為安裝工程師;
5.硬件視頻前向通道防雷擊設(shè)計(jì)、強(qiáng)脈沖以及靜電防護(hù)設(shè)計(jì);
6.無需購買昂貴的操作系統(tǒng),遺棄使用盜版軟件的尷尬]]>
體驗(yàn)Linux新技術(shù)http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1690&Page=1wangxinxin2010-11-23 14:02:28

有很多人都說Ubuntu和Fedora有很多相似之處,但就發(fā)布日期來說就非常接近。這兩個版本的發(fā)布周期大致相同,六個月發(fā)布一次,都在春季和秋季發(fā)布主要版本。這不10月10日Ubuntu 10.10的發(fā)布似乎還近在眼前呢,我們又迎來了Fedora 14的閃亮登場。

圖片點(diǎn)擊可在新窗口打開查看

代號“Laughlin”的Fedora 14在11月2日如期發(fā)布。Fedora 14使用Linux 2.6.35版核心與KDE 4.5.2、GNOME 2.32桌面環(huán)境,把RedHat的虛擬桌面架構(gòu)(VDI,virtual desktop infrastructure) Spice完整加入,該功能讓Fedora可以主控虛擬桌面,讓遠(yuǎn)端用戶自網(wǎng)路登入使用。 Spice具有2D加速、處理音訊播放與錄制、加密連線等特性。

這次的正式版添加了之前的測試版沒有的新功能,那就是系統(tǒng)工具鏈升級及D語言支持。不過,F(xiàn)edora 14的桌面設(shè)置還是搶先吸引了用戶的眼球。Fedora 14的桌面是GNOME的最新發(fā)布版本GNOME2.32。相比較Ubuntu最近才開始使用GNOME,F(xiàn)edora 14則一直堅(jiān)持使用GNOME。這個完整的發(fā)行版還包括最新版本的桌面KDE4.5.2。

從最新的試用體驗(yàn)來看,F(xiàn)edora 14以藍(lán)色為主題的GNOME桌面使用起來很有樂趣。在它上面你可以找到平時使用的Linux桌面程序。這些程序包括網(wǎng)頁瀏覽Firefox;即時通訊的Empathy;電子郵件和群組軟件Evolution;以及辦公軟件Openoffice。展望未來,F(xiàn)edora的團(tuán)隊(duì)還沒有承諾轉(zhuǎn)換到 OpenOffice fork,LibreOffice,看來或許會和Ubuntu的下一個版本步調(diào)一致吧!

圖片點(diǎn)擊可在新窗口打開查看

Fedora 14的另一個亮點(diǎn)則是納入了使用環(huán)境MeeGO 1.0,趕上熱門的平板電腦話題。這個由Intel及Nokia合作推廣的技術(shù)搭配Sugar CRM展示版、開發(fā)工具使用,展現(xiàn)平板電腦在商務(wù)上的應(yīng)用,與一般平板電腦所強(qiáng)調(diào)的多媒體休閑走向大異其趣。

圖片點(diǎn)擊可在新窗口打開查看

另一方面,在Fedora中有一些非常靈巧的新功能,使之能很好的工作。我不得不說相比于那些使用Fedora系統(tǒng)開發(fā)者和管理者,這些新功能更加適合于Fedora家庭用戶。

但最重要的是獨(dú)立計(jì)算機(jī)環(huán)境的簡單協(xié)議(SPICE)的到來。這是一個桌面介紹的服務(wù)協(xié)議,如微軟的RDP(遠(yuǎn)程桌面協(xié)議)和Citrix的ICA(獨(dú)立計(jì)算架構(gòu)),你用來運(yùn)行精簡電腦的桌面。

圖片點(diǎn)擊可在新窗口打開查看

還有一個很有意思的特點(diǎn)是你不需要在你自己的桌面或服務(wù)器上自己運(yùn)行Fedora。你現(xiàn)在就可以在亞馬遜靈活計(jì)算機(jī)云(EC2)的服務(wù)器上運(yùn)行Fedora。

該測試版原來還有個隱藏性功能Systemmd,可以快速啟動整個系統(tǒng),并自動裝、卸各項(xiàng)服務(wù),亦可制作系統(tǒng)狀態(tài)快照或追蹤系統(tǒng)、服務(wù)及附加套件等各種程序。但是在版本開發(fā)的最后階段被推遲了,計(jì)劃將在Fedora 15中和大家見面。那么到底是什么原因?qū)е耂ystemmd功能最終被擱置呢?本次專輯我們將帶給大家官方的相關(guān)解答,有興趣的朋友可別錯過了。

開篇我們就提到,有很多人都說Ubuntu和Fedora有很多相似之處,但是Ubuntu10.10和Fedora 14注重的側(cè)重點(diǎn)還是大不相同的。Ubuntu主要關(guān)注于10.04版本的完善,而Fedora 14則重點(diǎn)關(guān)注于系統(tǒng)基礎(chǔ)設(shè)施的完善。那么這兩個版本究竟都更新了哪些部分呢?又有什么不同呢?有心要比較的朋友,不妨通過本次專輯先來品評一翻吧!

圖片點(diǎn)擊可在新窗口打開查看

既然Ubuntu和Fedora非常相似,那么作為用戶來說卻面臨了選擇的難題。在Red Hat的支持下,F(xiàn)edora一直領(lǐng)跑社區(qū)版linux系統(tǒng)。但隨著Canonical公司支持一些開源軟件開發(fā)者,2004年,在Debian的基礎(chǔ)上推出了Ubuntu,情況就有所改變,時至今日,可以說Ubuntu是穩(wěn)穩(wěn)地占據(jù)著Linux排行榜的寶座。

這兩款操作系統(tǒng)毫無疑問都給人留下深刻印象,所以,很多初嘗linux操作系統(tǒng)的人,也時常糾結(jié)一個問題:選擇誰作為你第一個學(xué)習(xí)的linux操作系統(tǒng)?這里編者通過整理資料呈現(xiàn)兩者的微妙差別,試圖為你選擇一款適合自己學(xué)習(xí)的linux系統(tǒng)作為依據(jù)。Linux的新人們不妨通過本次專輯來做一下自己的選擇吧!

Ubuntu 10.10已經(jīng)于十月登場了,如今Fedora 14帶著最新的開源技術(shù)全面來襲,那么哪個更合用戶的胃口呢?大家還是先去試試Fedora 14,再下定論吧!

]]>
mips linux技術(shù)經(jīng)驗(yàn)總結(jié)http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1689&Page=1wangxinxin2010-11-23 14:00:31

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'
應(yīng)該使用下面的命令
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ù)解釋轉(zhuǎn)義字符
       -n     do not output the trailing newline
       -e     enable interpretation of the backslash-escaped characters listed
              below
3:
sed /^$/d 刪除文件中的空行
                
                
               

]]>
用于便攜式設(shè)備動態(tài)電源管理的嵌入式Linux技術(shù)http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1688&Page=1wangxinxin2010-11-23 13:53:26任何擁有筆記本電腦的人都會察覺,當(dāng)依靠電池供電時,其便攜設(shè)備的行為與使用交流主電源供電時不同——顯示屏變暗、處理器的時鐘變慢、系統(tǒng)只要有可能就會轉(zhuǎn)入待機(jī)或睡眠狀態(tài)。PDA用戶也發(fā)現(xiàn),在停止使用一段時間后顯示屏將變暗,設(shè)備甚至進(jìn)入睡眠狀態(tài)。蜂窩電話用戶也已經(jīng)注意到,背景光和按鍵照明在完成撥號之后會熄滅。事實(shí)上,這些可見行為的背后是軟硬件技術(shù)和節(jié)電機(jī)制在發(fā)揮作用。

全速運(yùn)行、待機(jī)和睡眠等宏觀行為利用CPU的固有能力通過降低工作電壓或時鐘頻率來節(jié)省功耗。除了全面地改變系統(tǒng)狀態(tài)外,大多數(shù)設(shè)備用戶察覺不到的是,實(shí)際的電源管理也能夠逐漸地改變系統(tǒng)狀態(tài),這種情況在一秒之內(nèi)可以發(fā)生數(shù)百次。

任何動態(tài)電源管理策略的基礎(chǔ)都是調(diào)整便攜式設(shè)備中一個或多個處理器內(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)電源管理方案應(yīng)該可以采用與CPU內(nèi)核運(yùn)行相協(xié)調(diào)或相獨(dú)立的方式,???持對一系列電壓和時鐘的快速調(diào)節(jié)。

DPM架構(gòu)圖1:電源管理和嵌入式Linux軟件堆棧。

兩個現(xiàn)有的電源管理方案分別來自于PC和筆記本電腦領(lǐng)域:一個是傳統(tǒng)的高級電源管理(APM)方案,它目前仍然使用在許多基于Linux的便攜設(shè)備中,但在基于微軟操作系統(tǒng)的筆記本電腦和手持設(shè)備中已經(jīng)被逐步淘汰;另一個是高級配置和電源接口(ACPI)方案,它是英特爾、東芝和其他一些公司???持的現(xiàn)行標(biāo)準(zhǔn)。在PC、筆記本電腦、服務(wù)器、甚至刀片式通信設(shè)備等商業(yè)硬件中,類似ACPI的系統(tǒng)是人們的首選,但它強(qiáng)烈依賴于流行的x86/IA-32 BIOS 架構(gòu)。

嵌入式系統(tǒng)通常沒有類似于PC中的BIOS,而且通常不具備那么高的機(jī)器抽象水平,能夠把操作系統(tǒng)與低層次的設(shè)備和電源管理活動隔離開來。與其它瞄準(zhǔn)電池供電應(yīng)用的操作系統(tǒng)類似,在嵌入式Linux中,電源管理活動需要對操作系統(tǒng)內(nèi)核和設(shè)備驅(qū)動程序進(jìn)行特殊的干預(yù)。不過,需要重點(diǎn)強(qiáng)調(diào)的是,雖然低層次的動態(tài)電源管理是駐留在操作系統(tǒng)內(nèi)核中,但電源管理策略和機(jī)制是來源于中間件和用戶應(yīng)用代碼。

接口和API

理想的電源管理系統(tǒng)應(yīng)盡可能對更多軟件堆棧層達(dá)到幾乎完全透明的程度。事實(shí)上,這是Transmeta公司在其Crusoe架構(gòu)中所遵循的路線,而且已經(jīng)成為基于BIOS的現(xiàn)有電源管理方案追求的目標(biāo)。然而,具備手持設(shè)備設(shè)計(jì)經(jīng)驗(yàn)的開發(fā)人員證實(shí),系統(tǒng)內(nèi)部各部分之間需要某種程度的直接合作,具體描述如下:

內(nèi)核接口

在面向Linux的DPM架構(gòu)中,內(nèi)核中的DPM子系統(tǒng)負(fù)責(zé)維持整個系統(tǒng)的電源狀態(tài),并把DPM系統(tǒng)的不同電源管理模塊聯(lián)系在一起。如果內(nèi)核的任何其它部分需要與DPM直接對話(盡管這種情況相對較少),那么最好把DPM看成是為驅(qū)動程序、中間件和應(yīng)用程序提供服務(wù)的元素。

驅(qū)動程序接口

???持DPM功能的設(shè)備驅(qū)動程序比默認(rèn)的驅(qū)動程序更了解系統(tǒng)狀態(tài):它們在外部事件的驅(qū)使下通過設(shè)定不同的狀態(tài)來反映或遵循那些操作機(jī)制,或者通過來自內(nèi)核DPM子系統(tǒng)的調(diào)用來反映或遵循那些操作機(jī)制。為了實(shí)現(xiàn)更精確的機(jī)制決策,驅(qū)動程序API也允許驅(qū)動程序注冊與它們接口或由它們管理的那些設(shè)備的基礎(chǔ)操作特征。

應(yīng)用程序API

應(yīng)用程序可以分為三類:


*電源管理知會型(PM-aware)應(yīng)用程序


*在電源管理知會“包裹器”中的傳統(tǒng)應(yīng)用程序


*不帶有電源管理的傳統(tǒng)應(yīng)用程序

電源管理知會型應(yīng)用程序能夠利用機(jī)制管理器提供的API,建立其基本的約束條件,并強(qiáng)迫電源管理機(jī)制發(fā)生與其執(zhí)行需求相匹配的變化。不直接帶有電源管理能力的傳統(tǒng)應(yīng)用程序能夠被“包裹”在代碼或補(bǔ)丁中,以達(dá)到較高的效率,但它們也能夠根據(jù)更大范圍的默認(rèn)機(jī)制管理,按默認(rèn)的行為運(yùn)行。

在嵌入式Linux圖2:時鐘變換過程的延時。 DPM下的實(shí)際機(jī)制包括以下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接口。

對實(shí)時性能的影響

迄今為止,調(diào)整CPU電壓和頻率對系統(tǒng)的實(shí)時性能而言依然是一個重大挑戰(zhàn)。任何參數(shù)的改變都將導(dǎo)致系統(tǒng)不穩(wěn)定,重新鎖定鎖相環(huán)和其它動態(tài)時鐘機(jī)制也需要相應(yīng)的時間,這兩個因素將使系統(tǒng)的響應(yīng)出現(xiàn)長延時(有時達(dá)到數(shù)十毫秒),在此期間,CPU既不能執(zhí)行計(jì)算操作,也不能對外部事件(中斷)做出響應(yīng)。

TI的OMAP、英特爾的Xscale和IBM的PowerLP等嵌入式處理器能夠在十幾毫秒的延時內(nèi)調(diào)整頻率,在數(shù)十毫秒的延時內(nèi)改變電壓,而且所有這些動作都不會中斷系統(tǒng)的操作,從而允許實(shí)現(xiàn)更大膽和更精確的節(jié)電機(jī)制。例如,在處理MPEG視頻幀或IP語音包的過程中可以降低電壓和頻率。

實(shí)時性能面臨的一個更普遍的挑戰(zhàn)是,如何在睡眠模式期間對中斷做出響應(yīng)。雖然通過編程,大多數(shù)片上外圍元件在收到中斷之后都可以喚醒系統(tǒng),但開發(fā)者必須謹(jǐn)慎地定義用于喚醒設(shè)備的機(jī)制,并把整個系統(tǒng)的延時和存儲器類別考慮在內(nèi),以確保處理中斷的執(zhí)行時間和用戶空間對事件的響應(yīng)(優(yōu)先延時)。

向嵌入式Linux發(fā)展的趨勢

理想情況下,用戶既無需知道也無需關(guān)心???撐其手持設(shè)備的底層操作系統(tǒng)。現(xiàn)在,設(shè)備制造商對操作系統(tǒng)有了更多的選擇余地。雖然微軟一直非常重視品牌,但Windows系列操作系統(tǒng)進(jìn)入手持設(shè)備市場(如蜂窩電話)的規(guī)模卻落后于Symbian和Brew,也落后于嵌入式Linux。設(shè)備制造商轉(zhuǎn)向Linux的原因之一是可以利用標(biāo)準(zhǔn)的電源管理技術(shù)替代專有技術(shù),這樣既能達(dá)到更快的上市時間,同時又能滿足終端用戶和運(yùn)營商的技術(shù)需求。

]]>
基于Linux的移動電話開發(fā)技術(shù)及前景http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1687&Page=1wangxinxin2010-11-23 13:50:57技術(shù)上的挑戰(zhàn)。  特別的是oem們必須保證電話具有電源管理,快速引導(dǎo),集成的無線接口,先進(jìn)的多媒體功能,吸引人的小尺寸gui以及各種的pim應(yīng)用-而且所有的這些全部集成和運(yùn)行在一個適度的手機(jī)儲存空間里面。這也是嵌入linux 開發(fā)者所面臨的挑戰(zhàn),不同于pc,電話設(shè)計(jì)并不是建立在一個標(biāo)準(zhǔn)的系統(tǒng)上面。文章詳細(xì)闡述了基于linux的移動電話開發(fā)的各種技術(shù)問題,涉及到關(guān)鍵的linux技術(shù)和支持電話開發(fā)開源項(xiàng)目的可用性和成熟性。另外,文章還討論了移動運(yùn)營商提出的技術(shù)和經(jīng)濟(jì)層面的問題。   全球移動電話的市場正在爆炸性的增長,分析機(jī)構(gòu) idc 2005年q2的報(bào)告中指出,手機(jī)市場增長了近34%,全球語音和數(shù)據(jù)網(wǎng)絡(luò)中,近7億部手機(jī)正在oem工廠設(shè)計(jì)和生產(chǎn)很快將進(jìn)入百姓的手中,分析公司gartner 預(yù)測到2009年,全球移動電話的安裝數(shù)量將達(dá)到26億部。對于以linux為中心的it工業(yè)而言,這些數(shù)字相對于linux的發(fā)貨和服務(wù)器的安裝,即使是全球的桌面市場的數(shù)量也是巨大的.這樣的移動 電話市場即代表了一個爆炸性增長的機(jī)會也表示了它在終端市場的占有率,而且它也是對于linux 已經(jīng)占領(lǐng)的基于電信,企業(yè)和嵌入式linux 的設(shè)備市場的一個很好的補(bǔ)充。   為什么是linux和無處不在的linux?   在過去3年linux 作為移動電話的os平臺已經(jīng)取得了相當(dāng)大的收獲。oem 如lg、 摩托羅拉、 nec、 松下 和三星已經(jīng)銷售了20余款 linux 電話,另外還有中國品牌的大唐、e28(上海毅仁信息科技)、 海爾和 中興, 諾基亞 和其他的oem也已經(jīng)開始銷售基于linux 的無線voip 終端。無論是大型還是小型的oem都正在選擇linux 作為智能手機(jī)的策略平臺,這里面即有技術(shù)原因也存在經(jīng)濟(jì)的因素。在技術(shù)層面,oem們選擇linux 是因?yàn)樗男阅?可靠性,標(biāo)準(zhǔn)的tcp/ip網(wǎng)絡(luò)和靈活性,在經(jīng)濟(jì)方面, linux 可以給oem 們更低的開發(fā)和布置成本,更多的供應(yīng)商或者自己開發(fā)的方案, linux還可以給oem 們一個廣泛開發(fā)的商業(yè)技術(shù)生態(tài)環(huán)境和一個可能的機(jī)會 ——統(tǒng)一的產(chǎn)品線和工程投入以支持多層次的產(chǎn)品(包括智能手機(jī),功能手機(jī)和入門級手機(jī)),多種網(wǎng)絡(luò)制式(gsm, cdma, wcmda 和wi-fi)以及運(yùn)營商日益變化的需要。   因?yàn)檫@些技術(shù)和經(jīng)濟(jì)上的利益, linux 電話的數(shù)量已經(jīng)達(dá)到市場總量的1-2% ,在智能手機(jī)這個快速增長的領(lǐng)域里linux 正在占據(jù)著一個強(qiáng)有力的位置,智能手機(jī)的市場份額正以每年85%增長,而linux 有25%的市場份額(gartner2005年的數(shù)據(jù)),遠(yuǎn)遠(yuǎn)領(lǐng)先windows mobile ,只比symbian os 落后一個百分點(diǎn)。   電話的分類   劃分電話的類型不是一個精確的科學(xué)過程,甚至也不是一個準(zhǔn)確的市場活動。某些功能電話的顯著特點(diǎn)(如email,圖像處理)已經(jīng)是今天各種價格的電話的基本功能了。即使今天智能手機(jī)所具有的特性也許是6個月后所有手機(jī)都有的功能,今天你以為物有所值的功能手機(jī),在假期結(jié)束以后已經(jīng)淪為可以作為禮品的入門手機(jī)了,而且它們可能只有從春天到夏天的一個季節(jié)生命周期。   智能手機(jī)的陷阱   比較起把開源的os放在一個低端手機(jī)上,發(fā)布一款智能手機(jī)是相對容易多了。因?yàn)橹悄苁謾C(jī)的售價和利潤都高,它可以有允許更多的bom(材料成本)和軟硬件空間實(shí)現(xiàn)多媒體、顯示和射頻基帶(rf)等電話關(guān)鍵功能。一般情況下智能手機(jī)的應(yīng)用os(linux, windowsmobile, 等)是運(yùn)行在一個專門的應(yīng)用處理器上,同時另外的一個cpu 和dsp處理語音,多媒體和rf功能。智能手機(jī)的購買者是典型的成熟用戶,他們熱衷于新技術(shù),并且對于由于新的技術(shù)和功能代來的電池消耗等問題更有相當(dāng)?shù)膶捜荻取?  然而到目前為止智能手機(jī)只占有整個手機(jī)市場的6%,如果linux開發(fā)者真正希望進(jìn)入廣闊的手機(jī)市場,linux 手機(jī)平臺必須支持中端手機(jī)或者“功能手機(jī)”的技術(shù)和經(jīng)濟(jì)層面的要求。這些手機(jī)在技術(shù)方面無法和智能手機(jī)賽跑,硬件方面也無法和智能手機(jī)相比,一個低成本的bom 意味著運(yùn)行在應(yīng)用處理器上的linux 不得不面對所有的語音,數(shù)據(jù),rf和圖形任務(wù)。一個運(yùn)行在0-200mhz的單芯片cpu 的linux電話需要電源管理和合適的儲存空間以匹配linux 的運(yùn)行和成本的控制要求。   社會團(tuán)體和各國政府正在幫助縮小全球數(shù)字化的鴻溝,我們可以大膽的想象這是一款針對發(fā)展中國家的低收入人群開發(fā)的電話(可以認(rèn)為是個瘦ubuntu:一種時下流行開源的linux),就好像是目前難以讓人琢磨的$100 電腦一樣,下一個也許是“免費(fèi)的” linux 電話了。   隨著時間的流失,中端甚至低端電話的硬件都可以滿足linux 的要求,但是同時這些手機(jī)的利潤也變得越來越薄。過去10余年電池技術(shù)不能以一個適度的速度提升,這就意味著應(yīng)用不能和時鐘的提速相匹配。所以如果linux電話要跳出智能手機(jī)的桎梏,它必須采用新的功能并改進(jìn)和合并許多現(xiàn)有的功能以應(yīng)對面臨的挑戰(zhàn)。  技術(shù)挑戰(zhàn)   開放軟件開發(fā)試驗(yàn)室(osdl.org)最近發(fā)起了新的行動計(jì)劃-mli(mobile linux initiative),目的是培養(yǎng)和支持linux 在移動電話手機(jī)的應(yīng)用。mli目前的首要任務(wù)是使linux 成為更適合手機(jī)的os 平臺。下面列舉的一些問題來自mli的參與者和有興趣的合作伙伴,特別是手機(jī)制造商和芯片供應(yīng)商?   電源管理   今天,如果便攜式設(shè)備制造商想要提供一個基于linux和有電源管理的設(shè)備,他們將面對各種方案而不知所措。   oem可以參考以筆記本為代表的桌面系統(tǒng)的電源管理,如acpi和apm,在內(nèi)核的郵件列表中關(guān)于桌面電源管理的討論確實(shí)也是最多的,非x86/ia-32 結(jié)構(gòu)的筆記本硬件,oem可以使用針對蘋果powerpc 的pmu。 嵌入式的oem如果是使用arm授權(quán)的芯片可以借助arm公司的lem框架,或者使用10余家arm授權(quán)芯片公司也有自己的電源管理方案(如freescale, intel, nec, samsung, ti等)。   mips和mips授權(quán)芯片公司,freexscale,ibm power 框架 , renesas 和 hitachi產(chǎn)品線也有自己的更加獨(dú)特的能源管理協(xié)議和方法。oem當(dāng)然可以選擇像montavista 的 dpm和其他嵌入式linux供應(yīng)商的方案。選擇當(dāng)然是一件好的事情,但是太多的選擇會導(dǎo)致方案支離破碎的狀況和應(yīng)用缺少可再用性。應(yīng)對電源管理的問題,osdl mli的成員和工業(yè)界已經(jīng)表達(dá)了一種愿望,即一個統(tǒng)一的,跨處理器平臺的電源管理途徑,或者一個主流的,更高層次的,可以覆蓋嵌入式,桌面和刀片服務(wù)器能源管理的體系結(jié)構(gòu)。   無線電接口   今天的linux智能手機(jī)中,gprs接口是被集成在一個調(diào)制解調(diào)器里面,它包含一個cpu核,dsp和支持無線通訊的 rf硬件。很像一個調(diào)制解調(diào)器——許多智能手機(jī)和這些嵌入式處理器是通過一個串口上的at命令進(jìn)行通訊的。這種靠卸載無線電功能來簡化智能手機(jī)設(shè)計(jì)的方法是可行的,但是這將會進(jìn)一步增加整個手機(jī)的成本。今天,一些富有經(jīng)驗(yàn)的設(shè)計(jì)已經(jīng)去掉了調(diào)制解調(diào)器,把基帶接口開放給了應(yīng)用處理器(像目前中低端的手機(jī)使用nucleus這種情況),但是這樣會給即使是最新linux的實(shí)時性技術(shù)(搶占和開源的實(shí)時補(bǔ)丁-下面還會提到)帶來相當(dāng)?shù)膲毫Αsm或者cmda無線協(xié)議信令幀大約是800-900微秒的時間,如果你們是x86/ia-32 或者是powerpc處理器一般都是500 mhz 到1.5 ghz cpu 時鐘, 一個毫秒以內(nèi)的最壞情況的響應(yīng)是很容易到達(dá)的,但是如果是處理器時鐘在0-200 mhz,的arm cpu,基于linux的硬實(shí)時的中端響應(yīng)和搶占延遲仍然是具有挑戰(zhàn)的。另外的一個挑戰(zhàn)的領(lǐng)域是把已經(jīng)非常成熟的電話協(xié)議棧移植到linux上.,這種軟件是基于傳統(tǒng)的rtos開發(fā)和優(yōu)化的,像nucleus 和 rex。這些多層協(xié)議是用每一層特有的線程切換技術(shù)實(shí)現(xiàn)的,如果移植到linux可能會在層和層之間增加20-30微秒切換延遲,這樣只是穿越一個單包的協(xié)議棧就消耗了計(jì)算時間的很大的部分,留給其他任務(wù)的cpu時間就很少了。所以,如果linux要想進(jìn)入中低端手機(jī)的設(shè)計(jì)領(lǐng)域,它必須要解決低延遲的任務(wù)切換和cdma/gsm協(xié)議棧的移植這兩個重要的問題。   實(shí)時性   在過去的5年中,linux已經(jīng)在向自身實(shí)時性改善的方向發(fā)展并取得了長足的進(jìn)步。今天linux已經(jīng)具備了本身的實(shí)時性選擇,包括搶占內(nèi)核,0(1) 調(diào)度,futexes 和最近的開源的實(shí)時linux項(xiàng)目-現(xiàn)在已經(jīng)合并到由ingo molnar維護(hù)的搶占補(bǔ)丁里面了。同時還有雙內(nèi)核和虛擬計(jì)算的技術(shù),像rtlinux, rtai,adeos和未公開的jaluna osware。實(shí)現(xiàn)把一個嵌入式的rtos虛擬到linux里面,另外還有一些目前還屬于研究階段的實(shí)時項(xiàng)目和技術(shù),如l4 micokernel 和l4 linux 等。osdl mli 的成員和社區(qū)更愿意接受和喜歡linux本身的實(shí)時性改善的實(shí)時方案,為了支持linux直接面對rf處理器,多媒體和語音處理,多數(shù)人認(rèn)為linux應(yīng)該繼續(xù)在本身像rtos 一樣在實(shí)時響應(yīng)方面發(fā)展。在移動電話的設(shè)計(jì)中,為了減少電池消耗,系統(tǒng)時鐘可能從200mhz降低到40 mhz (甚至0 mhz)后再回升回去以響應(yīng)系統(tǒng)的策略和外設(shè)輸入的要求,這些動作產(chǎn)生的切換要求linux必須有足夠的響應(yīng)能力和時限保證。  小尺寸   今天智能手機(jī)出廠的時候已經(jīng)有了128mb的flash 和64mb的ram,然而作為一個電話的os需要為在有限的存儲器里尋找節(jié)省每個字節(jié)而努力。os和中間件占掉的每個字節(jié)都不能為oem增值而服務(wù)。在原理上嵌入式 linux 可以以大約1mb的容量布置,但是實(shí)際電話的配置中卻大的多。嵌入式系統(tǒng)開發(fā)人員,平臺提供商和linux 內(nèi)核的維護(hù)者都提供了一系列配置工具以壓縮linux平臺的尺寸。   運(yùn)營商的新需求   電話制造商雖然希望按照自己的想象進(jìn)行創(chuàng)新,但是已經(jīng)意識到他們不能完全按照自己想法去設(shè)計(jì)和生產(chǎn)一個電話,取而待之的是他們必須遵循他們的用戶-移動運(yùn)營商(像cingular, 沃達(dá)豐,中國移動等)的要求和規(guī)范去做事,這些無線網(wǎng)絡(luò)運(yùn)營企業(yè)公司,他們多數(shù)是本國政府嚴(yán)格控制的或者大型的跨國企業(yè),他們要代表政府和行業(yè)去管理和規(guī)范市場,移動電話是這個系統(tǒng)中的一個重要組成部分和單元。   每個國家的政府,尤 其是美國政府對無線電頻譜都進(jìn)行嚴(yán)格的管理和控制,美國的聯(lián)邦通訊委員會(fcc)拍賣和發(fā)放無線頻譜和管理帶寬,信號強(qiáng)度,安全和內(nèi)容。雖然個別國家和地區(qū)協(xié)會趨向于開放和免費(fèi)使用無線頻率。   負(fù)責(zé)政策和規(guī)則制定的移動運(yùn)營商完全可以體會到開放的設(shè)備結(jié)構(gòu)帶來的問題,運(yùn)營商并不是完全反對開放, 只是會更多的考慮到如何安全的布置增值服務(wù)和管理問題。協(xié)調(diào)在技術(shù)層面建立一個完善開放環(huán)境和一個有限制的api 接口,當(dāng)然還有著更多的政策和法規(guī)的討論,設(shè)備制造商,電話的開發(fā)者和行業(yè)主管已經(jīng)打開了原來是完全封閉的手機(jī)一點(diǎn)點(diǎn)口子,比如在過去5年里面用戶和行業(yè)觀察家看到j(luò)ava 和 brew電話, 更令人振奮的是最近幾年的symbianos 和 windows mobile 5.0.上的本機(jī)應(yīng)用軟件層出不窮?   基于linux的電話展示了未來一個在用戶空間可以編程的安全開放環(huán)境;而且它擁有一個具有優(yōu)秀的開發(fā)人員的完善的社區(qū)團(tuán)隊(duì)。相信未來基于linux的電話將是一個完全的開放平臺,但是目前的情況還不近人意,現(xiàn)在發(fā)行的linux電話是基于一個內(nèi)核和許多os的組件(像某個版本的qt),它們不是一個開放的設(shè)備。黑客不能(或者說非常不容易)自己構(gòu)造一個內(nèi)核,os和應(yīng)用部件替代原來的系統(tǒng)(像大家以前做過的linux pda一樣),甚至即使是在電話應(yīng)用上面增加一點(diǎn)功能。這些設(shè)備不能注冊登陸和讓用戶自己刷新,現(xiàn)在開啟這些linux 電話大門只是java。市場上有開放的linux手機(jī)資源,一個項(xiàng)目是harald welte的 open-ezx (www.open-ezx.org)。這個項(xiàng)目還處在一個早期階段,項(xiàng)目努力在構(gòu)造一個100%開放的電話軟件支持像a780和e680的motorola電話。項(xiàng)目的wiki (wiki.openezx.org)里面充滿如果使用open-ezx可能不能正確的引導(dǎo)和失去正常功能的各種警告信息,但是這個項(xiàng)目的確包含了如何構(gòu)造和生成一個‘shell’,以及交叉編譯這些有用的信息(因?yàn)閍780和e680是基于intel xscale 框架的 pxa 處理器)。   motorola的首席電話框架師絕對是不支持這樣的努力, 原因是什么?主要是責(zé)任問題。電話用戶會擔(dān)心他們的電話網(wǎng)絡(luò)的完整性,安全性。當(dāng)然motorola還擔(dān)心要支持?jǐn)?shù)百萬部電話以及他們可能的各種open-ezx 軟件的分支版本, 這樣你就知道為什么叫“open-ezx”了,因?yàn)橄駇otorola這樣的設(shè)備制造商是希望鼓勵社區(qū)的開發(fā)者在他們的平臺上作些擴(kuò)展,他們只是希望這種擴(kuò)展的道路未來開放策略發(fā)展的軌跡。今天這個“open-ezx”最可能有意義的是為isv提供了一個sdk的開發(fā)環(huán)境。   希望不久的將來,通過教育和堅(jiān)持不懈的努力,小心謹(jǐn)慎的網(wǎng)絡(luò)運(yùn)營商和行業(yè)規(guī)劃者們將意識到移動電話是個計(jì)算平臺,而不只是個單功能的無線電設(shè)備。   結(jié)束語   linux 的電話正在走進(jìn)千家萬戶,2006年中 motorola中國公司繼a760,a780,e680后一款叫‘明’的linux手機(jī)以她亮麗的外觀,穩(wěn)定的平臺和軟件,新穎的功能為智能手機(jī)銷售歷史贏的了新的記錄和突破,更多本土和海外手機(jī)制造商和手機(jī)設(shè)計(jì)所 正在努力嘗試著linux手機(jī)的設(shè)計(jì),zte的e2,海爾的n60 ,e28的hawk3等就是他們當(dāng)中的姣姣者。日本ntt docomo電話公司最近宣布發(fā)表了最新的基于arm11 n903i ,這是繼成功的n900i, n901i,n902i后的又一款針對日本市場的3g手機(jī)。無疑,亞洲是linux 電話的重要舞臺和市場。osdl mli 的第一次成員會議選擇了中國召開,包括了motorola、montavista、windriver、intel數(shù)十家成員和觀察員的osdl大家庭聚會在2005年金秋的北京,筆者也看到包括大唐,華為,zte,龍旗在內(nèi)的中國手機(jī)制造和設(shè)計(jì)企業(yè)表現(xiàn)了極大的熱情和關(guān)注。osdl mli 通過會議的討論樹立了通過技術(shù)和經(jīng)濟(jì)層面的努力加快linux 在電話領(lǐng)域發(fā)展的奮斗目標(biāo)。雖然linux正在和將要面臨移動電話設(shè)計(jì)中的更多的技術(shù)和商業(yè)方面的挑戰(zhàn),包括某些領(lǐng)先的手機(jī)設(shè)備制造商也懷疑linux的成熟性,但是堅(jiān)信依托l(wèi)inux在電信服務(wù)器,通用的嵌入式系統(tǒng)的成功經(jīng)驗(yàn),豐富開源社區(qū)技術(shù)和商業(yè)人才,手機(jī)芯片公司,國際性的標(biāo)準(zhǔn)組織和電信運(yùn)營商以及世界和亞洲政府鼎立支持和推動,linux必將在移動電話領(lǐng)域發(fā)揮一個主導(dǎo)的作用]]>Linux-VPN技術(shù)http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1686&Page=1wangxinxin2010-11-23 13:47:40
以下內(nèi)容含腳本,或可能導(dǎo)致頁面不正常的代碼
說明:上面顯示的是代碼內(nèi)容。您可以先檢查過代碼沒問題,或修改之后再運(yùn)行.
]]>
Linux:前途與錢途http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1685&Page=1wangxinxin2010-11-23 13:46:14
]]>
Linux Ready Gohttp://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1684&Page=1wangxinxin2010-11-23 13:44:17
1、 目標(biāo)
了解Linux 的基礎(chǔ)知識,這些包含了用戶管理、群組的概念、權(quán)限的觀念等;
? 掌握至少50個以上的常用命令;
? 掌握.tgz、.rpm等軟件包的常用安裝方法
? 學(xué)習(xí)添加外設(shè),安裝設(shè)備驅(qū)動程序(比如網(wǎng)卡)
? 熟悉Linux文件系統(tǒng) 和目錄結(jié)構(gòu)。
? 掌握vi,gcc,gdb等常用編輯器,編譯器,調(diào)試器 。
? 理解shell別名、管道、I/O重定向、輸入和輸出以及shell腳本編程。
? 網(wǎng)絡(luò)的基礎(chǔ)包括: 掌握路由概念、OSI七層網(wǎng)絡(luò)模型、TCP/IP模型及相關(guān)服務(wù)對應(yīng)的層次對于Linux學(xué)習(xí)非常重要的。然后學(xué)習(xí)Linux環(huán)境下的組網(wǎng)


2、    學(xué)習(xí)方法
2.1、  從命令行開始從基礎(chǔ)開始
2.2、  選擇一本好的Linux書籍
2.3、  養(yǎng)成在命令行下工作
2.4、  養(yǎng)成在命令行下工作
2.5、  學(xué)習(xí)Shell
shell是用戶輸入命令與系統(tǒng)解釋命令之間的中介。最直觀的說法,一種Shell有一套自己的命令。舉一個容易理解的例子,Linux的標(biāo)準(zhǔn)Shel是Bash Shel;Solaris的shell是B shell;Linux的Shell是以命令行的方式表現(xiàn)出來的

2.6、   勤于實(shí)踐
2.7、   學(xué)會使用文檔
安裝一個新的軟件時先看README,再看INSTALL然后看FAQ,最后才動手安裝,這樣遇到問題就知道為什么。如果說明文檔不看,結(jié)果出了問題再去論壇來找答案反而浪費(fèi)時間。


——————————Linux視頻教程學(xué)習(xí)——————————————————
課程大綱:
1、 安裝篇
2、 基本命令篇
3、 應(yīng)用篇
4、 娛樂篇
5、 配置篇
6、 服務(wù)器篇



————————————Win7下安裝Linux————————————————————————————
1、 虛擬機(jī)品牌選擇:VMWare, WBOX(Sun收購的產(chǎn)品,現(xiàn)在的Oracle), VPC(微軟產(chǎn)品),      XENSERVER(思杰產(chǎn)品)
  問題:Win7下用什么虛擬機(jī)軟件好?

      虛擬機(jī) For Win7 付費(fèi)情況 最新版本 裝置包大小 特性

比較:Virtual PC XP Mode 不花錢 - 548M(含XP) 與Windows結(jié)合嚴(yán)密
      VMware Workstation 付費(fèi) 7.0 497M 周邊產(chǎn)品眾多,功用多到用不到
      VirtualBox 不花錢 3.0.10 69M 輕盈,普通使用足夠
     

——先下載個虛擬機(jī)軟件,比如vmware或者virtualbox之類的。這兩個里面我推薦后面一個,因?yàn)榍懊婺莻體積比較大,而且聯(lián)網(wǎng)那塊兒特別不好整,我原來用的時候整了好久都不行。而且桌面快捷圖標(biāo)好像在win7里面需要以管理員身份執(zhí)行才能打開虛擬機(jī),不然有個服務(wù)沒有打開,就不行。最后聽別人建議換成了virtualbox后安好就可以上網(wǎng)了。后面那個體積小,只有70-80M。雖然功能沒有vmware那么強(qiáng),但是夠用了。
安裝好了后,直接就可以新建一個虛擬機(jī)了。


2、 Linux系統(tǒng)的發(fā)型版本
      Linux, Ubutun、 debian、redhat(并購了jboss)等等, 國產(chǎn)的有紅旗、 雨木林風(fēng)等等
      LInux是內(nèi)核

     redHat的目標(biāo)就是服務(wù)器, Ub的目標(biāo)是桌面應(yīng)用(當(dāng)然Linux的服務(wù)器應(yīng)用都不會弱)

     Linux= 內(nèi)核 + 發(fā)行版


3、 觀看WIN7下使用vmware安裝雨木林風(fēng)操作系統(tǒng)

4、 redhat不適合初學(xué)者, ubutun比較好, 而且網(wǎng)上資料也多
    雨木淋風(fēng)也是使用的這個版本, 如果要和winli裝雨木淋風(fēng)

5、 vbox安裝ubuntu

  a、 fatal no bootable, system halted(異常)
      原因:沒有安裝好操作系統(tǒng), 虛擬機(jī)也是需要操作系統(tǒng)的
虛擬機(jī)使用的是虛擬硬盤,這個虛擬硬盤實(shí)際上就是一個文件,在VirtualBox中這個文件是.vdi文件

b、 原來是下載的iso文件有問題, 690M的卻只有32kb


6、 關(guān)于iso文件的再認(rèn)識
ISO一般都是將光盤文件做成一個文件,而有一些光盤軟件設(shè)定只能從光驅(qū)進(jìn)行安裝,那么直接解壓后還是不能使用,需要用到虛擬光驅(qū)軟件

現(xiàn)在網(wǎng)絡(luò)上有不少軟件是以ISO文件類型發(fā)布的。ISO是一種鏡像文件,它是將多個文件目錄或者是整個光盤文件壓縮成一個文件,這樣便于軟件的發(fā)布。對于ISO文件,是無法直接使用的,需要用到一些軟件將其解開才能使]]>
嵌入式Linux的開發(fā)和應(yīng)用優(yōu)勢http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1683&Page=1wangxinxin2010-11-23 13:34:24  1.開放的源碼,豐富的軟件資源

  Linux是自由的操作系統(tǒng),它的開放源碼使用戶獲得了最大的自由度。Linux上的軟件 
資源十分豐富,每一種通用程序在Linux上都可以找到。

  2.功能強(qiáng)大的內(nèi)核,性能高效、穩(wěn)定,多任務(wù)

  Linux的內(nèi)核非常穩(wěn)定,它的高效和穩(wěn)定性已經(jīng)在各個領(lǐng)域,尤其在網(wǎng)絡(luò)服務(wù)器領(lǐng)域,得到了事實(shí)的驗(yàn)證。Linux內(nèi)核小巧靈活,易于裁減,這使得它很適合嵌入式系統(tǒng)的應(yīng)用。

  3.支持多種體系結(jié)構(gòu),如X86、ARM、MIPS、ALPHA、SPARC等

  目前,Linux已經(jīng)被移植到數(shù)十種硬件平臺上,幾乎支持所有流行的CPU。

  4.完善的網(wǎng)絡(luò)通訊、圖形、文件管理機(jī)制

  Linux自產(chǎn)生之日起就與網(wǎng)絡(luò)密不可分,網(wǎng)絡(luò)是Linux的強(qiáng)項(xiàng)。另外,Linux還支持多種文件和圖形系統(tǒng)。

  5.支持大量的周邊硬件設(shè)備

  Linux上的驅(qū)動已經(jīng)非常豐富了,它們支持各種主流硬件設(shè)備和最新硬件技術(shù)。

  6.大小、功能都可定制

  Linux秉承Unix的優(yōu)秀設(shè)計(jì)思想,非常靈活,各部分的可定制性都很強(qiáng)。

  7.良好的開發(fā)環(huán)境,不斷發(fā)展的開發(fā)工具集

  Linux有著非常優(yōu)秀的完整開發(fā)工具鏈,有十幾種集成開發(fā)環(huán)境,其中很多是免費(fèi)的,大大降低了開發(fā)費(fèi)用。

  8.軟件開發(fā)者的廣泛支持

  Linux的自由精神吸引了成千上萬的程序員投入到Linux的開發(fā)和測試中來,這使得Linux在短時間內(nèi)就成為一個功能強(qiáng)大的操作系統(tǒng)。

  9.價格低廉

  有效降低產(chǎn)品成本,對成本敏感的嵌入式系統(tǒng)來說至關(guān)重要,Linux恰好具有這一特性。

  由此,我們有理由相信,在國內(nèi)外眾多Linux廠商的推動下,嵌入式Linux一定會成為Internet時代嵌入式操作系統(tǒng)

]]>
linux 基礎(chǔ)復(fù)習(xí)(7)串口應(yīng)用開發(fā) - 技術(shù)文檔 - 新手入門 Linux時http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1682&Page=1wangxinxin2010-11-23 13:26:07· 并行通信是指利用多條數(shù)據(jù)傳輸線將一個資料的各位同時傳送。它的特點(diǎn)是傳輸速度
快,適用于短距離通信,但要求傳輸速度較高的應(yīng)用場合。
· 串行通信是指利用一條傳輸線將資料一位位地順序傳送。特點(diǎn)是通信線路簡單,利用
簡單的線纜就可實(shí)現(xiàn)通信,降低成本,適用于遠(yuǎn)距離通信,但傳輸速度慢的應(yīng)用場合。
串口設(shè)置詳解
本節(jié)主要講解設(shè)置串口的主要方法。
如前所述,設(shè)置串口中最基本的包括波特率設(shè)置,校驗(yàn)位和停止位設(shè)置。串口的設(shè)置主
要是設(shè)置struct termios結(jié)構(gòu)體的各成員值,如下所示:
#include
struct termio
{      
unsigned short c_iflag; /* 輸入模式標(biāo)志 */
unsigned short c_oflag; /* 輸出模式標(biāo)志 */
unsigned short c_cflag; /* 控制模式標(biāo)志*/
unsigned short c_lflag; /*本地模式標(biāo)志 */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};
在這個結(jié)構(gòu)中最為重要的是c_cflag,通過對它的賦值,用戶可以設(shè)置波特率、字符大小、
數(shù)據(jù)位、停止位、奇偶校驗(yàn)位和硬件流控等。另外c_iflag 和c_cc 也是比較常用的標(biāo)志。在
此主要對這3 個成員進(jìn)行詳細(xì)說明。
c_cflag支持的常量名稱
CBAUD        波特率的位掩碼
B0           0波特率(放棄DTR)
B1800        1800波特率
B2400        2400波特率
B4800        4800波特率
B9600        9600波特率
B19200       19200波特率
B38400       38400波特率
B57600       57600波特率
B115200      115200波特率
EXTA         外部時鐘率
EXTB         外部時鐘率
CSIZE        數(shù)據(jù)位的位掩碼
CS5          5個數(shù)據(jù)位
CS6          6個數(shù)據(jù)位
CS7          7個數(shù)據(jù)位
CS8          8個數(shù)據(jù)位
CSTOPB       2個停止位(不設(shè)則是1個停止位)
CREAD        接收使能
PARENB       校驗(yàn)位使能
PARODD       使用奇校驗(yàn)而不使用偶校驗(yàn)
HUPCL        最后關(guān)閉時掛線(放棄DTR)
CLOCAL       本地連接(不改變端口所有者)
LOBLK        塊作業(yè)控制輸出
CNET_CTSRTS  硬件流控制使能

c_iflag支持的常量名稱
INPCK        奇偶校驗(yàn)使能
IGNPAR       忽略奇偶校驗(yàn)錯誤
PARMRK       奇偶校驗(yàn)錯誤掩碼
ISTRIP       除去奇偶校驗(yàn)位
IXON         啟動出口硬件流控
IXOFF        啟動入口軟件流控
IXANY        允許字符重新啟動流控
IGNBRK       忽略中斷情況
BRKINT       當(dāng)發(fā)生中斷時發(fā)送SIGINT信號
INLCR        將NL映射到CR
IGNCR        忽略CR
ICRNL        將CR映射到NL
IUCLC        將高位情況映射到低位情況
IMAXBEL      當(dāng)輸入太長時回復(fù)ECHO
c_cc 支持的常量名稱
VINTR     中斷控制,對應(yīng)鍵為CTRL+C
VQUIT     退出操作,對應(yīng)鍵為CRTL+Z
VERASE    刪除操作,對應(yīng)鍵為Backspace(BS)
VKILL     刪除行,對應(yīng)鍵為CTRL+U
VEOF      位于文件結(jié)尾,對應(yīng)鍵為CTRL+D
VEOL      位于行尾,對應(yīng)鍵為Carriage return(CR)
VEOL2     位于第二行尾,對應(yīng)鍵為Line feed(LF)
VMIN      指定了最少讀取的字符數(shù)
VTIME     指定了讀取每個字符的等待時間

串口控制函數(shù)
Tcgetattr         取屬性(termios結(jié)構(gòu))
Tcsetattr         設(shè)置屬性(termios結(jié)構(gòu))
cfgetispeed     得到輸入速度
Cfgetospeed           得到輸出速度
Cfsetispeed            設(shè)置輸入速度
Cfsetospeed           設(shè)置輸出速度
Tcdrain           等待所有輸出都被傳輸
tcflow           掛起傳輸或接收
tcflush           刷清未決輸入和/或輸出
Tcsendbreak           送BREAK字符
tcgetpgrp              得到前臺進(jìn)程組ID
tcsetpgrp               設(shè)置前臺進(jìn)程組ID

完整的串口配置模板,實(shí)用!把常用的選項(xiàng)在函數(shù)里面列出,可大大方便用戶的調(diào)試使用

int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
struct termios newtio,oldtio;
/*保存測試現(xiàn)有串口參數(shù)設(shè)置,在這里如果串口號等出錯,會有相關(guān)的出錯信息*/
if ( tcgetattr( fd,&oldtio) != 0)
{
perror("SetupSerial 1");
return -1;
}
bzero( &newtio, sizeof( newtio ) );
/*步驟一,設(shè)置字符大小*/
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE;
/*設(shè)置停止位*/
switch( nBits )
{
case 7:
newtio.c_cflag |= CS7;
break;
case 8:
newtio.c_cflag |= CS8;
break;
}
/*設(shè)置奇偶校驗(yàn)位*/
switch( nEvent )
{
case \"O\": //奇數(shù)
newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
newtio.c_iflag |= (INPCK | ISTRIP);
break;
case \"E\": //偶數(shù)
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
break;
case \"N\": //無奇偶校驗(yàn)位
newtio.c_cflag &= ~PARENB;
break;
}
/*設(shè)置波特率*/
switch( nSpeed )
{
case 2400:
cfsetispeed(&newtio, B2400);
cfsetospeed(&newtio, B2400);
break;
case 4800:
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);
break;
case 9600:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
case 115200:
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
break;
case 460800:
cfsetispeed(&newtio, B460800);
cfsetospeed(&newtio, B460800);
break;
default:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
}
/*設(shè)置停止位*/
if( nStop == 1 )
newtio.c_cflag &= ~CSTOPB;
else if ( nStop == 2 )
newtio.c_cflag |= CSTOPB;
/*設(shè)置等待時間和最小接收字符*/
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
/*處理未接收字符*/
tcflush(fd,TCIFLUSH);
/*激活新配置*/
if((tcsetattr(fd,TCSANOW,&newtio))!=0)
{
perror("com set error");
return -1;
}
printf("set done!\n");
return 0;
}






串口使用詳解
在配置完串口的相關(guān)屬性后,就可對串口進(jìn)行打開,讀寫操作了。其使用方式與文件操作一樣,區(qū)別在于串口是一個終端設(shè)備。

打開串口
fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);

Open函數(shù)中除普通參數(shù)外,另有兩個參數(shù)O_NOCTTY和O_NDELAY。
O_NOCTTY: 通知linix系統(tǒng),這個程序不會成為這個端口的控制終端。
O_NDELAY: 通知linux系統(tǒng)不關(guān)心DCD信號線所處的狀態(tài)(端口的另一端是否激活或者停止)。
然后,恢復(fù)串口的狀態(tài)為阻塞狀態(tài),用于等待串口數(shù)據(jù)的讀入。用fcntl函數(shù):
fcntl(fd, F_SETFL, 0);

接著,測試打開的文件描述府是否引用一個終端設(shè)備,以進(jìn)一步確認(rèn)串口是否正確打開。
isatty(STDIN_FILENO);
串口的讀寫與普通文件一樣,使用read,write函數(shù)。
read(fd,buff,8);
write(fd,buff,8);
實(shí)例


#include stdio.h>
#include string.h>
#include sys/types.h>
#include errno.h>
#include sys/stat.h>
#include fcntl.h>
#include unistd.h>
#include termios.h>
#include stdlib.h>
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
struct termios newtio,oldtio;
if ( tcgetattr( fd,&oldtio) != 0) {
perror("SetupSerial 1");
return -1;
}
bzero( &newtio, sizeof( newtio ) );
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE;
switch( nBits )
{
case 7:
newtio.c_cflag |= CS7;
break;
case 8:
newtio.c_cflag |= CS8;
break;
}
switch( nEvent )
{
case \"O\":
newtio.c_cflag |= PARENB;
newtio.c_cflag |= PARODD;
newtio.c_iflag |= (INPCK | ISTRIP);
break;
case \"E\":
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARENB;
newtio.c_cflag &= ~PARODD;
break;
case \"N\":
newtio.c_cflag &= ~PARENB;
break;
}
switch( nSpeed )
{
case 2400:
cfsetispeed(&newtio, B2400);
cfsetospeed(&newtio, B2400);
break;
case 4800:
cfsetispeed(&newtio, B4800);
cfsetospeed(&newtio, B4800);
break;
case 9600:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
case 115200:
cfsetispeed(&newtio, B115200);
cfsetospeed(&newtio, B115200);
break;
default:
cfsetispeed(&newtio, B9600);
cfsetospeed(&newtio, B9600);
break;
}
if( nStop == 1 )
newtio.c_cflag &= ~CSTOPB;
else if ( nStop == 2 )
newtio.c_cflag |= CSTOPB;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,&newtio))!=0)
{
perror("com set error");
return -1;
}
printf("set done!\n");
return 0;
}
int open_port(int fd,int comport)
{
char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"};
long vdisable;
if (comport==1)
{    fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
if (-1 == fd){
perror("Can\"t Open Serial Port");
return(-1);
}
else
printf("open ttyS0 .....\n");
}
else if(comport==2)
{    fd = open( "/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDELAY);
if (-1 == fd){
perror("Can\"t Open Serial Port");
return(-1);
}
else
printf("open ttyS1 .....\n");
}
else if (comport==3)
{
fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDELAY);
if (-1 == fd){
perror("Can\"t Open Serial Port");
return(-1);
}
else
printf("open ttyS2 .....\n");
}
if(fcntl(fd, F_SETFL, 0)0)
printf("fcntl failed!\n");
else
printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));
if(isatty(STDIN_FILENO)==0)
printf("standard input is not a terminal device\n");
else
printf("isatty success!\n");
printf("fd-open=%d\n",fd);
return fd;
}
int main(void)
{
int fd;
int nread,i;
char buff[]="Hello\n";
if((fd=open_port(fd,1))0){
perror("open_port error");
return;
}
if((i=set_opt(fd,115200,8,\"N\",1))0){
perror("set_opt error");
return;
}
printf("fd=%d\n",fd);
//    fd=3;
nread=read(fd,buff,8);
printf("nread=%d,%s\n",nread,buff);
close(fd);
return;
}

]]>
Linux Socket編程及其在無線網(wǎng)關(guān)中的應(yīng)用http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1681&Page=1wangxinxin2010-11-23 13:22:06l  引言

Linux具有豐富的網(wǎng)絡(luò)功能,完善的內(nèi)置網(wǎng)絡(luò)是Linux的一大特點(diǎn)。嵌入式Linux專用于微控制器,同樣具有優(yōu)秀的網(wǎng)絡(luò)功能。Linux是一種可移植的操作系統(tǒng),能夠在從微型計(jì)算機(jī)到大型計(jì)算機(jī)的任何環(huán)境中和任何平臺上運(yùn)行。可移植性為運(yùn)行Linux的不同計(jì)算機(jī)平臺與其他任何機(jī)器進(jìn)行準(zhǔn)確而有效的通訊提供了手段,不需要另外增加特殊的,昂貴的通訊接口。

該文在構(gòu)建基于嵌入式Linux和MPC852T無線網(wǎng)關(guān)平臺的基礎(chǔ)上,編程實(shí)現(xiàn)了無線網(wǎng)關(guān)平臺與無線終端之間的無線通信,并給出了無線網(wǎng)關(guān)平臺與無線終端之間通信的測試結(jié)果。

2  Linux下的socket編程

2.1 Socket編程

socket有3種類型:流式套接字、數(shù)據(jù)報(bào)套接字及原始套接字。流式套接字定義了一種可靠的面向連接的服務(wù),實(shí)現(xiàn)了無差錯的數(shù)據(jù)傳輸。數(shù)據(jù)報(bào)套接字定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無序的,并且不保證可靠。原始套接字允許對低層協(xié)議如IP或ICMP直接訪問,主要用于新的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的測試等。

無連接服務(wù)器一般都是面向事務(wù)處理的,一個請求和一個應(yīng)答就完成客戶程序與服務(wù)程序之間的相互作用。

面向連接服務(wù)器處理的請求比較復(fù)雜,往往是并發(fā)服務(wù)器。工作過程如下:服務(wù)進(jìn)程首先調(diào)用socket( )創(chuàng)建一個字節(jié)流套接字,并調(diào)用bind( )將服務(wù)器地址捆扎在該套接字上,接著調(diào)用listen( )監(jiān)聽連接請求,隨后調(diào)用accept( )做好與客戶進(jìn)程建立連接的準(zhǔn)備,無連接請求時,服務(wù)進(jìn)程被阻塞。當(dāng)連接請求到來后,服務(wù)器進(jìn)程被喚醒,建立一個新的Socket,并用新套接字同客戶進(jìn)程的套接字建立連接,而服務(wù)進(jìn)程最早生成的套接字則繼續(xù)用于監(jiān)聽網(wǎng)絡(luò)上的服務(wù)請求。客戶進(jìn)程調(diào)用socket( )創(chuàng)建字節(jié)流套接字,然后調(diào)用connect( )向服務(wù)進(jìn)程發(fā)出連接請求。服務(wù)進(jìn)程和客戶進(jìn)程通過調(diào)用read( )/recv( )和Write( )/send( )交換數(shù)據(jù)。

2.2 Linux下的socket函數(shù)庫

socket是面向用戶的,針對客戶和服務(wù)器程序提供不同的socket系統(tǒng)調(diào)用。客戶隨機(jī)申請一個socket,系統(tǒng)為之分配一個socket號,服務(wù)器擁有全局公認(rèn)的socket,任何客戶都可以向它發(fā)出一個連接請求和信息請求。無論socket的內(nèi)部機(jī)制如何,它提供給程序員的最終是一組系統(tǒng)調(diào)用,即socket的庫函數(shù)。Linux這些庫函數(shù)同樣適用于嵌入式linux。下面是編制程序常用的庫函數(shù):

1) socket( ):建立Socket,此函數(shù)用來建立Socket描述字,并為此Socket建立資源(為一個Socket數(shù)據(jù)結(jié)構(gòu)分配存儲空間)。應(yīng)用程序在使用socket之前,首先必須擁有一個socket。socket( )向應(yīng)用程序提供創(chuàng)建socket的手段。socket( )函數(shù)原形為int socket(int domain,int type,int protoco1);函數(shù)中的domain是參數(shù)指定通信中使用的協(xié)議簇,也就是網(wǎng)絡(luò)的類型,通常為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ù)在服務(wù)程序上使用,是調(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結(jié)構(gòu)的長度,常被設(shè)置為sizeof(struct sockaddr);my-addr是用于偵聽連接請求的本地地址。

函數(shù)在正常時返回0,否則返回l,同時error是系統(tǒng)錯誤碼。

3) listen( ):準(zhǔn)備接收連接請求。在用bind()給一個socket設(shè)定本地地址之后,就可以將這個socket用于接受連接請求,即listen()。函數(shù)原形為int listen(int s,int backlog);函數(shù)中的s是socket描述符;backlong是連接請求暫存隊(duì)列長度。

函數(shù)正常時返回0,否則返回1,同時error是系統(tǒng)錯誤碼。

4) accept( ):服務(wù)端應(yīng)用程序調(diào)用此函數(shù)來接受客戶端socket連接請求。在系統(tǒng)調(diào)用listen( )之后,系統(tǒng)就在socket的連接請求暫存隊(duì)列里存放每一個向該socket建立的連接請求,accept()的作用是從該暫存隊(duì)列中取出一個連接請求,用該socket的數(shù)據(jù),創(chuàng)建一個新的socket用來在服務(wù)端和客戶端之間傳遞接收信息,而原來socket仍然可以接收其他客戶端的連接要求。

函數(shù)正常創(chuàng)建了一個新的連接,那么返回非負(fù)的整數(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ù)是用來關(guān)閉某一socket。socket和文件描述符的關(guān)閉操作都使用這個函數(shù)。函數(shù)原形為int close(int fd);參數(shù)fd是socket描述符。函數(shù)在正常時返回0,返回1表示出錯。

7) send( )/recv( ):用于socket的發(fā)送和接收數(shù)據(jù)。在連接建立完成后,通信雙方就可以使用以上這些函數(shù)來進(jìn)行數(shù)據(jù)的發(fā)送和接收操作。

3 無線網(wǎng)關(guān)平臺的構(gòu)建

為了將無線終端設(shè)備接入控制網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,根據(jù)條件構(gòu)建了基于MPC852T和嵌入式Linux的無線網(wǎng)關(guān)平臺。MPC852T是Motorola推出的面向低端的一款通信處理器,具有通信和網(wǎng)絡(luò)處理能力強(qiáng)、可靠性高、功耗低、功能集成度高等優(yōu)點(diǎn),并且有眾多的操作系統(tǒng)支持,這使得它在各種嵌入式系統(tǒng),尤其是在網(wǎng)絡(luò)通信以及數(shù)據(jù)采集和傳輸?shù)认到y(tǒng)中的應(yīng)用較為廣泛。

無線網(wǎng)關(guān)的硬件設(shè)計(jì)方案采用中心控制方案,中央處理器選用MPC852T,在MPC852T外圍配置一個RS-232串口、一個10M以太網(wǎng)口、一個100M以太網(wǎng)接口、SDRAM同步動態(tài)隨機(jī)存儲器等構(gòu)成無線網(wǎng)關(guān)的硬件平臺,無線網(wǎng)關(guān)的硬件系統(tǒng)結(jié)構(gòu)圖如圖1所示。

無線網(wǎng)關(guān)與無線終端通信的實(shí)現(xiàn)

嵌入式Linux具有完善的TCP/IP協(xié)議棧,為滿足工業(yè)控制過程中傳輸數(shù)據(jù)量小、可靠性高、速度快等要求,這里使用socket編程來實(shí)現(xiàn)網(wǎng)絡(luò)通信。無線終端通過無線網(wǎng)卡與無線網(wǎng)關(guān)自動建立鏈接,無線終端完成數(shù)據(jù)的采集,并將采集的數(shù)據(jù)以無線的方式發(fā)送給網(wǎng)關(guān),無線網(wǎng)關(guān)把收到的數(shù)據(jù)上傳給上位機(jī)進(jìn)行分析、處理,最后計(jì)算出數(shù)據(jù)發(fā)送的速率。

圖片點(diǎn)擊可在新窗口打開查看

將編寫好的服務(wù)器端和終端程序進(jìn)行交叉編譯,將編譯得到的二進(jìn)制可執(zhí)行文件添加到RAMDISK中,壓縮新生成的ramdisk.image文件系統(tǒng)映像文件,重新編譯Linux內(nèi)核,生成Linux內(nèi)核映像文件,然后將內(nèi)核映像文件燒寫到無線網(wǎng)關(guān)平臺的FLASH中。無線網(wǎng)關(guān)平臺(服務(wù)器端)的主程序代碼如下:

#define PORT 3000       /*設(shè)定服務(wù)器監(jiān)聽端口*/

………………

int main(int argc,char* argv[ ])

{

int second;

int sockfd,new_fd;           /* sockfd為監(jiān)聽用描述符*/

struct sockaddr_in srvaddr;    /*定義服務(wù)器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(;;){          /*開始服務(wù)器循環(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);        /*父進(jìn)程不再需要該socket*/

………………;       

close(sockfd);

return 0;

}

}

測試結(jié)果

在上位機(jī)開啟通信終端,設(shè)置好串口參數(shù),進(jìn)入超級終端。無線網(wǎng)關(guān)平臺上運(yùn)行服務(wù)器端程序,同時在終端上運(yùn)行客戶端程序,即可進(jìn)行測試,測試結(jié)果如圖2所示。

圖片點(diǎn)擊可在新窗口打開查看

圖2  無線網(wǎng)關(guān)與無線終端測試結(jié)果圖

6  結(jié)

目前基于TCP/IP協(xié)議的工業(yè)以太網(wǎng)的在組網(wǎng)時仍需要布線,但在工業(yè)現(xiàn)場,布線時常會受到限制,電纜的連接也限制了現(xiàn)場設(shè)備的移動和網(wǎng)絡(luò)結(jié)構(gòu)的重組,還有一些高速旋轉(zhuǎn)設(shè)備根本無法通過電纜來傳輸數(shù)據(jù)。將802.11b無線通信技術(shù)應(yīng)用于工業(yè)控制網(wǎng)絡(luò),工控網(wǎng)絡(luò)就兼有了無線通信的優(yōu)點(diǎn):現(xiàn)場設(shè)備無需電纜即可與控制網(wǎng)絡(luò)連接,實(shí)現(xiàn)現(xiàn)場數(shù)據(jù)的無線采集和傳輸,對于在一些不可預(yù)知的環(huán)境,尤其是不適于布線的強(qiáng)腐蝕惡劣環(huán)境。本文作者創(chuàng)新點(diǎn):通過Linux下的socket編程實(shí)現(xiàn)了無線網(wǎng)關(guān)與無線終端的通信,可以使用無線通信來完成對現(xiàn)場設(shè)備的控制。

]]>
嵌入式linux操作系統(tǒng)應(yīng)用開發(fā)之:初識Qthttp://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1680&Page=1wangxinxin2010-11-23 13:20:23  隨著linux系統(tǒng)及基于linux系統(tǒng)的嵌入式產(chǎn)品的蓬勃發(fā)展,Qt、Qt/Embedded、Qtopia的字樣越來頻繁的出現(xiàn)在我們面前。

        在華清遠(yuǎn)見的嵌入式培訓(xùn)課程中,Qt是嵌入式學(xué)院<嵌入式工程師職業(yè)培訓(xùn)班>二期課程中嵌入式linux應(yīng)用開發(fā)方面的重要內(nèi)容。不少學(xué)員對QT方面的內(nèi)容比較關(guān)注,所以在這里我們先對QT做一下簡單介紹。

        QT

        Qt是一個多平臺的C++圖形用戶界面應(yīng)用程序框架,由挪威 TrollTech 公司出品。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級的圖形用戶界面所需的所用功能。Qt是完全面向?qū)ο蟮暮苋菀讛U(kuò)展,并且允許真正地組件編程。

        自1996年Qt進(jìn)入商業(yè)領(lǐng)域開始,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。Qt也是流行的Linux桌面環(huán)境KDE 的基礎(chǔ),KDE是所有主要的Linux發(fā)行版的一個標(biāo)準(zhǔn)組件。

        基本上,Qt 同 X Window (X Window是一種用于UNIX系統(tǒng)的標(biāo)準(zhǔn)圖形化用戶界面)上的 Motif、Openwin、GTK 等圖形界面庫和 Windows 平臺上的 MFC、OWL、VCL、ATL是同類型的東西,但是Qt 具有下列優(yōu)點(diǎn):

        ●  優(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 的良好封裝機(jī)制使得 Qt 的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt 提供了一種稱為 signals/slots(信號/槽) 的安全類型來替代 callback(回調(diào)函數(shù)),這使得各個元件之間的協(xié)同工作變得十分簡單;

        ● 豐富的API

        ● Qt 包括多達(dá)400個以上的 C++ 類,同時不斷擴(kuò)展。

        ● 支持 2D/3D 圖形渲染,支持 OpenGL;

        ● XML 支持;

        ● 開放源碼

       開放源優(yōu)勢包括一個活動的開放源開發(fā)員社團(tuán)。由于Qt的不間斷開發(fā),以及完整的代碼透明性,以允許Qt開發(fā)員進(jìn)行徹底深入地查看,進(jìn)行自定義并擴(kuò)展Qt來滿足其獨(dú)特的需求。

       Qt/Embedded

       Qt/Embedded是Qt的嵌入式版本,它在原始Qt的基礎(chǔ)上,做了許多出色的調(diào)整以適合嵌入式環(huán)境。同Qt/X11相比,Qt/Embedded很節(jié)省內(nèi)存,因?yàn)樗恍枰猉 server或是Xlib庫,它在底層摒棄了Xlib,采用framebuffer作為底層圖形接口。Qt/Embedded的應(yīng)用程序可以直接寫內(nèi)核幀緩沖,因此它在嵌入式linux系統(tǒng)上的應(yīng)用非常廣泛。

       最后再了解下Qtopia

       在Qt/Embedded版本4之前,Qt/Embedded和Qtopia是兩套不同的程序,Qt/Embedded是基礎(chǔ)類庫,Qtopia是構(gòu)建于Qt/Embedded之上的一系列應(yīng)用程序。但從版本4開始,Trolltech將Qt/Embedded并入了Qtopia,并推出了新的Qtopia4。在該版中,原來的Qt/Embedded被稱為Qtopia Core,作為嵌入式版本的核心,既可以與Qtopia配合,也可以獨(dú)立使用。原來的Qtopia則被分成幾層,核心的應(yīng)用框架和插件系統(tǒng)被稱為 Qtopia Platform,上層的應(yīng)用程序則按照不同的目標(biāo)用戶分為不同的包,如Qtopai PDA,Qtopia Phone等。

       于Qt方面的內(nèi)容,除了Qt、基于 Framebuffer(幀緩沖) 的 Qt /Embedded外,還有快速開發(fā)工具 Qt Designer以及國際化工具 Qt Linguist 等


]]>
基于ARM嵌入式Linux應(yīng)用開發(fā)與實(shí)例教程http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1679&Page=1wangxinxin2010-11-23 13:18:10RISC和CISC是目前設(shè)計(jì)制造微處理器的兩種典型技術(shù),雖然它們都試圖在體系結(jié)構(gòu)、操作運(yùn)行、軟件硬件、編譯時間和運(yùn)行時間等諸多因素中做出某種平衡,以求達(dá)到高效的目的,但采用的方法不同,因此,在很多方面差異較大,主要表現(xiàn)在以下幾個方面。

(1)   指令系統(tǒng)

RISC設(shè)計(jì)者把主要精力放在那些經(jīng)常使用的指令上,盡量使它們具有簡單高效的特色。對不常用的功能,則通過組合指令來完成。因此,在RISC機(jī)器上實(shí)現(xiàn)特殊功能時,效率可能較低。但可以利用流水技術(shù)和超標(biāo)量技術(shù)加以改進(jìn)和彌補(bǔ)。而CISC計(jì)算機(jī)的指令系統(tǒng)比較豐富,有專用指令來完成特定的功能。因此,處理特殊任務(wù)時的效率較高。

(2)   存儲器操作

RISC對存儲器操作有限制,使控制簡單化;而CISC機(jī)器的存儲器操作指令多,操作  直接。

(3)   程序

RISC匯編語言程序一般需要較大的內(nèi)存空間,實(shí)現(xiàn)特殊功能的程序復(fù)雜,不易設(shè)計(jì);而CISC匯編語言程序編程相對簡單,科學(xué)計(jì)算及復(fù)雜操作的程序設(shè)計(jì)相對容易,效率較高。

(4)   中斷

RISC機(jī)器在一條指令執(zhí)行的適當(dāng)?shù)胤娇梢皂憫?yīng)中斷;而CISC機(jī)器是在一條指令執(zhí)行結(jié)束后才響應(yīng)中斷。

(5)   CPU

RISC CPU包含較少的單元電路,因而面積小、功耗低;而CISC CPU包含豐富的電路單元,因而功能強(qiáng)、面積大、功耗大。

(6)   設(shè)計(jì)周期

RISC微處理器結(jié)構(gòu)簡單,布局緊湊,設(shè)計(jì)周期短,且易于采用最新技術(shù);CISC微處理器結(jié)構(gòu)復(fù)雜,設(shè)計(jì)周期長。

(7)   用戶使用

RISC微處理器結(jié)構(gòu)簡單,指令規(guī)整,性能容易把握,易學(xué)易用;CISC微處理器結(jié)構(gòu)復(fù)雜,功能強(qiáng)大,容易實(shí)現(xiàn)特殊功能。

(8)   應(yīng)用范圍

由于RISC指令系統(tǒng)的確定與特定的應(yīng)用領(lǐng)域有關(guān),故RISC機(jī)器更適合于專用機(jī);而CISC機(jī)器則更適合于通用機(jī)。

2. 嵌入式微控制器

嵌入式微控制器(Microcontroller Unit,MCU)又稱單片機(jī),顧名思義,就是將整個計(jì)算機(jī)系統(tǒng)集成到一塊芯片中。嵌入式微控制器一般以某一種微處理器內(nèi)核為核心,芯片內(nèi)部集成ROM/EPROM、RAM、Flash、總線、總線邏輯、定時/計(jì)數(shù)器、WatchDog、I/O、串行口、脈寬調(diào)制輸出、A/D、D/A等各種必要的功能模塊。為適應(yīng)不同的應(yīng)用需求,一般一個系列的單片機(jī)具有多種衍生產(chǎn)品,每種衍生產(chǎn)品的處理器內(nèi)核都是一樣的,不同之處在于存儲器和外設(shè)的配置及封裝。這樣可以使單片機(jī)最大限度地同應(yīng)用需求相匹配,從而減少功耗和成本。

與嵌入式微處理器相比,微控制器的最大特點(diǎn)是單片化,體積大大減小,從而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系統(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為基礎(chǔ)的PPC505和PPC555亦列入單片機(jī)行列。TI公司亦將其TMS320C2XXX系列DSP做為MCU進(jìn)行      推廣。

3. 嵌入式DSP處理器

DSP處理器對系統(tǒng)結(jié)構(gòu)和指令進(jìn)行了特殊設(shè)計(jì),使其適合于執(zhí)行DSP算法,編譯效率較高,指令執(zhí)行速度也較高。在數(shù)字濾波、FFT和譜分析等方面,DSP算法正在大量進(jìn)入嵌入式領(lǐng)域,DSP應(yīng)用正從在通用單片機(jī)中以普通指令實(shí)現(xiàn)DSP功能過渡到采用嵌入式DSP處理器。嵌入式DSP處理器有兩個發(fā)展來源,一是DSP處理器經(jīng)過單片化、EMC改造和增加片上外設(shè)成為嵌入式DSP處理器,TI的TMS320C2000/C5000等屬于此范疇;二是在通用單片機(jī)或片上系統(tǒng)(SOC)中增加DSP協(xié)處理器,例如Intel的MCS-296。

推動嵌入式DSP處理器(Embedded Digital Signal Processor,EDSP)發(fā)展的一個重要因素是嵌入式系統(tǒng)的智能化,例如各種帶有智能邏輯的消費(fèi)類產(chǎn)品,生物信息識別終端,帶有加解密算法的鍵盤,ADSL接入,實(shí)時語音壓解系統(tǒng),虛擬現(xiàn)實(shí)顯示等。這類智能化算法一般都是運(yùn)算量較大,特別是向量運(yùn)算、指針線性尋址等較多,而這些正是DSP處理器的長處   所在。

嵌入式DSP處理器比較有代表性的產(chǎn)品是Texas Instruments的TMS320系列和Motorola的DSP56000系列。TMS320系列處理器包括用于控制的C2000系列,移動通信的C5000系列,以及性能更高的C6000和C8000系列。DSP56000目前已經(jīng)發(fā)展成為DSP56000、DSP56100、DSP56200和DSP56300等幾個不同系列的處理器。

DSP的設(shè)計(jì)者們把重點(diǎn)放在了處理連續(xù)的數(shù)據(jù)流上。在嵌入式應(yīng)用中,如果強(qiáng)調(diào)對連續(xù)的數(shù)據(jù)流的處理及高精度復(fù)雜運(yùn)算,則應(yīng)該選用DSP器件。

4. 嵌入式片上系統(tǒng)

隨著VLSI設(shè)計(jì)的普及化及半導(dǎo)體工藝的迅速發(fā)展,可以在一塊硅片上實(shí)現(xiàn)一個更為復(fù)雜的系統(tǒng),這就是System On Chip(SOC)。各種通用處理器內(nèi)核將作為SOC設(shè)計(jì)公司的標(biāo)準(zhǔn)庫,和許多其他嵌入式系統(tǒng)外設(shè)一樣,成為VLSI設(shè)計(jì)中一種標(biāo)準(zhǔn)的器件,用標(biāo)準(zhǔn)的VHDL等語言描述,存儲在器件庫中。用戶只需定義出整個應(yīng)用系統(tǒng),仿真通過后就可以將設(shè)計(jì)圖交給半導(dǎo)體工廠制作樣品。這樣除個別無法集成的器件以外,整個嵌入式系統(tǒng)大部分均可集成到一塊或幾塊芯片中去,應(yīng)用系統(tǒng)電路板將變得很簡潔,對于減小體積和功耗、提高可靠性非常有利。

SOC可以分為通用和專用兩類。通用系列包括Motorola的M-Core,某些ARM系列器件,Echelon和Motorola聯(lián)合研制的Neuron芯片等。專用SOC一般專用于某個或某類系統(tǒng)中,不為一般用戶所知。一個有代表性的產(chǎn)品是Philips的SmartXA,它將XA單片機(jī)內(nèi)核和支持超過2048位復(fù)雜RSA算法的CCU單元制作在一塊硅片上,形成一個可加載Java或C語言的專用的SOC,可用于公眾互聯(lián)網(wǎng)(如Internet安全)方面。

1.1.2  嵌入式處理器的選擇

針對各種嵌入式設(shè)備的需求,各個半導(dǎo)體芯片廠商都投入了很大的精力研發(fā)和生產(chǎn)適用于這些設(shè)備的CPU及協(xié)處理器芯片。用于嵌入式設(shè)備的處理器必須高度緊湊、低功耗和低成本。針對每一類應(yīng)用來說,開發(fā)者對處理器的選擇都是多種多樣的,掌上電腦就是一例,如表1.1所示。與全球PC市場不同的是,沒有一種微處理器和微處理器公司可以主導(dǎo)嵌入式系統(tǒng),僅以32位的CPU而言,就有100種以上的嵌入式微處理器。由于嵌入式系統(tǒng)設(shè)計(jì)的差異性極大,因此選擇是多樣化的。設(shè)計(jì)者在選擇處理器時要考慮的主要因素有如下幾個    方面。

表1.1  部分掌上電腦處理器一覽

廠家/型號

處理器

速  度

卡西歐Cassiopeia E-100系列

MIPS-based NEC VR4121

131MHz

康柏Aero 2100系列

MIPS-based NEC VR4111

70MHz

菲利浦Nino 500系列

MIPS-based Toshiba PR31700

75MHz

惠普J(rèn)ornada 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供應(yīng)商

有些公司(如Motorola、Intel、AMD)很有名氣,而有一些小的公司(如QED)雖然名氣很小,但也能生產(chǎn)很優(yōu)秀的微處理器。另外,有一些公司,如ARM、MIPS等,只設(shè)計(jì)但并不生產(chǎn)CPU,他們把生產(chǎn)權(quán)授予世界各地的半導(dǎo)體制造商。ARM是另外一種近年來在嵌入式系統(tǒng)中有影響力的微處理器制造商,ARM的設(shè)計(jì)非常適合于小的電源供電系統(tǒng)。Apple在Newton手持計(jì)算機(jī)中使用ARM,另外有幾款數(shù)字無線電話也在使用ARM。

(2)   處理器的處理速度

一個處理器的性能取決于多個方面的因素:時鐘頻率,內(nèi)部寄存器的大小,指令是否對等處理所有的寄存器等。對于許多需用處理器的嵌入式系統(tǒng)設(shè)計(jì)來說,目標(biāo)不是在于挑選速度最快的處理器,而是在于選取能夠完成作業(yè)的處理器和I/O子系統(tǒng)。如果你的設(shè)計(jì)是面向高性能的應(yīng)用,那么建議你考慮某些新的處理器,其價格極為低廉,如IBM和Motorola的Power PC。以前Intel的i960是銷售極好的RISC高性能芯片,但是最近幾年卻遇到強(qiáng)勁的對手,讓位于MIPS、SH以及后起之秀ARM。

(3)   技術(shù)指標(biāo)

當(dāng)前,許多嵌入式處理器都集成了外圍設(shè)備的功能,從而減少了芯片的數(shù)量,進(jìn)而降低了整個系統(tǒng)的開發(fā)費(fèi)用。開發(fā)人員首先考慮的是,系統(tǒng)所要求的一些硬件能否無需過多的膠合邏輯(Glue Logic)就可以連接到處理器上。其次是考慮該處理器的一些支持芯片,如DMA控制器、內(nèi)存管理器、中斷控制器、串行設(shè)備、時鐘等的配套。

(4)   處理器的低功耗

嵌入式微處理器最大并且增長最快的市場是手持設(shè)備、電子記事本、PDA、手機(jī)、GPS導(dǎo)航器、智能家電等消費(fèi)類電子產(chǎn)品,這些產(chǎn)品中選購的微處理器典型的特點(diǎn)是要求高性能、低功耗。許多CPU生產(chǎn)廠家已經(jīng)進(jìn)入了這個領(lǐng)域。

(5)   處理器的軟件支持

若僅有一個處理器,沒有較好的軟件開發(fā)工具的支持,也是不行的,因此選擇合適的軟件開發(fā)工具對系統(tǒng)的實(shí)現(xiàn)會起到很好的作用。

成數(shù)據(jù)的訪問和刷新,即以同一個周期、相同的速度同步地工作,因而可以與系統(tǒng)總線以同頻率工作,可大大提高數(shù)據(jù)傳

]]>
在 Power 上使用 Linux 開放源代碼工具http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1678&Page=1wangxinxin2010-11-23 13:14:44本文主要介紹用于 POWER 微處理器體系結(jié)構(gòu)上的 Linux 的開放源代碼工具,不過其中討論的問題對開放源代碼軟件在 Linux 中的使用都是共同的。本文中提及的所有項(xiàng)目都對(但不限于)POWER 上的 Linux 可用。

什么是開放源代碼?

開放源代碼軟件是現(xiàn)代計(jì)算環(huán)境的寶貴資源。本質(zhì)上,開放源代碼軟件使得源代碼對使用軟件的任何人可用,即不對最終用戶隱藏任何內(nèi)容。開放源代碼軟件不一定是免費(fèi)的,雖然大多數(shù)都是免費(fèi)的。許可證協(xié)議決定了軟件的使用方式;最流行的許可證是 GNU 公共許可證(GNU Public License,GPL)。

開放源代碼軟件是由許多不同的發(fā)起者所開發(fā)的,包括選擇與其他人共享其工作成果的技術(shù)愛好者所開發(fā)的項(xiàng)目。商業(yè)性的公司,比如 IBM,也在為開放源代碼出力,以便在社區(qū)中提供優(yōu)秀的技術(shù),同時確保他們的專有硬件和軟件得到開放工具的支持。能夠編程、編寫文檔或執(zhí)行其他一些軟件開發(fā)相關(guān)任務(wù)的任何人,都能夠幫助創(chuàng)建開放源代碼軟件 —— 并且他們正是這樣做的!


圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看


為什么要使用開放源代碼工具?

許多人選擇開放源代碼工具是因?yàn)樗鼈儽阋耍ㄩ_放源代碼軟件經(jīng)常是免費(fèi)的,這當(dāng)然非常便宜)。開放源代碼軟件還傾向于非常可靠。由于有技術(shù)興趣的任何人都能夠查看源代碼,因而可能會有數(shù)千個質(zhì)量控制機(jī)構(gòu)在評估代碼。程序員能夠無隔閡地直接接觸用戶,因此問題和 bug 通常是大家都知道的,從而迅速得到糾正。此外,由于沒有對用戶隱藏任何東西,這樣有利于更好的技術(shù)脫穎而出。

對于擔(dān)心安全問題的用戶,開放源代碼軟件能夠給他們帶來心靈的平靜。如果懷疑應(yīng)用程序隱藏有“后門(back door)”,您可以獲得源代碼,自己檢查它,或讓您信任的人檢查它。然后您可以自己編譯該代碼,確保它和您預(yù)期的完全一樣。當(dāng)發(fā)現(xiàn)與安全相關(guān)的缺陷時,社區(qū)會立即采取行動,并且通常會在幾小時內(nèi)提供建議使用的補(bǔ)丁。正式的項(xiàng)目解決辦法可能要花稍長一點(diǎn)的時間,但是通常不會超出幾小時或幾天。開放源代碼軟件使您能夠在必要時對您的資源采取動作。

開放源代碼軟件還有助于確保技術(shù)不會被忽略。由于開發(fā)過程對感興趣的任何人都是開放的,您通常會找到人們?yōu)椴怀R姷挠布_發(fā)的驅(qū)動程序。此外,您還能找到由那些利用不常見協(xié)議的小社區(qū)為此類協(xié)議提供的支持。Linux 之所以在廣泛的 IBM 硬件上可用,正是由于采用了這種開放方法。這有助于保持您的硬件的生命力,同時幫助保護(hù)您避免失去對某種關(guān)鍵技術(shù)的軟件支持。如果某個項(xiàng)目不再提供官方支持了,您總是能夠選擇自己提供該支持!


圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看


獲得開放源代碼工具

獲得開放源代碼軟件是很容易的;Linux 內(nèi)核本身就是開關(guān)放源代碼的。當(dāng)您安裝 Linux 時,就開始使用開放源代碼了。除了內(nèi)核外,Linux 發(fā)行套件中還包含其他許多開放源代碼包,其中包括開發(fā)工具、庫和應(yīng)用程序。對于所有這些包,它們的源代碼都是可用的,您可以編譯任何包以優(yōu)化或?yàn)樘囟ㄓ猛径远x它。

除了發(fā)行套件中包含的包外,Internet 上還有其他開放源代碼軟件可供使用。有些是專用的項(xiàng)目或正處于首次開發(fā)中的新技術(shù),而其他則是與 Linux 發(fā)行套件中包含的包相競爭的方法。這是一個思想的自由市場。成功的開放源代碼軟件通常最終會作為輔助包或公共包被接納到發(fā)行套件中。有些項(xiàng)目甚至被接納為 Linux 內(nèi)核的一部分,此時這個單獨(dú)的項(xiàng)目將解散,而它的開發(fā)將作為標(biāo)準(zhǔn)內(nèi)核維護(hù)的一部分繼續(xù)進(jìn)行。

SourceForge

SourceForge.net(請參閱 參考資料)是一個很受歡迎的針對開放源代碼項(xiàng)目的知識庫。它通過易于使用的 Web 界面來組織項(xiàng)目,該界面具有搜索功能以幫助您查找項(xiàng)目。每個 SourceForge 項(xiàng)目都有版本歷史記錄、bug 列表、討論組、文檔,當(dāng)然還包括源代碼。如果擁有自己的開放源代碼項(xiàng)目,您也可以利用 SourceForge。

RPM 與源代碼

無論何時只要可能,預(yù)編譯的二進(jìn)制 RPM 都是在 Linux POWER 環(huán)境中使用開放源代碼軟件的最簡單方式。軟件的所有部分都以二進(jìn)制的形式準(zhǔn)備好了,只需直接安裝即可。安裝通常只需幾秒鐘就能完成,軟件馬上就可供使用了。

由于 RPM 的工作方式,系統(tǒng)將自動接受依賴關(guān)系和兼容性檢查,在軟件開始安裝之前,您會接到關(guān)于缺少某個組件的通知。此外,升級、管理和刪除 RPM 包也很簡單。無論何時只要可能,采用 RPM 都是可取的。

針對 RPM 的一個優(yōu)秀知識庫是 Rpmfind.net(請參閱 參考資料)。它具有一個來自許多發(fā)行套件的可搜索索引,以及大多數(shù)主要發(fā)行套件和升級的鏡像。為 PPC 列出的任何包都應(yīng)該與 POWER 系統(tǒng)兼容。您既可以搜索包的名稱,也可以搜索某個包中包含的單獨(dú)文件。得到的搜索結(jié)果將跨越廣泛的 Linux 發(fā)行套件,包括非常罕見的發(fā)行套件。所列出的每個包通常還指向?qū)?yīng)項(xiàng)目的主頁,因此如果在查找某個項(xiàng)目資源時遇到問題, rpmfind 可能會提供幫助。對于 POWER 體系結(jié)構(gòu),作為 PPC 包列出的所有 RPM 或許都能工作。在安裝新的包時務(wù)必細(xì)心一點(diǎn)。RPM 將會幫助保護(hù)您避免意外地完全摧毀系統(tǒng),不過強(qiáng)烈建議您使用常規(guī)的預(yù)防措施,比如制作備份以及在非生產(chǎn)系統(tǒng)上執(zhí)行測試。


圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看


使用源代碼

由于 POWER 體系結(jié)構(gòu)上的 Linux 還比較新,并非所有開放源代碼項(xiàng)目擁有者都曾想到過它。因此可能還沒有對那些包可用的 RPM 包。在這種情況下,您必須自己編譯源代碼。這對于諸如 Samba 這樣成熟的項(xiàng)目來說通常不是一件難事,但是對于不太常見的項(xiàng)目來說,可能需要做更多的工作。應(yīng)該對在生產(chǎn)系統(tǒng)上編譯源代碼保持謹(jǐn)慎,因?yàn)檫@樣可能導(dǎo)致問題,或者失去對正在該系統(tǒng)上運(yùn)行的商業(yè)軟件的支持。

Linux 本質(zhì)上在不同的體系結(jié)構(gòu)上都是相同的;因此,許多項(xiàng)目的源代碼無需多少經(jīng)驗(yàn)就能成功地編譯。源代碼通常作為壓縮的 tar 文件來提供。Gzip 是最常用的壓縮方式,不過 bzip2 正在變得流行起來,因?yàn)樗鼊?chuàng)建的壓縮文件更小一些。

首先,您必須展開壓縮包。讓我們使用 Gimp 作為一個例子。Gimp 是一個照片編輯包,它處理各種各樣的圖像格式,并且包括昂貴的商業(yè)產(chǎn)品中具有的功能。

圖 1. Gimp 實(shí)際應(yīng)用
圖片點(diǎn)擊可在新窗口打開查看

要下載 Gimp 源代碼,請參閱本文后面 參考資料中指向 Gimp Web 站點(diǎn)的鏈接。要展開源代碼,請使用 tar -xvjf gimp-1.2.4.tar.bz2 命令。

文件將解壓縮到當(dāng)前目錄。標(biāo)準(zhǔn)的方法是將源代碼包含在一個與產(chǎn)品名稱相同的目錄中。在此例中,文件包含在一個名為 gimp-1.2.4 的目錄中。

切換到該目錄就會看到源代碼、一些文檔、配置腳本,以及 README 文件。大多數(shù)源代碼包都有一個名為 INSTALL 和一個名為 README 的文件。在編譯軟件之前應(yīng)該閱讀這些文件。通過閱讀這些文件,您可以在產(chǎn)生問題之前識別它們,并且獲得正確的編譯和安裝步驟,從而省去一些麻煩。我在編譯源代碼時遇到的大多數(shù)問題,都只是因?yàn)槲覜]有遵循那些文件中的指示。

最常見的下一個步驟是運(yùn)行 configure 腳本。 Configure 是 autoconf 包的一部分,這個包包含在 Linux 發(fā)行套件的開發(fā)工具中。下面引用 Autoconf 的包描述:

“GNU 的 Autoconf 是一個用于配置源代碼和 Makefile 的工具。使用 Autoconf,程序員能夠創(chuàng)建可移植和可配置的包,因?yàn)樯砂娜四軌蛑付ǜ鞣N配置選項(xiàng)。”

這個配置腳本在系統(tǒng)上運(yùn)行一系列測試,以確定針對您的發(fā)行套件和體系結(jié)構(gòu)編譯包的最佳方式。然后它為您的系統(tǒng)創(chuàng)建一個自定義的 Makefile。如果在系統(tǒng)上執(zhí)行編譯時遇到問題, configure 將會告訴您。 Configure 通常允許您定制要包括到編譯包中的特性,或者允許您提供關(guān)于庫或其他必需文件的位置參數(shù),以便該包能夠成功編譯。要不帶參數(shù)執(zhí)行 configure 腳本,請使用如下命令:

./configure

它將在系統(tǒng)用上執(zhí)行多個測試并成功地結(jié)束。要生成程序,請使用如下命令:

make

如果編譯出錯,您需要確定問題并修復(fù)它們。這些問題也許比較棘手,可能需要關(guān)于您的環(huán)境和總體編程的大量知識。如果一切順利,下一步通常是使用如下命令來安裝軟件:

make install

這個命令將把文件復(fù)制到系統(tǒng)中的適當(dāng)位置,更新文件權(quán)限,復(fù)制配置文件,并把文檔添加到手冊頁。

這種方案存在許多可能的變化形式。這其中包括對 configure 腳本使用開關(guān)來調(diào)整將要編譯到程序中的特性,使用 Makefile 中的不同命令來調(diào)整編譯方式,等等。

如果程序在安裝后無法工作,大多數(shù) Makefile 都包含一個 uninstall 參數(shù)來刪除該程序。

make uninstall

務(wù)必記住,使用原始源代碼不會向 RPM 數(shù)據(jù)庫輸入任何內(nèi)容。以這種方式安裝的軟件是非托管的(unmanaged),因此應(yīng)該小心進(jìn)行。


圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看


創(chuàng)建自定義 RPM

如果打算使用大量純源代碼,您應(yīng)該了解更多關(guān)于創(chuàng)建自己的 RPM 的信息。創(chuàng)建 RPM 并不是特別困難,雖然這個主題超出了本文的討論范圍。從您自己的代碼創(chuàng)建 RPM 要比從陌生人編寫的代碼創(chuàng)建 RPM 容易得多。要創(chuàng)建良好的 RPM 包,您需要足夠了解某個軟件部分中的所有組件。本質(zhì)上,這個過程就是創(chuàng)建一個名為 SPEC 的配置文件,它識別 RPM 數(shù)據(jù)庫所必需的所有信息。關(guān)于依賴關(guān)系的信息、生成該文件的步驟,以及安裝后的操作連同該包中所有文件的列表,都包括在這個 SPEC 文件中。RPM 使用這個 SPEC 文件來編譯代碼和創(chuàng)建二進(jìn)制包。請查看您的源包,以確定是否已經(jīng)創(chuàng)建了一個示例 SPEC 文件。包括 SPEC 文件已經(jīng)成了一個普遍習(xí)慣,這樣還可能允許您只需做很少工作或不需要做工作就能創(chuàng)建一個自定義的 RPM。

源 RPM

在創(chuàng)建 RPM 時,存在一個叫做源 RPM(Source RPM,SRPM)的工件(artifact)。這是一個與源代碼組合后的 SPEC 文件,設(shè)計(jì)用于構(gòu)建一個或多個體系結(jié)構(gòu)。這對兩個世界來說都是最好的!使用源 RPM,您能夠在系統(tǒng)上自定義編譯軟件,但是完成后的產(chǎn)品將是可安裝的 RPM 而不只是原始的二進(jìn)制。作為預(yù)編譯 RPM 可用的大多數(shù)包也作為 SRPM 可用。這可能是在 Linux 中跨平臺移動軟件的一種簡單方式。當(dāng)您在一個不同的平臺上成功地重新編譯時,可考慮與社區(qū)共享完成后的 RPM。

 

]]>
linux與windows比有什么優(yōu)點(diǎn)與缺點(diǎn)http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1677&Page=1wangxinxin2010-11-23 13:12:26
安全性能是Windows常常遭受Linux支持者批評嘲笑之處。除了層出不窮的計(jì)算機(jī)病毒外,號稱Windows95以來最重要的版本的WindowsXP問世不過數(shù)月就屢屢發(fā)現(xiàn)安全漏洞,而且導(dǎo)致聯(lián)邦調(diào)查局向用戶發(fā)布警告,這無疑加深了Windows不如Linux安全的看法。不過客觀的講,在以下兩方面Windows有些冤情可訴:

Windows的每一個漏洞的公開都會引起公眾和媒體的廣泛注意,這種樹大招風(fēng)的現(xiàn)象大大增加了Windows技術(shù)漏洞的可見性(Visibility)。而且Linux作為公開源代碼的系統(tǒng),它的漏洞的發(fā)現(xiàn)和修補(bǔ)往往被有意無意地視為是系統(tǒng)開發(fā)的一部分,好比是Microsoft在開發(fā)Windows期間由內(nèi)部程序員發(fā)現(xiàn)并修補(bǔ)漏洞。由于在很多人眼里L(fēng)inux永遠(yuǎn)處于開發(fā)狀態(tài)中,而Windows有明確的推出日期(不然沒法賺錢),因此在這一點(diǎn)上Windows處于非常不利的位置。

人們在比較Windows和Linux的技術(shù)漏洞時常常實(shí)際上是在對Windows和Linux內(nèi)核(Kernel)作比較,這是不公平的。Windows除內(nèi)核外還包括用戶界面(UI)以及大量的應(yīng)用軟件,大多數(shù)Windows技術(shù)漏洞其實(shí)并不是Windows內(nèi)核的漏洞。以安全漏洞而言,大多數(shù)是屬于IIS和IE的,對應(yīng)于Linux系統(tǒng)中的Apache和Netscape或Konqueror等。較為合理的做法應(yīng)當(dāng)是將Windows和LinuxDistribution或者LinuxDistribution中與Windows功能平行的部分進(jìn)行比較。

盡管有以上這些辯護(hù),盡管Microsoft抱怨說人們對攻擊Windows遠(yuǎn)比對攻擊Linux感興趣(因?yàn)楦菀壮擅?才使得Windows頻頻亮起安全紅燈,但我認(rèn)為現(xiàn)階段Linux在安全性能上確實(shí)要優(yōu)于Windows。起碼以病毒數(shù)量和危害性而言,Windows用戶所擔(dān)當(dāng)?shù)娘L(fēng)險就要大得多。只是Windows的安全性也不象有些文章渲染的那樣糟糕。

說到了安全性,順便提一下對于除美國以外的其他國家來說,由于Windows的技術(shù)完全被Microsoft所壟斷,因此使用Linux還具有國家安全上的優(yōu)勢。這也是近期中國,法國,韓國等國政府在采購操作系統(tǒng)時均作出了有利于Linux的決定的原因之一。

穩(wěn)定性

穩(wěn)定性也是Windows常常遭批評的地方,這里必須首先要把Windows的9x系列(包括95/98/Me)和NT系列(包括NT/2000/XP)區(qū)分開來。兩者在穩(wěn)定性上有數(shù)量級之別。Windows穩(wěn)定性差的惡名主要是由9x系列而來,自WindowsXP開始Microsoft已經(jīng)終止了這一系列的開發(fā)。其次需要分清的是應(yīng)用軟件的穩(wěn)定性與操作系統(tǒng)的穩(wěn)定性。如果一個軟件的崩潰不影響操作系統(tǒng)和其它軟件的運(yùn)行,那么這筆帳通常就不應(yīng)該記在操作系統(tǒng)的穩(wěn)定性上。如果一個軟件的崩潰造成整個操作系統(tǒng)的崩潰(即通常所說的“死機(jī)”),那操作系統(tǒng)的穩(wěn)定性就要受到質(zhì)疑。

至于最新的WindowsXP與Linux究竟誰更穩(wěn)定,說實(shí)在目前還缺乏足夠的數(shù)據(jù)和可比性,因?yàn)閮烧咚\(yùn)行的軟件很不相同。網(wǎng)上雖有一些測試結(jié)果,不過這些測試的客觀性往往是值得懷疑的,這個有時間我將另文敘述。一般說來,由于Windows上運(yùn)行的軟件通常比較復(fù)雜(比如游戲,大型商業(yè)軟件等),從而有較大的幾率暴露操作系統(tǒng)的缺陷。從這點(diǎn)上講,對WindowsXP和Linux的表觀穩(wěn)定性進(jìn)行比較并不足以說明兩者在運(yùn)行同等復(fù)雜的軟件時誰更穩(wěn)定。另一方面和系統(tǒng)安全性的情行相似,人們說到Linux的穩(wěn)定性時常常只是指內(nèi)核的穩(wěn)定性,而Windows的穩(wěn)定性卻涵蓋包括用戶界面在內(nèi)的許多別的部分。出現(xiàn)這樣的狀況也情有可原,因?yàn)閃indows和它的用戶界面是無法分開的,用戶界面死了,對用戶來說就相當(dāng)于操作系統(tǒng)死了,而Linux則不同,用戶界面死了常常還可以用熱鍵退出,并重新啟動用戶界面。這些差別的存在使得穩(wěn)定性對Windows來說是一個更為困難的目標(biāo)。軟件支持

對軟件,尤其是大型商業(yè)軟件及多媒體軟件(包括游戲)的支持一直是Windows的強(qiáng)項(xiàng),無論是MacOS還是Linux在近期內(nèi)都很難憾動Windows在這一領(lǐng)域的霸主地位。Windows龐大的應(yīng)用軟件支持是大多數(shù)用戶即使心懷不滿,也不得不繼續(xù)使用Windows的一個重要原因。Linux所擁有的軟件雖然為數(shù)也不少,而且有些軟件(比如GIMP,StarOffice等)的開發(fā)是以Windows下相應(yīng)的商業(yè)軟件為競爭對象的,但是在功能上這些軟件要真正達(dá)到可以替代Windows軟件的程度還有相當(dāng)一段路要走。免費(fèi)和公開源代碼軟件是Linux的靈魂,也是很多人喜愛Linux的原因,但是缺乏足夠的高質(zhì)量商業(yè)軟件的支持已經(jīng)成為Linux與Windows競爭桌面操作系統(tǒng)市場時的重大障礙。在這方面Linux面臨一個兩難局面:一個操作系統(tǒng)要吸引商業(yè)軟件開發(fā)者就得要有足夠多的用戶(尤其是公司用戶)。原因很簡單,有用戶才有利潤。但另一方面,一個操作系統(tǒng)要想吸引足夠多的用戶(尤其是公司用戶),就得要有足夠多高質(zhì)量的軟件(包括商業(yè)軟件)。這是一個典型的先有雞還是先有蛋的問題。從目前的形勢發(fā)展來看,打破局面的最可能途徑是軟件公司愿意做前瞻性的開發(fā),從而產(chǎn)生一個良性的推動。

這里需要做一點(diǎn)補(bǔ)充說明:對于相對小型的軟件的支持Linux并不遜色,一個完整安裝的LinuxDistribution不僅比Windows帶有品種遠(yuǎn)為齊全的軟件,而且各常用類型的軟件,諸如email,F(xiàn)TP,IRC,瀏覽器等均有四五種以上可供選擇(有時反而讓初用者手足無措)。

硬件支持

五年前Linux的安裝對于新手來說還是一件望而生畏的事,這其中很大一個原因就是Linux對硬件支持的欠缺,三年前我在筆記本電腦上安裝Redhat6.0還被迫到網(wǎng)上自行搜尋config文件。但近幾年來Linux在這方面取得了長足的進(jìn)展,今天,各主要Distribution對硬件的支持度正在迅速接近甚至超過Windows的水平。盡管硬件生產(chǎn)商對Windows驅(qū)動文件(driver)的提供仍比對Linux的要普遍,但高手如云的Linux群體已經(jīng)做到了能幾乎同步地提供所有最新硬件驅(qū)動文件的程度。另一方面,WindowsXP在硬件支持的普遍性上卻出現(xiàn)了較大的倒退(Microsoft或許把這叫做更新)。此消彼長,Linux在硬件支持上的欠缺已經(jīng)成為歷史。

雖然沒有明說,但上面談?wù)摰挠布际轻槍86機(jī)器的,脫離了這個框架,Linux在硬件的支持上的廣泛程度是包括Windows在內(nèi)的任何其它操作系統(tǒng)都無法比擬的。

說到硬件支持,還有一個需要考慮的方面就是系統(tǒng)配置。每一代的Windows都對系統(tǒng)配置提出了新的要求,WindowsXP苛刻的系統(tǒng)配置要求更是使得幾乎所有兩三年以上機(jī)齡的機(jī)器都必須經(jīng)過相當(dāng)程度的硬件改良才能安裝。而Linux雖然也同樣在逐步提高對硬件配置的要求,但由于其優(yōu)越的模塊結(jié)構(gòu),使得用戶有極大的自由度根據(jù)自己機(jī)器的配置調(diào)整自己所需安裝的模塊,從而突破對硬件配置的要求。

規(guī)范性

這里所說的操作系統(tǒng)的規(guī)范性有兩層含義,一層含義是指操作系統(tǒng)對軟件界的各項(xiàng)技術(shù)規(guī)范的遵循程度。在這方面Linux基本上遵循了所有適用的規(guī)范,這和Linux的開發(fā)模式不無關(guān)系。除內(nèi)核外Linux沒有一個中心仲裁者,因此開發(fā)人員大都以軟件界已有的技術(shù)規(guī)范為準(zhǔn)則進(jìn)行系統(tǒng)開發(fā)。Windows在這方面的名聲則毀譽(yù)參半,一方面Microsoft本身是軟件界許多規(guī)范的制定和倡導(dǎo)者,但另一方面,Microsoft又常常按自己的喜好“修改”規(guī)范。由于Windows在桌面操作系統(tǒng)領(lǐng)域擁有壓倒多數(shù)的用戶群體,軟件界在相當(dāng)程度上被迫適應(yīng)Windows的要求,因而使得Windows的許多非規(guī)范的東西成為事實(shí)上的規(guī)范。

規(guī)范性的另一層含義是指操作系統(tǒng)本身的規(guī)范性,一個簡單的衡量標(biāo)準(zhǔn)就是該操作系統(tǒng)的兩個用戶之間有多少共同語言。由于Windows是由單一公司開發(fā)的,因此在這方面不是由松散聯(lián)系的開發(fā)者為主力的Linux可以比擬的。以用戶界面而論,Windows自Windows95以來保持了相當(dāng)?shù)姆(wěn)定性,用過其中任何一個版本的用戶基本上可以不用額外學(xué)習(xí)就直接使用另一個版本的Windows界面。而Linux的用戶界面不下十種之多,最流行的也有KDE和Gnome兩種,明顯缺乏規(guī)范性。Linux在自身規(guī)范性上的欠缺還表現(xiàn)在各主要的Distribution使用不同的目錄結(jié)構(gòu),用不同的格式傳播軟件,用不同的方式安裝軟件,等等。凡此種種不僅給新手帶來極大的困惑,就是對有經(jīng)驗(yàn)的用戶甚至系統(tǒng)開發(fā)人員都是極大的不便。

所幸的是,Linux的不規(guī)范性已經(jīng)引起了越來越多人的重視,一個如同W3C(W3C是制定互聯(lián)網(wǎng)規(guī)范的組織)那樣的組織TheFreeStandardsGroup已經(jīng)成立,它的使命就是制定Linux和其它開放源代碼系統(tǒng)的規(guī)范。隨著這些規(guī)范的逐步推廣,Linux將會縮小在自身規(guī)范性方面與Windows的差距。

這里也需要補(bǔ)充一點(diǎn):Linux在用戶界面方面的不規(guī)范性有時候也不失為一個優(yōu)點(diǎn)。常常聽人抱怨說自己花大價錢更新機(jī)器的努力很大一部分被操作系統(tǒng)本身所消耗掉了,這其中一個消耗資源的大戶就是用戶界面。Linux用戶在這種情況下就可以使用消耗系統(tǒng)資源較少的用戶界面。

總體上講,在對外部規(guī)范的遵循性上,Linux要優(yōu)于Windows,而在自身的規(guī)范性上,Windows要顯著優(yōu)于Linux,而且在近期內(nèi)這種優(yōu)勢不會喪失。

源代碼

Windows的源代碼是保密的,而Linux的源代碼是開放的。從字面上講這當(dāng)然是意味著原則上任何人都可以改進(jìn)Linux。但是需要指出的是,原則上可以做的事情并非實(shí)際上就一定能夠或者應(yīng)當(dāng)做。Linux源代碼的高度的開放性主要是針對系統(tǒng)開發(fā)人員的,源代碼的開放性使得Linux系統(tǒng)中的缺陷能夠很快地被來自世界各地的高手所發(fā)現(xiàn)和彌補(bǔ),這是十余年來Linux發(fā)展的關(guān)鍵。但對于普通用戶來說,修改自己賴以工作的Linux機(jī)器的源代碼卻是非常不明智的行為。Linux內(nèi)核多年來經(jīng)過無數(shù)高手的錘煉,一個普通用戶能夠改進(jìn)它的幾率是微乎其微的(破壞它的可能性倒是很大的)。因此在肯定源代碼開放性對操作系統(tǒng)本身乃至整個軟件業(yè)發(fā)展的深遠(yuǎn)意義的同時也不應(yīng)該夸大它對普通用戶的直接幫助,源代碼的開放性并不增加一個普通用戶對系統(tǒng)的掌控程度。

Linux源代碼的開發(fā)性使得各大學(xué)的操作系統(tǒng)課程和教材幾乎都是以Linux或其他類似的系統(tǒng)為藍(lán)本,因此使得受過正規(guī)計(jì)算機(jī)專業(yè)教育的幾乎所有學(xué)生以及幾乎所有對操作系統(tǒng)感興趣的人都對Linux有相當(dāng)程度的了解和喜愛。這對于Linux未來的發(fā)展有著十分正面的影響。

應(yīng)用程序界面(API)

一個操作系統(tǒng)的API(ApplicationProgramInterface)是操作系統(tǒng)提供的與應(yīng)用軟件的接口,對于軟件開發(fā)人員來說十分重要。一般認(rèn)為Linux的API要比Windows優(yōu)美。不過由于Windows下有諸如VisualStudio這樣的直接支持WindowsAPI的大型工具軟件,從而大大降低了Windows編程對于擁有并熟悉這些工具的人員的困難程度。

系統(tǒng)可調(diào)節(jié)性

Linux具有比Windows大得多的可調(diào)節(jié)性。許多早期的Windows骨灰級用戶在系統(tǒng)可調(diào)節(jié)性上有一種懷舊感,覺得在DOS和早期Windows時代他們曾經(jīng)是機(jī)器的主人,隨著Windows的演化,后來他們只擁有Windows,不再直接擁有機(jī)器了(現(xiàn)在他們連Windows也不擁有了)。而Linux卻始終如一地保持著系統(tǒng)的高度可調(diào)節(jié)性。

Linux的源代碼的開放性也可以被視為終極意義上的可調(diào)節(jié)性,但是,前面說了,對于普通用戶來說,這種可調(diào)節(jié)性實(shí)際上是幾乎不存在的。

另一方面,在各自可調(diào)節(jié)的范圍內(nèi),Windows要比Linux易于調(diào)節(jié)(這在很大程度上得益于Windows界面的規(guī)范性)。在早期,Linux的調(diào)節(jié)往往需要用戶直接修改參數(shù)文件,即使對于有一定經(jīng)驗(yàn)的用戶,這也是一件令人頭疼的事。近年來Linux在這方面做了很大的改進(jìn),開發(fā)了許多工具軟件,不過和Linux下的許多其它類別的軟件類似,Linux的工具軟件也呈現(xiàn)一種發(fā)散性,即有不止一種軟件可以做同一件事。這使得用戶在轉(zhuǎn)換機(jī)器和LinuxDistribution時往往因?yàn)椴煌h(huán)境下工具軟件的不同而需要學(xué)習(xí)新的工具或重新安裝舊的工具。

使用方便性

使用的方便性是桌面操作系統(tǒng)競爭中最重要的決勝因素之一。這里所說的使用的方便性是針對普通用戶的,這一點(diǎn)常常被Linux的支持者所忽視。現(xiàn)階段在桌面操作系統(tǒng)的用戶群體中,Linux用戶的平均計(jì)算機(jī)水平要大大高于Windows用戶,這種差異使得Linux群體常常低估了一個缺乏計(jì)算機(jī)系統(tǒng)知識的普通用戶適應(yīng)Linux的難度。“Windows是傻瓜也能用的”非但不應(yīng)該被用來嘲笑Windows,反而是Linux在競爭桌面操作系統(tǒng)市場中必須借鑒的經(jīng)驗(yàn)。計(jì)算機(jī)二十年來的發(fā)展早已超越了專業(yè)的界限而成為幾乎所有現(xiàn)代人都可能會用到的工具。使用方便性是任何工具所應(yīng)該追求的品質(zhì)之一,計(jì)算機(jī)及其操作系統(tǒng)當(dāng)然也不例外。試問這世上聰明人的比例能有多少?偏偏把聰明用在計(jì)算機(jī)上的聰明人比例又能有多少?今天Linux用戶群體的平均計(jì)算機(jī)水平高的一個不可忽視的原因是因?yàn)橹挥兴捷^高的人才能得心應(yīng)手地使用Linux,而這一事實(shí),很不幸的卻是Linux與Windows競爭時的一大弱點(diǎn)。

版權(quán)限制和費(fèi)用

這方面沒什么可說的,法庭上的勝負(fù)不論,無論對個人還是公司用戶來說Windows利用其壟斷地位迫使用戶接受日益苛刻的版權(quán)要求已是不爭的事實(shí),可以蓋棺定論。使用WindowsXP的用戶相信對此尤有切身體會。每張WindowsXP光盤只能安裝在一臺電腦上,不僅如此,重裝操作系統(tǒng)或更換一定數(shù)量的硬件都會導(dǎo)致Windows反盜版機(jī)制的干預(yù),使得用戶必須向Microsoft索要新的序列號(可能還免不了要解釋一下自己何以又要給Microsoft“添麻煩”)。花錢買了的軟件竟然還要間或地向Microsoft請示匯報(bào),用戶心中的不平衡是不言而喻的。至于價格,WindowsXPHome和Pro的價格分別為9和9。相比較之下Linux不僅可以免費(fèi)下載,而且可以安裝在任意數(shù)目的機(jī)器上。對用戶具有的親和力是不言而喻。

可惜的是,對于個人用戶來說Linux在價格上的優(yōu)勢在很大程度上被市場上大部分品牌機(jī)廠家不提供預(yù)裝Linux的機(jī)器(服務(wù)器除外)這一事實(shí)所抵銷了。由于品牌機(jī)廠家在市場上占有很大的份額,因此大部分用戶不論用不用Windows,都一樣付了Windows的錢。既然錢也付了,操作系統(tǒng)也有了,絕大多數(shù)人就不會再去費(fèi)心做調(diào)整。順便說一下,這也是目前Linux用戶群體的計(jì)算機(jī)水平普遍較高的另一個重要原因,因?yàn)閷τ?jì)算機(jī)或操作系統(tǒng)感興趣的人有較大的可能性在并不缺乏操作系統(tǒng)的情況下還去安裝一個新的操作系統(tǒng)。

不過對公司用戶來說,由于Linux不對用戶數(shù)量設(shè)置限制,與Windows的VolumnLicence相比其費(fèi)用方面的優(yōu)勢是十分明顯的。

說到費(fèi)用,需要提到另外一個方面就是許多在Windows下要付費(fèi)的軟件在Linux下有功能相近,相同或更好的免費(fèi)軟件。雖然前面說到Windows在對軟件的總體支持上優(yōu)于Linux,但是Windows占優(yōu)勢的那部分軟件對大多數(shù)普通個人用戶來說并不是不可缺少的(也許游戲除外)。不過Linux在這方面的優(yōu)勢也在很大程度上受到一個因素的削弱:那就是許多Linux下優(yōu)秀的免費(fèi)軟件也有Windows版本。

技術(shù)支持

這里所說的技術(shù)支持是一個比較含糊的概念,既包括由公司提供的技術(shù)服務(wù),也包括用戶可以自行找尋的信息。在公司提供的技術(shù)服務(wù)方面,盡管不時可以聽到有人抱怨和Microsoft技術(shù)服務(wù)人員打交道時的不愉快經(jīng)歷,但這顯然是和Windows的用戶數(shù)量有關(guān)的。總體上講Microsoft對用戶(尤其是公司用戶)提供的技術(shù)服務(wù)要優(yōu)于各Linux公司(當(dāng)然這種服務(wù)不是免費(fèi)的)。在用戶可以自行找尋的信息方面,Microsoft有一個規(guī)模龐大的KnowledgeBase,Linux則有LinuxDocumentationProject,而且Linux在互聯(lián)網(wǎng)上的BBS,F(xiàn)orum和Newsgroup等網(wǎng)站中常常可以看到頂尖的Linux開發(fā)者的身影,與Windows不同的是,Linux的開放性使得許多Linux高手對Linux的發(fā)展具有一種使命感,他們光顧這些網(wǎng)站就是為了了解用戶的反映,發(fā)現(xiàn)bug并為Linux的發(fā)展積累經(jīng)驗(yàn)。我這么說倒不是暗示Microsoft的人就不會以同樣目的光顧Windows網(wǎng)站,不過就我個人的體會來說這方面Linux群體對用戶起到的幫助作用要好于Windows群體的相應(yīng)幫助。

需要說明的是,對公司用戶來說,這后一種幫助在公司決策層面上起不到太大的作用。有一句半開玩笑的話很通俗地概括了許多公司(尤其是大公司)在選用軟件(包括操作系統(tǒng))時的態(tài)度,那就是“只選擇自己可以將之告上法庭的供應(yīng)商提供的軟件”。Linux群體以及許多Linux公司無法在足夠長的服務(wù)期限內(nèi)提供規(guī)范的,有法律保障的服務(wù)是Linux在競爭桌面操作系統(tǒng)的半壁江山-公司用戶-時的一大障礙。

結(jié)語

寫到這里應(yīng)該收筆了。通常這類文章都要預(yù)測一下Windows和Linux在桌面操作系統(tǒng)市場上的前景。前不久,RedhatLinux公司的總裁發(fā)表令人意外的評論說Linux無法在桌面操作系統(tǒng)市場上擊敗Windows。當(dāng)然,Linux的熱心支持者們并不認(rèn)同這種看法。兩方面的意見在網(wǎng)上爭論得非常激烈。講到預(yù)測,插上幾句離題的話。小時候聽說有外國專家預(yù)測在中國本土不會找到很多石油,也有外國專家預(yù)測唐山在多少年內(nèi)將難以重建。這些預(yù)測都破產(chǎn)了。那時我就想何以外國專家都如此愚蠢,以至于我們做成的每件事情都可以拉上一兩個外國專家做反襯?后來看的預(yù)測多了漸漸明白了道理:不是外國專家太愚蠢,而是有太多的“專家”了,什么可能性都讓專家“預(yù)測”到了。我不是專家,不想也不敢貿(mào)然在這里作什么預(yù)測。Linux在桌面操作系統(tǒng)市場的前景取決于許多因素:比如各主要商業(yè)軟件公司會在何時,以何種方式參與Linux軟件的開發(fā)?比如有多少計(jì)算機(jī)廠家會提供預(yù)裝Linux的機(jī)器?比如全球性的經(jīng)濟(jì)低迷會在多大程度上加速公司和個人為節(jié)省開支而使用Linux,比如Microsoft是否會在法庭上敗訴?如果敗訴受到的懲罰方案如何?等等。除此之外,還需要看到用戶群體的行為習(xí)慣具有極大的慣性。無論Linux如何改進(jìn),仍然有很多人說Linux不方便。為什么?除了Linux本身的部分原因外還因?yàn)閃indows巨大的用戶群體已經(jīng)形成,Windows的一切已經(jīng)成為了事實(shí)上的標(biāo)準(zhǔn),任何對Windows的偏離都必然要改變用戶群體的習(xí)慣,這是所有Windows的競爭者不得不背負(fù)的沉重包袱。

細(xì)致而盡可能準(zhǔn)確地分析所有這些因素不是一篇短短(盡管現(xiàn)在已經(jīng)不太短了)的文章所能勝任的。幸好計(jì)算機(jī)技術(shù)這二十年的發(fā)展始終沒有讓人們久等過,看到這場操作系統(tǒng)大戰(zhàn)的階段性結(jié)果相信也不會對我們的耐心形成太大的挑戰(zhàn)。

本文的一個假設(shè)的情況是Linux和Windows爭奪桌面操作系統(tǒng)用戶,離開了這個前提,離開了這個評論的角度,關(guān)于兩個操作系統(tǒng)的比較當(dāng)然就會有不同的結(jié)果。至于Linux是否應(yīng)該和Windows來爭奪污濁的桌面操作系統(tǒng)市場,這是一個不同的話題。有朋友提到Linux過分地向桌面發(fā)展會有損其穩(wěn)定性。Linuxkernel2.4在推出后很長一段時間無法達(dá)到令人滿意的穩(wěn)定性使得有人一度在kernel-mailing-list上發(fā)出“Linusdoesnotscale”這樣的感慨和懷疑。不過我認(rèn)為,kernel2.4的問題不是因?yàn)長inux向桌面發(fā)展造成的,kernel2.4的發(fā)展最主要的受益者是server而不是桌面用戶。

我個人的想法是Linux由于其模塊結(jié)構(gòu),是有希望在reliable,stable,scalable的內(nèi)核和一個能被普通用戶接受的GUI兩方面同時取得成功的(至少在技術(shù)上是可以的,在商業(yè)社會模式下是否事實(shí)上可以當(dāng)然誰也沒法保證,許多GPL軟件已經(jīng)開始偏離GPL了,這在多大程度上代表一種趨勢還有待觀察)。]]>
Linux開發(fā)GUI應(yīng)用程序概述http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1676&Page=1wangxinxin2010-11-23 13:10:40Linux歷史簡介
1991年,芬蘭大學(xué)生Linus Torvalds編寫了一個小的操作系統(tǒng)內(nèi)核,這就是Linux的前身,Linus Torvalds也由此成為了Linux之父。Linus Torvalds將Linux系統(tǒng)的源代碼在Internet上公布,使Linux的發(fā)展受到了眾多計(jì)算機(jī)高手的鼎力相助,Linux從而不斷地增加新的 特性,不斷地提高穩(wěn)定性。現(xiàn)在,Linux已經(jīng)成為一個非常流行的操作系統(tǒng)。
Linux是遵從GPL協(xié)議。也就是說,只要遵從GPL協(xié)議,就可以免費(fèi)得到它的軟件和源代碼,并對它進(jìn)行自由地修改。但對一般用戶來說,對Linux的源代碼進(jìn)行編譯和安裝是難度很高的工作。
所以,一些公司介入Linux的業(yè)務(wù),它們將Linux操作系統(tǒng)及一些重要的應(yīng)用程序打包,并提供較方便的安裝界面。這些公司所提供的產(chǎn)品一般稱為Linux的發(fā)布版本。
目前比較著名的Linux發(fā)布版本有以下幾種:
RedHat—最著名的Linux服務(wù)提供商。
SlackWare—?dú)v史比較悠久的發(fā)行版本。
SUSE—在歐洲知名度較大。
TurboLinux—在亞洲用戶較多。該公司漢化做得很出色。
Debain—完全由Linux社區(qū)的計(jì)算機(jī)高手維護(hù)的發(fā)布版本。
XteamLinux—北京沖浪平臺公司推出中國第一套漢化發(fā)布版本。
BluePoint—內(nèi)核漢化技術(shù)比較引人注目。
紅旗Linux—中科院軟件所和北大方正推出的發(fā)布版本。
Linux的優(yōu)點(diǎn)
Linux有眾多的優(yōu)點(diǎn),下面列出主要的幾個:
* Linux是一個多任務(wù)、多線程、多用戶的操作系統(tǒng)。
* Linux性能穩(wěn)定,功能強(qiáng)大,可以與商用操作系統(tǒng)相提并論。
* Linux可以適應(yīng)很多的平臺。它可以在Intel公司的x86計(jì)算機(jī)及其兼容機(jī)、Alpha計(jì)算機(jī),以及蘋果等計(jì)算機(jī)上運(yùn)行。 Linux還可以在許多嵌入式設(shè)備上運(yùn)行。
* Linux之上的應(yīng)用程序正在逐漸增多。大多數(shù)為UNIX開發(fā)的應(yīng)用程序都能在Linux上運(yùn)行。
Linux還可以在仿真軟件的幫助下運(yùn)行許多DOS應(yīng)用程序和Windows應(yīng)用程序。
* 公開源代碼是Linux最大的優(yōu)越性,只要遵從GPL協(xié)議,就可以自由地對Linux進(jìn)行修改和剪裁,以適應(yīng)個人需要。
Linux的桌面環(huán)境
Linux有一套簡便易學(xué)的圖形用戶接口(GUI),用戶使用鼠標(biāo)就可以完成大多數(shù)工作。在Linux中,GUI由窗口系統(tǒng),窗口管理器,工具包和風(fēng)格 等幾個部分組成。窗口系統(tǒng)用于組織顯示屏上的圖形輸出,窗口管理器用于對窗口的操作如最小化等,工具包是用于編程界面的庫,風(fēng)格是應(yīng)用程序的用戶界面。
現(xiàn)在,Linux下的桌面環(huán)境主要包括KDE和Gnome兩種。
KDE(K Desktop Environment)桌面環(huán)境目的是提供一個開放源代碼的圖形用戶接口和開發(fā)環(huán)境。
KDE一度成為許多Linux發(fā)布版本的首選桌面環(huán)境。但是,KDE是基于QT庫的。Qt最初并不遵從GPL協(xié)議。所以,將KDE建立在QT之上是一件危險的事,它將依賴于開發(fā)QT庫的公司。
所以,后來的Linux發(fā)行版本中加入了Gnome主面環(huán)境。Gnome是GNU Network Object Model Environment(GNU,網(wǎng)絡(luò)對象模型環(huán)境)的縮寫。Gnome的發(fā)展很快,已成為一個強(qiáng)勁的GUI應(yīng)用程序開發(fā)框架,可以在任何一種UNIX系 統(tǒng)下運(yùn)行。
Gnome使用的圖形庫是Gtk+構(gòu)件庫,它是基于LGPL協(xié)議的。Gnome的界面與KDE的界面類似,熟悉KDE的用戶無需學(xué)習(xí)就能夠使用Gnome。所以,Gnome現(xiàn)在已經(jīng)成為大多數(shù)Linux發(fā)布版本的首選桌面環(huán)境。
Gnome是一個集成桌面環(huán)境,也是一個應(yīng)用程序開發(fā)框架,由很多的函數(shù)庫組成。即使用戶不運(yùn)行Gnome桌面環(huán)境,用Gnome編寫的應(yīng)用程序也可運(yùn) 行,但是這些應(yīng)用程序是可以很好地和Gnome桌面環(huán)境集成的。Gnome的開發(fā)結(jié)構(gòu)使我們可以開發(fā)一致和易用的應(yīng)用程序。
開發(fā)所使用的庫
Gtk+(GIMP ToolKit,GIMP工具包) Gtk+最初用于開發(fā)GIMP,是一個用于創(chuàng)造圖形用戶接口的圖形庫。Gtk+是基于LGPL授權(quán)的,因此可以用Gtk+開發(fā)開放源碼軟件的自由軟件或商業(yè)的非自由的軟件。
Gtk+是在Gdk(GIMP Drawing Kit,GIMP繪圖包)的基礎(chǔ)上創(chuàng)建的。Gdk是對Xlib函數(shù)的包裝。我們一般用GTK代表軟件包和共享庫,用Gtk+代表GTK的圖形構(gòu)件集。
Gtk+圖形庫使用一些稱為“構(gòu)件”的對象來創(chuàng)建GUI應(yīng)用程序。它提供了窗口、按鈕、框架、列表框、組合框、樹、狀態(tài)條等很多構(gòu)件,可以構(gòu)造豐富的用戶界面。
在Gtk+圖形庫構(gòu)件基礎(chǔ)上,又開發(fā)了一些新構(gòu)件,這些構(gòu)件都是Gtk+構(gòu)件庫的補(bǔ)充,它們提供了許多Gtk+構(gòu)件沒有的功能。一般把這些構(gòu)件稱為Gnome構(gòu)件。使用Gnome構(gòu)件可以使開發(fā)界面一致的應(yīng)用程序變得更加容易。
Gnome的應(yīng)用程序開發(fā)結(jié)構(gòu)核心是一套庫,是由C語言編寫的,對很多語言都提供了GnomeAPI接口,包括Ada、Scheme、Python、Perl、Tom、Eiffel、Dylan等。
Gnome的開發(fā)架構(gòu)包含以下一些內(nèi)容:
1. 非Gnome庫
Gnome繼承了自由軟件一些函數(shù)庫。其中一些庫Gnome應(yīng)用程序開發(fā)架構(gòu)的一部分,但是不屬于Gnome庫。可以在Gnome環(huán)境中使用這些庫函數(shù)。主要有以下幾種:
Glib庫 —Glib是Gnome的基礎(chǔ),它是一個C工具庫,提供了創(chuàng)建和操作常用數(shù)據(jù)結(jié)構(gòu)的實(shí)用函數(shù)。
Gtk+庫—Gtk+(GIMPToolkit的縮寫),是在Gnome應(yīng)用程序中使用的GUI工具包。Gnome在基本Gtk+構(gòu)件集合的基礎(chǔ)上添加了許多其他構(gòu)件。
ORBit庫—ORBit是一個用C開發(fā)的CORBA2.2ORB。和其他ORB相比,它短小精悍,但速度更快,同時還支持C語言映射。ORBit是以一整套庫函數(shù)的方式實(shí)現(xiàn)的。
Imlib庫 Imlib(圖片庫)提供一些例程,其中包括加載、存儲、顯示,以及定繪制各種流行的圖像格式(包括GIF、JPEG、PNG以及TIFF)的函數(shù)。
2. Gnome庫
Libgnome庫—Libgnome是一些與圖形用戶接口無關(guān)的函數(shù)集合,Gnome應(yīng)用程序可以調(diào)用其中的函數(shù)。
Libgnomeui庫—Libgnomeui包含了與GUI相關(guān)的Gnome代碼。它由為增強(qiáng)和擴(kuò)展Gtk+功能而設(shè)計(jì)的構(gòu)件組成。libgnomeui主要包含:
(1)GnomeApp構(gòu)件一般用來為應(yīng)用程序創(chuàng)建主窗口。
(2)GnomeCanvas構(gòu)件用來編寫定制構(gòu)件。
(3)Gnome內(nèi)置的pixmap用于創(chuàng)建和使用對話框的例程。
Libgnomeui中還有幾種其他構(gòu)件,如GnomeEntry、GnomeFilePicker等。
Libgnorba庫—libgnorba提供與CORBA相關(guān)的實(shí)用程序。
3.其他庫
這些庫一般使用在Gnome應(yīng)用程序中,但它不屬于Gnome-libs:
Gnome-print庫—Gnome-print提供一個虛擬輸出設(shè)備,一段代碼能輸出到一個打印預(yù)覽構(gòu)件或PostScript文件,還可以輸出到其他打印機(jī)格式。
Gnome-xml庫—Gnome-xml能按照樹狀結(jié)構(gòu)分析XML,也能按照XML輸出樹狀結(jié)構(gòu)。
Guile庫 Guile是Scheme編程語言在一個庫中的實(shí)現(xiàn),它使任何應(yīng)用程序都能帶有一個嵌入式的Sheme解釋器。
Bonobo庫—Bonobo是一種對象嵌入式結(jié)構(gòu),類似于Microsoft的OLE。
編程語言和編程工具
在Linux下的常用開發(fā)語言是C語言,Linux上的很多應(yīng)用程序就是用C語言寫的。當(dāng)然,也可以使用其他語言。因?yàn)镚tk+和Gnome是用C語言編寫的,所以在開發(fā)Linux下的GUI程序時使用C語言是非常方便的。Gtk+也提供與許多其他語言的接口。
一般的Linux發(fā)布版本中都提供了C編譯器gcc或egcs。使用gcc或egcs可以編譯C和C++源代碼。各種C編譯器都要使用一些C語言實(shí)用函 數(shù)。為了保證程序的可移植性,gcc沒有使用通用的C函數(shù)庫,而是使用一種稱為glib的函數(shù)庫。glib也是Gtk+的基礎(chǔ)。它包含一些標(biāo)準(zhǔn)函數(shù)的替代 函數(shù)和基本數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。
還有許多使用工具可以提高Linux下的編程效率,如gdb是優(yōu)秀的C語言調(diào)試器,有非常豐富的調(diào)試指令。automake和autoconf用于由源代碼結(jié)構(gòu)配置編譯選項(xiàng),生成編譯所需的Makefile文件。
在Linux下開發(fā)GUI應(yīng)用程序,像Windows平臺上的可視化快速應(yīng)用程序開發(fā)工具還很少。有幾種正在開發(fā)的RAD(Rapid Application Development)工具,比如我們以后將要介紹的Glade—一種GUI生成器,可以快速生成創(chuàng)建界面的C源程序。
]]>
在Ubuntu里十個必裝的應(yīng)用程式http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1675&Page=1wangxinxin2010-11-23 11:07:18功能,可以算是Linux里的殺手級應(yīng)用程式了。

    SMPlayer -這是Linux里功能最強(qiáng)大的影片播放程式之一,它使用了mplayer的引擎,并含括DVD、DVD ISO image、Matroska影片檔等等,多種格式支持。你一定要用。

    KTorrent -對我來說,要選BitTorrent用戶端程式的話我會選擇它。它擁有我所需要的全部功能,包括可以只下載torrents里的某些檔案,這個功能是有些用戶端程式所缺乏的。

    XChat -我想沒有其它(圖形界面)的IRC用戶端程式作的比Xchat好了。或許KVirc算得上-但這僅止于scripting/plugins的部份,Xchat輕輕松松就勝出Konversation或Ksirc許多。其預(yù)設(shè)支援了Perl與Python的scripting,C的plugins與Tcl scripting的plugin也都能用-只是并非預(yù)設(shè)就有。它還能夠簡單透過/set變數(shù)進(jìn)行客制化。

    BasKet - BasKet這套記錄用的軟件可以用來回顧之前的資料;它同時也是一套可以用來作出完整專案的好用程式,不只是簡單的note,還可以將你的資料組織到層級式的籃子里。除了現(xiàn)今版本仍不支援列印外(當(dāng)然,你也可以把note輸出為HTML再印出來),它幾乎可以說是全功能的了。我強(qiáng)烈推薦使用這套優(yōu)于其它同類型軟體的紀(jì)錄應(yīng)用程式。

    Wesnoth -這是一套turn-based的策略游戲、擁有良善的維護(hù)、強(qiáng)而有力的社群與出色的角色扮演,并具單一玩家模式與線上模式。我必須說,我真愛這套游戲,并由衷感謝所有建立與維護(hù)此游戲的社群所作的努力。

    K3b -無疑地,這是一套功能最完整的CD/DVD燒錄程式,還可以建立ISO image檔。 KDE 4現(xiàn)仍未支持,不過這看起來有點(diǎn)像是開發(fā)人員的托詞。

    Emacs -我覺得Emacs應(yīng)該是必備工具程式,同時也是功能最強(qiáng)大、最受歡迎的IDE。

    Yakuake -終端機(jī)應(yīng)用程式,用來當(dāng)成像FPS game里的console (例如Quake、ET、UT )。Yakuake可以使用F12鍵盤捷徑方式隱藏或顯示之。

    TVTime -這套程式對有TV卡的人來說很有用。我之前試過kdetv,不過現(xiàn)在覺得沒有別的程式比得上TVTime!]]>
嵌入式Linux操作系統(tǒng)開發(fā)工具選擇和應(yīng)用分析http://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1674&Page=1wangxinxin2010-11-23 11:05:59概述
    嵌入式Linux具有穩(wěn)定、可擴(kuò)充性及開放原始程序代碼等特點(diǎn),可兼容多種處理器和主機(jī),廣泛適用于各種產(chǎn)品和應(yīng)用。但是,交叉編譯、設(shè)備驅(qū)動程序開發(fā)/除錯,以及更小尺寸等要求對嵌入式Linux開發(fā)者來說都是嚴(yán)峻的挑戰(zhàn)。為應(yīng)對這些挑戰(zhàn),針對嵌入式Linux開發(fā)的專用工具應(yīng)運(yùn)而生,而且發(fā)展十分迅速。
    但是,許多這類開發(fā)工具都不兼容非X86平臺,而且也沒有很好地實(shí)現(xiàn)歸檔備案或整合。在其它開發(fā)環(huán)境下,組件間的高度整合并沒有完全兌現(xiàn)。因此,要想完全從這些免費(fèi)的軟件組件開始制作一個完整的跨平臺開發(fā)環(huán)境,開發(fā)者應(yīng)意識到這將需要大量的調(diào)查、實(shí)施、訓(xùn)練和維護(hù)方面的工作。
   Linux是少數(shù)既可以在嵌入式設(shè)備上執(zhí)行也可作為開發(fā)環(huán)境的操作系統(tǒng)之一。這一特性可讓開發(fā)者在轉(zhuǎn)向此開發(fā)系統(tǒng)之前于常用硬件(比如X86桌面系統(tǒng))之上開發(fā)、除錯和測試應(yīng)用程序和庫,因此可減少對標(biāo)準(zhǔn)參考平臺和指令集仿真器的依賴。這一技術(shù)僅適用于應(yīng)用程序和庫,但不適用于設(shè)備驅(qū)動程序,因?yàn)楹笳叩拈_發(fā)依賴于Linux架構(gòu)。
   開放原始程序代碼團(tuán)體及一些軟件供貨商可提供設(shè)備驅(qū)動程序開發(fā)工具。由于設(shè)備驅(qū)動程序比標(biāo)準(zhǔn)應(yīng)用程序距離硬件更近,因此它們的開發(fā)比較困難。所幸的是,Linux桌面系統(tǒng)可以利用一些Windows及其它操作系統(tǒng)所沒有的工具。有足夠經(jīng)驗(yàn)開發(fā)設(shè)備驅(qū)動程序的開發(fā)人員可能已經(jīng)習(xí)慣用Linux開發(fā)系統(tǒng)了。
   Linux的快速發(fā)展及其桌面方案的不斷涌現(xiàn)突顯了一個重要問題:所選擇的工具方案應(yīng)如何在不同的Linux分布式系統(tǒng)上執(zhí)行?它們依賴于主機(jī)平臺的軟件配置嗎?
    有些Linux工具提供獨(dú)立于主機(jī)平臺的開發(fā)環(huán)境,包括一系列可支持開發(fā)工具的應(yīng)用軟件、庫和實(shí)用程序。這一方法幾乎將開發(fā)環(huán)境與主機(jī)配置完全隔離開來,因此主機(jī)可以是任何Linux分布式系統(tǒng),而且任何更新和修改都不會影響開發(fā)環(huán)境的功能。
    這種方法的主要缺點(diǎn)是對儲存空間的要求有所增加─約200MB,因?yàn)樗约簩?shí)際上相當(dāng)于一個微型Linux分布式系統(tǒng)。
    可用的工具
   一個嵌入式Linux產(chǎn)品的開發(fā)需要幾個階段,包括為目標(biāo)板配置和建構(gòu)基本Linux OS;除錯應(yīng)用程序、庫、核心及設(shè)備驅(qū)動程序/核心模塊;出貨前最終方案的最佳化、測試和驗(yàn)證。
    有數(shù)百種開放原始程序代碼開發(fā)工具可供選擇。只要開發(fā)者原意花時間和精力去調(diào)查、實(shí)施和維護(hù)一系列各不相同的工具,總能找出一個完整的解決方案,完成幾乎任何開發(fā)任務(wù)。
  

  圖1
    開發(fā)者必須精確地考慮到這些工具的松散集合能提供什么樣的功能,以及需要付出多大的努力才能形成完整的解決方案。"
  在Linux應(yīng)用程序和庫的除錯方面,GNU Debugger (GDB)作為一種標(biāo)準(zhǔn)已有幾年的歷史。它是一種命令行程序,由多個不同的圖形用戶接口前端予以支持,每個前端都能以多種方式提供除錯控制功能。盡管GDB不是一個完美的方案,但它足夠應(yīng)對各種除錯任務(wù),而且已經(jīng)得到開放原始程序代碼團(tuán)體的廣泛支持。
  Linux核心或設(shè)備驅(qū)動程序的除錯要比應(yīng)用程序的除錯繁瑣得多。
  在做調(diào)查時,以下方面應(yīng)特別注意:
  什么除錯方法支持要開發(fā)產(chǎn)品的硬件?
  需要什么核心支持程序?
  還需要其它什么支持程序?
  除錯接口怎么樣,如何使用?
  該工具需要除錯核心模塊及處理虛擬地址轉(zhuǎn)換嗎?
  還需要其它什么工具才能提供完整的方案?
  經(jīng)過進(jìn)一步的調(diào)查,開發(fā)者往往發(fā)現(xiàn)工具A和工具B并沒有提供完全一致的功能,因?yàn)樗鼈兪窃诒舜霜?dú)立的情況下開發(fā)的。結(jié)果,開發(fā)者必須精確地考慮到這些工具的松散集合能提供什么樣的功能,還需要付出多大的努力才能形成完整的解決方案。
  如果不同處理器類型間的整合、可用性、互通作業(yè)性和移植性很關(guān)鍵的話,開發(fā)者應(yīng)考慮購買商用開發(fā)工具。這主要是因?yàn)閷㈤_發(fā)一個'免費(fèi)'方案所付出的努力考慮進(jìn)去,商用開發(fā)工具并不算貴。
  Linux BSP
  Linux系統(tǒng)有兩大主要部份:帶設(shè)備驅(qū)動程序的Linux核心;以及根文件系統(tǒng),包括系統(tǒng)所需的全部支持應(yīng)用程序、服務(wù)和庫。
  除了駐留在目標(biāo)板上的OS組件外,還需要制作一個由GNU Compiler Collection構(gòu)成的交叉編譯環(huán)境,為庫和二進(jìn)制程式(binutils)提供支持。
  雖然幾乎每一個組件都可在網(wǎng)上找到,但在硬件或設(shè)備驅(qū)動程序支持、整合測試信息、交叉編譯指南或軟件兼容性方面卻很難收集到太多信息。盡管開發(fā)者可從網(wǎng)上免費(fèi)下載各種組件以配置嵌入式Linux操作系統(tǒng),但每個組件在版本、支持、穩(wěn)定性和測試等方面的狀態(tài)則需要開發(fā)者自己決定。然后,開發(fā)者還要完成最后的OS整合和測試,以及為所開發(fā)產(chǎn)品提供終身Linux OS維護(hù)。
  另一方面,嵌入式Linux供貨商所提供的商用Linux板支持工具套件一般都是經(jīng)過預(yù)先安裝和測試的,而且提供支持和維護(hù)。其它須考慮的因素包括Linux桌面主機(jī)將會添加不同的庫和核心功能,以及由于組織內(nèi)的開發(fā)者變動而引起的長期維護(hù)問題。
  品質(zhì)保證部門一般會執(zhí)行一系列嚴(yán)格的驗(yàn)證和性能測試,其中包括內(nèi)存泄漏檢測/糾正、程序代碼最佳化和任務(wù)追蹤等。那些想利用開放原始程序代碼工具開發(fā)針對非X86平臺的嵌入式Linux產(chǎn)品開發(fā)者將會發(fā)現(xiàn)這一任務(wù)甚至要比選擇開放原始程序代碼除錯方案難得多。Linux Trace Toolkit、Valgrind工具及其它內(nèi)存分析程序可完成部份測試和驗(yàn)證任務(wù)。但總的來說,它們?nèi)狈﹃P(guān)鍵特性、整合功能及廣泛的硬件支持。這些開放原始程序代碼分析工具的評估過程與評估除錯方案的過程基本相同。
  最后的分析就是,一個設(shè)計(jì)得恰到好處的開發(fā)環(huán)境應(yīng)能夠供貨商用和開放原始程序代碼兩個世界所具有的最好特性:
  ·完整的開發(fā)能力;
  ·易于使用和整合;
  ·大型工程組織的協(xié)調(diào)控制;
  ·品質(zhì)和支持保證;
  ·持續(xù)性;
  ·按照自己的判斷力使用開放原始程序代碼的能力。       本信息來源:CAD教育網(wǎng) www.cadedu.com

]]>
Oracle應(yīng)用Linux開發(fā)Chttp://www.022-oo.cn/bbs/dispbbs.asp?BoardID=32&ID=1673&Page=1wangxinxin2010-11-23 11:05:05數(shù)據(jù)庫產(chǎn)品和商業(yè)應(yīng)用都將支持Linux平臺。本文所述OCI for Linux的C語言庫,正是Linux平臺上Oracle的C語言接口。
我們知道,在一個復(fù)雜的Oracle數(shù)據(jù)庫應(yīng)用中,C程序代碼由于其語言本身的靈活性、高效性,往往被加入到其商務(wù)邏輯的核心層模塊中。Oracle數(shù)據(jù)庫對C語言的接口就是OCI, Oracle 8.05int sqlo_init(int threaded_mode) 初始化程序庫接口,讀出環(huán)境變量,設(shè)置相應(yīng)的全局變量。當(dāng)前,threaded_mode設(shè)為0。
2)int sqlo_connect(int * dbh, char * connect_str) 連接數(shù)據(jù)庫,dbh為數(shù)據(jù)庫連接描述符,connect_str為用戶名/口令字符串。
3)int sqlo_finish(int dbh) 斷開數(shù)據(jù)庫連接。
4)int sqlo_open(int dbh, char * stmt, int argc, char *argv[]) 打開由stmt確定的查詢語句所返回的游標(biāo)。Argc,argv為查詢的參數(shù),后面我們將用更清晰的方法傳遞參數(shù)。
5)int sqlo_close(int sth) 關(guān)閉由上一個函數(shù)打開的游標(biāo)。
6)int sqlo_fetch(int sth) 從打開的游標(biāo)中獲取一條記錄,并將之存入一個已分配內(nèi)存空間中。
7)const char **sqlo_values(int sth, int *numbalues, int dostrip) 從內(nèi)存中返回上一次sqlo_fetch取得的值,是以字符串形式返回的。
8)以下介紹另一種檢索方式,int sqlo_prepare(int dbh, char const *stmt),返回一個打開的游標(biāo)sth。
9)int sqlo_bind_by_name(int sth, const char * param_name, int param_type, const void * param_addr, unsigned int param_size, short * ind_arr, int is_array) 將查詢語句的傳入?yún)?shù),按照名字的形式與函數(shù)中的變量綁定。如果你使用數(shù)組,那么參數(shù)param_addr和ind_arr必須指向該數(shù)組。
int sqlo_bind_by_pos(int sth, int param_pos, int param_type, const void * param_addr, unsigned int param_size, short * ind_arr, int is_array) 將查詢語句的傳出值,按照位置順序與函數(shù)中的變量綁定。
10)int sqlo_execute(int sth, int iterations) 執(zhí)行查詢語句。“Iterations”可設(shè)為“1”。
11)在執(zhí)行完數(shù)據(jù)庫操作后,我們可用int sqlo_commit (int dbh)提交操作,或用int sqlo_rollback(int dbh)回滾操作。
12)Libsqlora8還有其他一些操作函數(shù),這里就不一一列出了。
下面舉幾個例子說明這些函數(shù)如何使用。
cstr = "ocitest/ocitest"; //用戶名/口令
status = sqlo_init(0);
if (SQLO_SUCCESS != status)
{ printf ("sql_init failed. Exitingn");
exit(1);
}
status = sqlo_connect(&dbh, cstr); // int dbh
以上源代碼,顯示了如何連接數(shù)據(jù)庫
/* Select all and display */
char *select_stmt="SELECT cname, clength, colid FROM ocicolu";
if (0>(sd = sqlo_open(dbh, select_stmt, 0, NULL)))
{ printf("sqlo_open failed: %sn", sqlo_geterror(dbh));
return 0;
}
while (0 == sqlo_fetch(sd,1))
{ v = sqlo_values(sd, NULL, 1);
printf("Result: %sn",v);
}
if (0 > sqlo_close(sd))
{ printf("sqlo_open failed: %sn", sqlo_geterror(dbh));
return 0;
}
以上例子展示了第一種查詢方法,顯然,這種方法較簡單,但不夠靈活。
char *update_stmt =
"UPDATE ocitest.upload_log SET upload_fresh = where log_name = :1";
if (0 <= (sth = sqlo_prepare(dbh, update_stmt)))
{ if (SQLO_SUCCESS !=
(sqlo_bind_by_name(sth, ":1", SQLOT_STR, packet_name, 64, NULL, 0)
))
{ printf("sqlo_bind_param failed failed: %sn", sqlo_geterror(dbh) );
return 0;
}
}
if (SQLO_SUCCESS != sqlo_execute(sth, 1))
{ printf("sqlo_execute failed: %sn", sqlo_geterror(dbh) );
return 0;
}
上面的代碼顯示了如何通過名字綁定變量,“:1”在Oracle SQL語句中表示為一個變量(名字隨意),在sqlo_bind_by_name函數(shù)中與packet_name變量綁定。在變量綁定完畢后,就可以調(diào)用sqlo_execute函數(shù)來執(zhí)行這個SQL語句。
好了,我們已經(jīng)向大家介紹了Libsqlora8的基本使用方法,如果希望了解更多內(nèi)容,Libsqlora8的程序包中帶有詳細(xì)的說明和例子,大家不妨自己鉆研一下。有什么心得,歡迎和我聯(lián)系。E-mail:nick_chen@yeah.net /*-------------------------------------------------------------------------
* testlora.c
* Test programm for libsqlora8(Kai Poitschke)
* Assuming you installed the library with prefix=/usr/local, the command
* to compile this is:
* gcc -o sample sample.c -lsqlora8 -L$ORACLE_HOME/lib -lclntsh
*-----------------------------------------------------------------------*/
#include
#include
#include #include "sqlora.h" #define MAX_ITERS 10 #define MAX_LOOPS 1 /* how many time we run the tests */ #define CLOSE_CURSOR 1 /*-------------------------------------------------------------------------
* create our test table
*-----------------------------------------------------------------------*/
int create_table( int dbh )
{
int nkey;
char ckey;
double nv ]]>
主站蜘蛛池模板: 国产综合一区二区 | 成人性大片免费观看网站 | 麻豆一区二区99久久久久 | 一级女性黄色生活片 | 天天噜天天干 | 成人激情视频在线观看 | 久久男人| 喷潮网站| 色综合97天天综合网 | 欧美色专区 | 国产一区二区免费 | 免费三级pq | 最新日本中文字幕在线观看 | 精品国产91亚洲一区二区三区www | 麻豆网站在线 | 91看片免费版 | 欧美aaa| 五月婷婷丁香在线 | 国产一级影视 | 日韩欧美在线视频播放 | 在线国产视频 | 久久99国产亚洲精品观看 | 黄色av网站在线免费观看 | 国产麻豆 | 香蕉久| 国产一级毛片视频 | 国产精品久久久久久久久久日本 | 黄色网址av | 色综合综合色 | av网站在线免费观看 | 日本精品一区二区三区四区 | 首页亚洲国产丝袜长腿综合 | 99国产在线视频有精品视频 | 日本一区视频在线播放 | 欧美性猛交一区二区三区精品 | 日韩欧美一区二区三区 | 久操视频在线观看 | 999精品国产人妻无码系列久久 | 99久久精品国产一区二区三区 | av国产精品| 偷偷要色偷偷 |