Linux學習總結報告

一、 嵌入系統套用前景

Linux的套用領域不斷擴展,從最早的Web、FTP、郵件服務開始,逐步擴張到個人桌面套用、網路安全、電子商務、遠程教育、集群計算、網路計算、嵌入式系統等各個領域。更是吸引了想IBM、SUN、惠普這樣的IT巨頭積極參與到Linux套用的開發和推廣中來。Linux之前主要套用於伺服器及計算集群,未來應該該在個人計算機上有所發展,最佳化目前的圖形化界面,以及加快桌套用的開發,以及在智慧型終端的套用。 首先,微軟不會甘心讓出市場讓Linux來壯大,所以Linux必須發揮其本身的優勢,贏得更多的用戶,已達到其能不斷的開發和更新。再者,由於開源軟體的商業模式及技術模式沒有前例可循,注定了Linux的前路不會是一帆風順的。我認為,當前Linux的發展主要面臨以下幾個問題:一是Linux企業眾多但未形成規模,也還沒有找到有效的贏利途徑,並且版本繁多,互不兼容,削弱了競爭力;二是隨著逐漸流行而引發的安全問題;三是人才不足的隱憂。Linux的最大優勢在於它是開源的,也即開放的。但出於各自的商業利益,各企業分別在其發行的版本上載入各種不同的功能,彼此之間不兼容。這些不同的版本意味著廠商和用戶測試的工作量加大,意味著硬體廠商需要為每一個版本的Linux提供驅動程式……這種情形目前正在削弱整個Linux的市場競爭力。安全方面,隨著Linux越來越受歡迎,越來越多針對Linux的蠕蟲、病毒和惡意軟體也會層出不窮。雖然開放原始碼社區都在及時回響並修補Linux上存在的漏洞,但Linux的非集中管理本質特性使Linux升級的發布和審查變得非常困難。一旦Linux由於安全問題給用戶特別是企業用戶造成損失,其不良影響及對用戶信心的打擊是巨大的。 當前制約著Linux發展的還有一個關鍵因素,那就是人才。相比前幾年,國內懂Linux的技術人員已經多了很多。但是作為一個快速發展的產業,人才的廣度和深度都遠遠不夠。能夠對核心有所研究的人才少之又少,多數都是一知半解。有限的人才又都集中在Linux廠商內,系統集成商、代理商、套用軟體開發商等擁有的人才更少,制約著完整的Linux產業鏈的形成

二、 研究方向

嵌入式的發展方向有很多,門檻高低不一樣。具體來說:

1.單片機:工控程式(不跑os)--入門容易,無外乎就是掌握彙編和c,能夠根據datasheet來寫,發展前景一般,也沒有太大的技術難度,除非你在算法上面有優勢,比如智慧型車會各種PID,模式識別上會神經網路,最佳化上會遺傳算法等等,但是這些複雜的控制一般就不會裸奔了(除非環境惡劣),肯定是處理器強悍,帶os的;硬體製作--就是數字電路,涉及單片機的外設,感覺難度也不高,據我說知,只會單片機無論硬體還是軟體工資都不高,也沒有特別大的技術含量,同時,單片機更新換代特別快,你需要從大量的單片機中找尋適合產品的,看不同的datasheet。

2.ARM:這個搞的人很多,軟體上就是1.寫底層驅動,這個入門,深入都不容易,需要對硬體及os有較深的了解,發展還是很不錯;2.作業系統-比較複雜,linux,android等,你看現在很多手機廠商推出的作業系統也就是修改核心,換皮膚,

就業還是很容易的;3.應用程式,就是android開發或者Linux上套用開發(QT等),做的人很多,就業容易待遇也不錯,需要掌握c++/java。硬體上1.就像手機一樣在處理器上做整體的電路,比單片機入門難的多,做成技術大牛了不缺錢。

2.soc,架構開發等後面會提到

3.FPGA:就是硬體編程,入門很簡單,做深很難,要對時序有非常深的理解和大量的項目開發經驗,就算你做的特別好,前景還是不明確。FPGA近年的一大熱門就是軟體無線電,成本還降不下去,同時AD採樣速度目前不夠,導致FPGA的套用有限,一般公司都是把它作為一個驗證工具比如IC設計上的驗證。只會FPGA就業會很窄,也不理想,建議作為工具學習。

4.DSP:就是算法,你需要一個名牌大學研究生以上學歷,同時在算法和數學上有很強的能力。如果做不到,就不用搞了。

5.IC設計,做微處理器上的soc,前端後端,專用處理器(應該也屬於嵌入式領域),入門難,成為牛人更難,對計算機體系結構,微處理器結構,積體電路等等有比較深的認識,然後項目經驗大大的有才行。不過國內行情一般,外企招人少,希望今年開始國家的扶持政策能夠發揮作用。

6.微處理器體系結構:偏理論,偏巨觀,研究生能夠對整個體系結構有個比較淺的了解同時在局部上能夠做一點設計工作,博士生能夠對整個結構有較深的認識在局部上能設計。現在搞的多的是高性能體系結構,低功耗結構,並行開發等等,因為功耗和並行限制了目前處理器的速度,所以在低功耗和並行上開發有很大的前景,同時基於神經網路的架構處理器,雲計算處理器等專用處理器也是目前的一個熱點。發展前景很好,但是難度不是一般的大,從中國在架構上做出的貢獻在世界上分量很少就可以看出。

三、 系統移植作用

隨著各種晶片技術的發展,各種嵌入式產品也如雨後春筍一般地出現了。目前,嵌入式產品套用領域涉及移動通信、汽車、醫療、家電等很多領域。而且,如今的嵌入式硬體的速度和容量越來越接近於PC,因此在這些嵌入式產品上運行作業系統就成為了可能。一直以來,很多企業花費了巨大成本研發了大量運行在PC上的軟體產品。如果將這些優秀的軟體套用在嵌入式系統中,將會成為快速開發嵌入式系統,降低嵌入式產品開發成本,提高軟體穩定性和安全性的重要途徑。

四、 就業領域

嵌入式開發的門檻相對較高,對程式設計師的要求一般都是對底層感興趣,學習能力、動手能力要強,對問題能夠從全局和細節去把握,有很強的系統分析和設計能力。從工程師起步,一般有幾個發展方向,一個是成為技術方面的核心,領域內的專家;另一個是從項目中鍛鍊起來,成為項目主管或是管理型人才;再有就是利用自己的技術及行業經驗去創業。

硬體和軟體的發展方向是不同的。說說軟體需要學習的知識。

雖然說搞嵌入式軟體更多時候是在實際的工作中學習的,但一些重要的基礎知識不可或缺。

1. 計算機組成/微機原理

主要是為了了解微型計算機的硬體工作原理,明白CPU、匯流排、I/O、存儲器等一些關鍵結構是怎么工作的,雖然是很枯燥的知識,但是對熟悉外圍設備硬體工作方式,及作業系統,軟體架構的設計及最佳化相當關鍵。

2. 作業系統

嵌入式產品套用比較廣泛的是Linux和WinCE。但作業系統的內部設計原理都是殊途同歸。首先要去學習的是作業系統原理,去了解進程通信、記憶體管理、檔案系統等幾個重要的部分,因為這些在軟體開發尤其是核心驅動開發時會用到。接下來可以去熟悉至少一種主流的作業系統,Linux是一個很好的選擇,去了解它的核心架構,設備驅動架構,如何去編譯,裁剪,編寫應用程式,以及如何使用在具體的嵌入式產品上。

3. 數字電路

學習這方面的知識主要是了解一些基本的電路知識,如門電路、邏輯電路、存儲器、暫存器,為了更好的理解嵌入式晶片,存儲器,外圍設備等硬體的設計,但往往在軟體開發中未必能用的到。因為大部分硬體都提供了很完整的軟體接口。

4. 程式語言:C語言和彙編

對於C語言本身的基礎來說,無非是把結構化,函式,數組,指針弄熟,但是嵌入式開發對C語言套用的要求會更高。要對記憶體分配,檔案訪問,暫存器訪問,預處理指令,中斷處理程式等等相當熟悉,這些都是在使用中要注意的細節問題。C語言對程式的最佳化也很重要,而這些往往是需要從全局去考慮。彙編一般是和處理器的指令集相關的,可以更好的去理解處理器的工作原理,往往是用在一些需要效率的地方,如系統的初始化。

5. 數據結構和算法

數據結構在嵌入式開發中也很重要,比如說作業系統里的很多實現都用到了具體的算法。基本的數據結構需要掌握,如各種鍊表,樹,圖等等;而算法的學習需要數學知識作為鋪墊,用計算機語言去實現。對於軟體從業人員來說,算法終究是一個工具,在實際套用時再深入挖掘也可。

6. 軟體工程/軟體測試/項目管理基礎

這些是軟體開發人員的必備知識。

7. 開發平台

嵌入式的開發平台不局限於一種作業系統,因此要熟悉各種作業系統下的命令、編輯器及開發工具,這一點往往被很多人忽視。舉個例子,Linux下的程式設計師開發環境往往是按自己的習慣搭建,熟練掌握一種編輯器如Vim/Emacs可以大幅度提高工作效率。磨刀不誤砍柴工。

嵌入式領域的方向是很多的,它所套用到的行業範圍也很廣。因此除了這些基礎的知識以外,在具體的套用中可能還需要一些其它的知識,這些知識的每一種都可以研究的很深,舉幾個例子。

1. 核心,驅動及中間件

核心開發和驅動本身就是一個方向,驅動和硬體接口相關,而核心的修改和移植更是需要對OS有很深的理解。至於中間件,一般是基於OS或存在於OS和應用程式之間的庫,最典型的就是基於Linux的Android。

2. 通信協定

通信協定有很多種,經常用到的有網路通信協定,無線通信協定,串口/USB通信協定等等。

3. 音視頻技術

牽涉到音頻視頻處理,壓縮,編解碼等等。

4. 信息安全

如加密技術,身份認證,數字證書等等。

5. 行業知識

和具體行業或領域相關的知識,如通訊、工控、電子等等

五、 學習心得

本學期對於Linux系統的學習,讓我對Linux有了一定的了解。我知道了Linux只是個核心。現在的Linux作業系統,都是用這么一個核心,加上其它的應用程式構成的。Linux最大的特點就是其開源性,這一點是十分難得的,這也是它能夠存在到現在的原因之一,使其在金融、安全等部門有很重要的套用。 學習Linux,首先我們應該從基礎開始學起。對Linux作業系統的功能、版本、特點,以及Linux系統安裝和圖形環境有較全面的了解。

Linux命令是必須學習的。雖然Linux桌面套用發展很快,但是命令在Linux中依然有很強的生命力。Linux是一個命令行組成的作業系統,精髓在命令行,學習如何在安全的環境中執行系統命令,包括有關檔案、目錄、檔案系統、進程等概念,如何使用相應的命令對檔案、目錄、進程等進行管理,了解遇到問題時,如何找到幫助信息等。Linux常用命令,有echo 命令、date命令、passwd命令、file命令、ls命令、touch命令等。 要明白學好Linux不是一件一蹴而就的事,一定要能堅持使用它,特別是在學習初期。要增加自己的Linux技能,只有通過實踐來實現。只要多動手,就一定會有收穫。遇到問題時要自己去尋找答案,在尋找答案的過程中,會學到更多知識。 應該說目前我們對於Linux的學習只是入門而已,學習Linux是一個長期的過程,很耗時間。作為電子信息工程專業的學生,對我們來說,Linux將來主要套用於嵌入式Linux系統的開發,這非一日之功,我們還需要不斷深入地學習它。