97视频精品全国在线观看,日本黄大片在线观看,在线免费视频你懂的http://www.bjzhda.cnzh-cn曙海教育集團論壇http://www.bjzhda.cnRss Generator By Dvbbs.Netofficeoffice@126.comimages/logo.gif曙海教育集團論壇Linux下RPM軟件包的安裝及卸載http://www.xinguifushi.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 包并在安裝過程中顯示正在安裝的文件信息及安裝進度;

  RPM 查詢操作

  命令:

  rpm -q …

  附加查詢命令:

  a 查詢所有已經安裝的包以下兩個附加命令用于查詢安裝包的信息;

  i 顯示安裝包的信息;

  l 顯示安裝包中的所有文件被安裝到哪些目錄下;

  s 顯示安裝版中的所有文件狀態及被安裝到哪些目錄下;以下兩個附加命令用于指定需要查詢的是安裝包還是已安裝后的文件;

  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 忽略依賴關系并繼續操作

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

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

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

  Linux所具備的特性∶ 

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

  2. Linux具備高解析度與優秀的圖形界面(GUI),大幅提升數字監控系統應用的親和力。 

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

  4. Linux本身開放性的架構與彈性(Scalable)設計,可針對數位影像監控應用量身訂作,去除與監控無關的多余功能,在提升系統效能的同時,也減少了出問題的機率。 

  5. Linux從頭到尾即針對網絡應用而設計,可支持TCP/IP、WWW等多項國際標準,能迎合新一代DVR產品網際網絡/通信網絡連結的所有需求。 

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

      三、Linux在DVR系統中的應用 

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

  Linux操作系統搭配實時視頻采集卡與攝影機,進行視訊即時壓縮、錄像、儲存等工作,除了可以開發操作簡單、功能簡易、價格大眾化的數字錄像監控系統外,亦可有效整合互聯網絡、電話網路、安全防盜設備,作為自主性保全的安全監控設備。 

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

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

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

      四、Linux DVR優越的應用前景 

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

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

    豪威歷經多年開發研究,將LINUX平臺與軟壓縮視頻技術進行完美的融合,誕生了—紅色風暴1號

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

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

圖片點擊可在新窗口打開查看

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

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

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

圖片點擊可在新窗口打開查看

Fedora 14的另一個亮點則是納入了使用環境MeeGO 1.0,趕上熱門的平板電腦話題。這個由Intel及Nokia合作推廣的技術搭配Sugar CRM展示版、開發工具使用,展現平板電腦在商務上的應用,與一般平板電腦所強調的多媒體休閑走向大異其趣。

圖片點擊可在新窗口打開查看

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

但最重要的是獨立計算機環境的簡單協議(SPICE)的到來。這是一個桌面介紹的服務協議,如微軟的RDP(遠程桌面協議)和Citrix的ICA(獨立計算架構),你用來運行精簡電腦的桌面。

圖片點擊可在新窗口打開查看

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

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

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

圖片點擊可在新窗口打開查看

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

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

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

]]>
mips linux技術經驗總結http://www.xinguifushi.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'
應該使用下面的命令
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參數解釋轉義字符
       -n     do not output the trailing newline
       -e     enable interpretation of the backslash-escaped characters listed
              below
3:
sed /^$/d 刪除文件中的空行
                
                
               

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

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

任何動態電源管理策略的基礎都是調整便攜式設備中一個或多個處理器內核的工作電壓和頻率,此外,在高集成度的PowerPC、ARM和基于x86的系統中經常包含一個DSP或智能基帶處理器。的確,諸如英特爾的StrongARM和XScale處理器、TI的OMAP處理器系列以及IBM最近發布的PowerPC 405LP和Transmeta Crusoe等CPU都提供內核電壓和頻率的動態調節功能。不過,現代的嵌入式處理器具有非常高的電源效率,以至于CPU并不總是最主要的耗能器件,其它高耗能的器件包括高性能存儲器、彩色顯示器和射頻接口等。因此,如果動態電源管理系統只能調節處理器內核的電壓和頻率,那么它的用途將有限。

一個真正有用的動態電源管理方案應該可以采用與CPU內核運行相協調或相獨立的方式,???持對一系列電壓和時鐘的快速調節。

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

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

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

接口和API

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

內核接口

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

驅動程序接口

???持DPM功能的設備驅動程序比默認的驅動程序更了解系統狀態:它們在外部事件的驅使下通過設定不同的狀態來反映或遵循那些操作機制,或者通過來自內核DPM子系統的調用來反映或遵循那些操作機制。為了實現更精確的機制決策,驅動程序API也允許驅動程序注冊與它們接口或由它們管理的那些設備的基礎操作特征。

應用程序API

應用程序可以分為三類:


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


*在電源管理知會“包裹器”中的傳統應用程序


*不帶有電源管理的傳統應用程序

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

在嵌入式Linux圖2:時鐘變換過程的延時。 DPM下的實際機制包括以下API,如dpm_set_os()(內核)、assert_constraint()、remove_constraint()和set_operating_state()(內核和驅動程序)、set_policy()和set_task_state()(經系統的用戶級調用)以及/proc接口。

對實時性能的影響

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

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

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

向嵌入式Linux發展的趨勢

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

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


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

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


——————————Linux視頻教程學習——————————————————
課程大綱:
1、 安裝篇
2、 基本命令篇
3、 應用篇
4、 娛樂篇
5、 配置篇
6、 服務器篇



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

      虛擬機 For Win7 付費情況 最新版本 裝置包大小 特性

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

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


2、 Linux系統的發型版本
      Linux, Ubutun、 debian、redhat(并購了jboss)等等, 國產的有紅旗、 雨木林風等等
      LInux是內核

     redHat的目標就是服務器, Ub的目標是桌面應用(當然Linux的服務器應用都不會弱)

     Linux= 內核 + 發行版


3、 觀看WIN7下使用vmware安裝雨木林風操作系統

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

5、 vbox安裝ubuntu

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

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


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

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

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

  2.功能強大的內核,性能高效、穩定,多任務

  Linux的內核非常穩定,它的高效和穩定性已經在各個領域,尤其在網絡服務器領域,得到了事實的驗證。Linux內核小巧靈活,易于裁減,這使得它很適合嵌入式系統的應用。

  3.支持多種體系結構,如X86、ARM、MIPS、ALPHA、SPARC等

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

  4.完善的網絡通訊、圖形、文件管理機制

  Linux自產生之日起就與網絡密不可分,網絡是Linux的強項。另外,Linux還支持多種文件和圖形系統。

  5.支持大量的周邊硬件設備

  Linux上的驅動已經非常豐富了,它們支持各種主流硬件設備和最新硬件技術。

  6.大小、功能都可定制

  Linux秉承Unix的優秀設計思想,非常靈活,各部分的可定制性都很強。

  7.良好的開發環境,不斷發展的開發工具集

  Linux有著非常優秀的完整開發工具鏈,有十幾種集成開發環境,其中很多是免費的,大大降低了開發費用。

  8.軟件開發者的廣泛支持

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

  9.價格低廉

  有效降低產品成本,對成本敏感的嵌入式系統來說至關重要,Linux恰好具有這一特性。

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

]]>
linux 基礎復習(7)串口應用開發 - 技術文檔 - 新手入門 Linux時http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=32&ID=1682&Page=1wangxinxin2010-11-23 13:26:07· 并行通信是指利用多條數據傳輸線將一個資料的各位同時傳送。它的特點是傳輸速度
快,適用于短距離通信,但要求傳輸速度較高的應用場合。
· 串行通信是指利用一條傳輸線將資料一位位地順序傳送。特點是通信線路簡單,利用
簡單的線纜就可實現通信,降低成本,適用于遠距離通信,但傳輸速度慢的應用場合。
串口設置詳解
本節主要講解設置串口的主要方法。
如前所述,設置串口中最基本的包括波特率設置,校驗位和停止位設置。串口的設置主
要是設置struct termios結構體的各成員值,如下所示:
#include
struct termio
{      
unsigned short c_iflag; /* 輸入模式標志 */
unsigned short c_oflag; /* 輸出模式標志 */
unsigned short c_cflag; /* 控制模式標志*/
unsigned short c_lflag; /*本地模式標志 */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};
在這個結構中最為重要的是c_cflag,通過對它的賦值,用戶可以設置波特率、字符大小、
數據位、停止位、奇偶校驗位和硬件流控等。另外c_iflag 和c_cc 也是比較常用的標志。在
此主要對這3 個成員進行詳細說明。
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        數據位的位掩碼
CS5          5個數據位
CS6          6個數據位
CS7          7個數據位
CS8          8個數據位
CSTOPB       2個停止位(不設則是1個停止位)
CREAD        接收使能
PARENB       校驗位使能
PARODD       使用奇校驗而不使用偶校驗
HUPCL        最后關閉時掛線(放棄DTR)
CLOCAL       本地連接(不改變端口所有者)
LOBLK        塊作業控制輸出
CNET_CTSRTS  硬件流控制使能

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

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

完整的串口配置模板,實用!把常用的選項在函數里面列出,可大大方便用戶的調試使用

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;
case 460800:
cfsetispeed(&newtio, B460800);
cfsetospeed(&newtio, B460800);
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;
}






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

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

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

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


#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編程及其在無線網關中的應用http://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=32&ID=1681&Page=1wangxinxin2010-11-23 13:22:06l  引言

Linux具有豐富的網絡功能,完善的內置網絡是Linux的一大特點。嵌入式Linux專用于微控制器,同樣具有優秀的網絡功能。Linux是一種可移植的操作系統,能夠在從微型計算機到大型計算機的任何環境中和任何平臺上運行。可移植性為運行Linux的不同計算機平臺與其他任何機器進行準確而有效的通訊提供了手段,不需要另外增加特殊的,昂貴的通訊接口。

該文在構建基于嵌入式Linux和MPC852T無線網關平臺的基礎上,編程實現了無線網關平臺與無線終端之間的無線通信,并給出了無線網關平臺與無線終端之間通信的測試結果。

2  Linux下的socket編程

2.1 Socket編程

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

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

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

2.2 Linux下的socket函數庫

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

1) socket( ):建立Socket,此函數用來建立Socket描述字,并為此Socket建立資源(為一個Socket數據結構分配存儲空間)。應用程序在使用socket之前,首先必須擁有一個socket。socket( )向應用程序提供創建socket的手段。socket( )函數原形為int socket(int domain,int type,int protoco1);函數中的domain是參數指定通信中使用的協議簇,也就是網絡的類型,通常為PF_INET,表示互聯網協議族(TCP/IP協議族);type參數指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協議;protocol是參數指定通信中使用的協議。

函數在正常時返回socket描述符;否則返回l,錯誤狀態在全局變量error里。

2) bind( ):綁定本地地址,即將一個本地地址與一個SOCKET描述字連接在一起。此函數在服務程序上使用,是調用監聽函數listen()必須要調用的函數。

Bind函數原型為:

int bind(int sockfd, struct sockaddr *my_addr, int addrlen)。bind()函數給已經打開的socket指定本地地址。函數中的sockfd是調用socket函數返回的socket描述符;addrlen是my-addr結構的長度,常被設置為sizeof(struct sockaddr);my-addr是用于偵聽連接請求的本地地址。

函數在正常時返回0,否則返回l,同時error是系統錯誤碼。

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

函數正常時返回0,否則返回1,同時error是系統錯誤碼。

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

函數正常創建了一個新的連接,那么返回非負的整數,即新連接的socket描述符,否則返回l,error是系統錯誤碼。

5) connect( ):建立連接。bind( ),listen( )和accept( )都是用于被動地等待對方建立連接時需要使用的,connect( )函數是在主動地向對方建立連接時使用的。函數原形為int connect(int sockfd,struct sockaddr*srvaddr,int addrlen);函數中的sockfd是socket描述符;srvaddr是通信目的方地址;addrlen是目的地址長度。

函數在正常建立連接時返回0,否則返回l,系統錯誤碼在error中。

6) close( ):此函數是用來關閉某一socket。socket和文件描述符的關閉操作都使用這個函數。函數原形為int close(int fd);參數fd是socket描述符。函數在正常時返回0,返回1表示出錯。

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

3 無線網關平臺的構建

為了將無線終端設備接入控制網絡實現遠程監控,根據條件構建了基于MPC852T和嵌入式Linux的無線網關平臺。MPC852T是Motorola推出的面向低端的一款通信處理器,具有通信和網絡處理能力強、可靠性高、功耗低、功能集成度高等優點,并且有眾多的操作系統支持,這使得它在各種嵌入式系統,尤其是在網絡通信以及數據采集和傳輸等系統中的應用較為廣泛。

無線網關的硬件設計方案采用中心控制方案,中央處理器選用MPC852T,在MPC852T外圍配置一個RS-232串口、一個10M以太網口、一個100M以太網接口、SDRAM同步動態隨機存儲器等構成無線網關的硬件平臺,無線網關的硬件系統結構圖如圖1所示。

無線網關與無線終端通信的實現

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

圖片點擊可在新窗口打開查看

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

#define PORT 3000       /*設定服務器監聽端口*/

………………

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

{

int second;

int sockfd,new_fd;           /* sockfd為監聽用描述符*/

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)        /*監聽端口是否有請求*/

………………

for(;;){          /*開始服務器循環*/

/*等待連接*/

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;

}

}

測試結果

在上位機開啟通信終端,設置好串口參數,進入超級終端。無線網關平臺上運行服務器端程序,同時在終端上運行客戶端程序,即可進行測試,測試結果如圖2所示。

圖片點擊可在新窗口打開查看

圖2  無線網關與無線終端測試結果圖

6  

目前基于TCP/IP協議的工業以太網的在組網時仍需要布線,但在工業現場,布線時常會受到限制,電纜的連接也限制了現場設備的移動和網絡結構的重組,還有一些高速旋轉設備根本無法通過電纜來傳輸數據。將802.11b無線通信技術應用于工業控制網絡,工控網絡就兼有了無線通信的優點:現場設備無需電纜即可與控制網絡連接,實現現場數據的無線采集和傳輸,對于在一些不可預知的環境,尤其是不適于布線的強腐蝕惡劣環境。本文作者創新點:通過Linux下的socket編程實現了無線網關與無線終端的通信,可以使用無線通信來完成對現場設備的控制。

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

        在華清遠見的嵌入式培訓課程中,Qt是嵌入式學院<嵌入式工程師職業培訓班>二期課程中嵌入式linux應用開發方面的重要內容。不少學員對QT方面的內容比較關注,所以在這里我們先對QT做一下簡單介紹。

        QT

        Qt是一個多平臺的C++圖形用戶界面應用程序框架,由挪威 TrollTech 公司出品。它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象的很容易擴展,并且允許真正地組件編程。

        自1996年Qt進入商業領域開始,它已經成為全世界范圍內數千種成功的應用程序的基礎。Qt也是流行的Linux桌面環境KDE 的基礎,KDE是所有主要的Linux發行版的一個標準組件。

        基本上,Qt 同 X Window (X Window是一種用于UNIX系統的標準圖形化用戶界面)上的 Motif、Openwin、GTK 等圖形界面庫和 Windows 平臺上的 MFC、OWL、VCL、ATL是同類型的東西,但是Qt 具有下列優點:

        ●  優良的跨平臺特性

        Qt支持Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等操作系統, Qt的跨平臺特性,是選擇Qt的一個非常重要的原因。對于相同功能的軟件,我們無須針對不同的操作系統編寫不同程序,只需將相同的代碼針對不同的環境編譯即可;

      ● 面向對象

      Qt 的良好封裝機制使得 Qt 的模塊化程度非常高,可重用性較好,對于用戶開發來說是非常方便的。Qt 提供了一種稱為 signals/slots(信號/槽) 的安全類型來替代 callback(回調函數),這使得各個元件之間的協同工作變得十分簡單;

        ● 豐富的API

        ● Qt 包括多達400個以上的 C++ 類,同時不斷擴展。

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

        ● XML 支持;

        ● 開放源碼

       開放源優勢包括一個活動的開放源開發員社團。由于Qt的不間斷開發,以及完整的代碼透明性,以允許Qt開發員進行徹底深入地查看,進行自定義并擴展Qt來滿足其獨特的需求。

       Qt/Embedded

       Qt/Embedded是Qt的嵌入式版本,它在原始Qt的基礎上,做了許多出色的調整以適合嵌入式環境。同Qt/X11相比,Qt/Embedded很節省內存,因為它不需要X server或是Xlib庫,它在底層摒棄了Xlib,采用framebuffer作為底層圖形接口。Qt/Embedded的應用程序可以直接寫內核幀緩沖,因此它在嵌入式linux系統上的應用非常廣泛。

       最后再了解下Qtopia

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

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


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

(1)   指令系統

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

(2)   存儲器操作

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

(3)   程序

RISC匯編語言程序一般需要較大的內存空間,實現特殊功能的程序復雜,不易設計;而CISC匯編語言程序編程相對簡單,科學計算及復雜操作的程序設計相對容易,效率較高。

(4)   中斷

RISC機器在一條指令執行的適當地方可以響應中斷;而CISC機器是在一條指令執行結束后才響應中斷。

(5)   CPU

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

(6)   設計周期

RISC微處理器結構簡單,布局緊湊,設計周期短,且易于采用最新技術;CISC微處理器結構復雜,設計周期長。

(7)   用戶使用

RISC微處理器結構簡單,指令規整,性能容易把握,易學易用;CISC微處理器結構復雜,功能強大,容易實現特殊功能。

(8)   應用范圍

由于RISC指令系統的確定與特定的應用領域有關,故RISC機器更適合于專用機;而CISC機器則更適合于通用機。

2. 嵌入式微控制器

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

與嵌入式微處理器相比,微控制器的最大特點是單片化,體積大大減小,從而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系統工業的主流。微控制器的片上資源一般比較豐富,適合于控制,因此稱為微控制器。

嵌入式微控制器目前的品種和數量最多,比較有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16和68300等。另外還有許多半通用系列,如支持USB接口的MCU 8XC930/931、C540和C541。目前MCU占嵌入式系統約70%的市場份額。

特別值得注意的是,近年來提供x86微處理器的著名廠商AMD公司將AM186CC /CH/CU等嵌入式處理器稱之為Microcontroller,Motorola公司把以Power PC為基礎的PPC505和PPC555亦列入單片機行列。TI公司亦將其TMS320C2XXX系列DSP做為MCU進行      推廣。

3. 嵌入式DSP處理器

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

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

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

DSP的設計者們把重點放在了處理連續的數據流上。在嵌入式應用中,如果強調對連續的數據流的處理及高精度復雜運算,則應該選用DSP器件。

4. 嵌入式片上系統

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

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

1.1.2  嵌入式處理器的選擇

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

表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)   調查市場上已有的CPU供應商

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

(2)   處理器的處理速度

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

(3)   技術指標

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

(4)   處理器的低功耗

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

(5)   處理器的軟件支持

若僅有一個處理器,沒有較好的軟件開發工具的支持,也是不行的,因此選擇合適的軟件開發工具對系統的實現會起到很好的作用。

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

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

什么是開放源代碼?

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

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


圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看


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

許多人選擇開放源代碼工具是因為它們便宜(開放源代碼軟件經常是免費的,這當然非常便宜)。開放源代碼軟件還傾向于非常可靠。由于有技術興趣的任何人都能夠查看源代碼,因而可能會有數千個質量控制機構在評估代碼。程序員能夠無隔閡地直接接觸用戶,因此問題和 bug 通常是大家都知道的,從而迅速得到糾正。此外,由于沒有對用戶隱藏任何東西,這樣有利于更好的技術脫穎而出。

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

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


圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看


獲得開放源代碼工具

獲得開放源代碼軟件是很容易的;Linux 內核本身就是開關放源代碼的。當您安裝 Linux 時,就開始使用開放源代碼了。除了內核外,Linux 發行套件中還包含其他許多開放源代碼包,其中包括開發工具、庫和應用程序。對于所有這些包,它們的源代碼都是可用的,您可以編譯任何包以優化或為特定用途而自定義它。

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

SourceForge

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

RPM 與源代碼

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

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

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


圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看


使用源代碼

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

Linux 本質上在不同的體系結構上都是相同的;因此,許多項目的源代碼無需多少經驗就能成功地編譯。源代碼通常作為壓縮的 tar 文件來提供。Gzip 是最常用的壓縮方式,不過 bzip2 正在變得流行起來,因為它創建的壓縮文件更小一些。

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

圖 1. Gimp 實際應用
圖片點擊可在新窗口打開查看

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

文件將解壓縮到當前目錄。標準的方法是將源代碼包含在一個與產品名稱相同的目錄中。在此例中,文件包含在一個名為 gimp-1.2.4 的目錄中。

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

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

“GNU 的 Autoconf 是一個用于配置源代碼和 Makefile 的工具。使用 Autoconf,程序員能夠創建可移植和可配置的包,因為生成包的人能夠指定各種配置選項。”

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

./configure

它將在系統用上執行多個測試并成功地結束。要生成程序,請使用如下命令:

make

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

make install

這個命令將把文件復制到系統中的適當位置,更新文件權限,復制配置文件,并把文檔添加到手冊頁。

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

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

make uninstall

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


圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看
圖片點擊可在新窗口打開查看


創建自定義 RPM

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

源 RPM

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

 

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

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

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

盡管有以上這些辯護,盡管Microsoft抱怨說人們對攻擊Windows遠比對攻擊Linux感興趣(因為更容易成名)才使得Windows頻頻亮起安全紅燈,但我認為現階段Linux在安全性能上確實要優于Windows。起碼以病毒數量和危害性而言,Windows用戶所擔當的風險就要大得多。只是Windows的安全性也不象有些文章渲染的那樣糟糕。

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

穩定性

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

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

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

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

硬件支持

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

雖然沒有明說,但上面談論的硬件都是針對x86機器的,脫離了這個框架,Linux在硬件的支持上的廣泛程度是包括Windows在內的任何其它操作系統都無法比擬的。

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

規范性

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

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

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

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

總體上講,在對外部規范的遵循性上,Linux要優于Windows,而在自身的規范性上,Windows要顯著優于Linux,而且在近期內這種優勢不會喪失。

源代碼

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

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

應用程序界面(API)

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

系統可調節性

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

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

另一方面,在各自可調節的范圍內,Windows要比Linux易于調節(這在很大程度上得益于Windows界面的規范性)。在早期,Linux的調節往往需要用戶直接修改參數文件,即使對于有一定經驗的用戶,這也是一件令人頭疼的事。近年來Linux在這方面做了很大的改進,開發了許多工具軟件,不過和Linux下的許多其它類別的軟件類似,Linux的工具軟件也呈現一種發散性,即有不止一種軟件可以做同一件事。這使得用戶在轉換機器和LinuxDistribution時往往因為不同環境下工具軟件的不同而需要學習新的工具或重新安裝舊的工具。

使用方便性

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

版權限制和費用

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

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

不過對公司用戶來說,由于Linux不對用戶數量設置限制,與Windows的VolumnLicence相比其費用方面的優勢是十分明顯的。

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

技術支持

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

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

結語

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

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

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

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

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

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

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

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

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

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

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

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

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

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

]]>
Oracle應用Linux開發Chttp://www.xinguifushi.cn/bbs/dispbbs.asp?BoardID=32&ID=1673&Page=1wangxinxin2010-11-23 11:05:05數據庫產品和商業應用都將支持Linux平臺。本文所述OCI for Linux的C語言庫,正是Linux平臺上Oracle的C語言接口。
我們知道,在一個復雜的Oracle數據庫應用中,C程序代碼由于其語言本身的靈活性、高效性,往往被加入到其商務邏輯的核心層模塊中。Oracle數據庫對C語言的接口就是OCI, Oracle 8.05int sqlo_init(int threaded_mode) 初始化程序庫接口,讀出環境變量,設置相應的全局變量。當前,threaded_mode設為0。
2)int sqlo_connect(int * dbh, char * connect_str) 連接數據庫,dbh為數據庫連接描述符,connect_str為用戶名/口令字符串。
3)int sqlo_finish(int dbh) 斷開數據庫連接。
4)int sqlo_open(int dbh, char * stmt, int argc, char *argv[]) 打開由stmt確定的查詢語句所返回的游標。Argc,argv為查詢的參數,后面我們將用更清晰的方法傳遞參數。
5)int sqlo_close(int sth) 關閉由上一個函數打開的游標。
6)int sqlo_fetch(int sth) 從打開的游標中獲取一條記錄,并將之存入一個已分配內存空間中。
7)const char **sqlo_values(int sth, int *numbalues, int dostrip) 從內存中返回上一次sqlo_fetch取得的值,是以字符串形式返回的。
8)以下介紹另一種檢索方式,int sqlo_prepare(int dbh, char const *stmt),返回一個打開的游標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) 將查詢語句的傳入參數,按照名字的形式與函數中的變量綁定。如果你使用數組,那么參數param_addr和ind_arr必須指向該數組。
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) 將查詢語句的傳出值,按照位置順序與函數中的變量綁定。
10)int sqlo_execute(int sth, int iterations) 執行查詢語句。“Iterations”可設為“1”。
11)在執行完數據庫操作后,我們可用int sqlo_commit (int dbh)提交操作,或用int sqlo_rollback(int dbh)回滾操作。
12)Libsqlora8還有其他一些操作函數,這里就不一一列出了。
下面舉幾個例子說明這些函數如何使用。
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
以上源代碼,顯示了如何連接數據庫
/* 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函數中與packet_name變量綁定。在變量綁定完畢后,就可以調用sqlo_execute函數來執行這個SQL語句。
好了,我們已經向大家介紹了Libsqlora8的基本使用方法,如果希望了解更多內容,Libsqlora8的程序包中帶有詳細的說明和例子,大家不妨自己鉆研一下。有什么心得,歡迎和我聯系。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 ]]>
主站蜘蛛池模板: 午夜欧美日韩在线视频播放 | 一级片免费在线播放 | 久青草网站 | 自拍欧美日韩 | 欧美精品xx| 成年大片免费视频播放二级 | 欧美日本一区二区 | 黄色三级免费 | 亚洲视频免费在线看 | 国产一区亚洲欧美成人 | 在线视频一区二区三区三区不卡 | 夜色成人免费观看 | 欧美一级片免费 | 特级毛片www欧美 | 永久黄网站色视频免费网站 | 手机在线毛片免费播放 | 欧美黄色精品 | 美女黄色一级毛片 | 99久久国产综合精品国 | 成人性色生活片免费网 | 欧美一级毛片片aa视频 | 成人免费影院 | 手机看片日本 | 欧美视频一区在线观看 | 免费一级网站免费 | 亚洲黄网址| 国产一级精品视频 | 免费韩国美女爽快一级毛片 | 国产激情视频在线播放 | 国产美女毛片 | 欧美日韩精品一区二区在线线 | 欧美三级做爰全过程 | 好男人天堂网 | 日韩免费高清 | 久草免费手机视频 | 国产成人a毛片在线 | 久久精品视频1 | 欧美三级超在线视频 | 一级片免费在线播放 | 国产精品6| 欧美一级特毛片 |