牛人的linux學習四部曲

作爲一個菜鳥,整天網上查找學習linux的方法和書籍是一件非常痛苦的事,難得身邊能有高人指點一二,對此,希望和這樣的菜鳥們一起分享下一個很好的linux學習方法。

       一.新手上路

    這一菜鳥階段最大的問題是如何正確安裝一個linux發行版,linux作爲開源的系統,甚至可以說是衆多GNU軟件的展示平臺,相對由商業公司發行的WINDOWS,存在許多不同發行版。這裏先說明下我所理解的linux系統,它是由linux kernel + 運行環境 + shell組成, shell作爲用戶與kernel交互的載體,運行環境由libc以及衆多開源庫組成, 庫之間往往存在調用問題,就產生庫依賴問題,在進行系統發佈時就需要解決軟件安裝過程中的庫依賴問題,這就產生了包管理器,常見的有Portage,dpkg(包裝而成的apt-get),pacman,yun等,各有優點,在此不詳細說明。對新手而言我個人的建議是使用ubuntu發行版,軟件相對完整,系統安裝過程簡單,軟件安裝方便,缺點就是系統較臃腫,不過這不是新手需要糾結的。在不放心的情況下可以先虛擬機中安裝練習,熟悉後在轉爲實機,這階段主要掌握linux常用的方式的,如命令行的使用,寫一些簡單的shell腳本。

這一階段的讀物有《鳥哥的linux私房菜》

 

    二.老鳥

    在已經習慣linux的使用方式後,會有一些自己的改進的需求或者使用需求,需要安裝一些系統服務,如TFT服務器,APACHE服務器,SQL數據庫等,這時候甚至需要構建最小系統,就要對linux的庫組合進行研究,LFS在這方面提供了很好的素材,對於穩定性以及相關軟件版本要求比較高的可以根據LFS BOOK搭建適合自己的最小系統,當然ARCH以及GENTOO也很適合,如果對於軟件沒有代碼級別的定製需求ARCH更快速。而對於要在linux上進行軟件開發的人來說,相對WINDOWS而言IDE的匱乏是個比較頭疼的問題,這主要是C/C++開發,EMACS/VIM熟練使用後,其實也是挺好的選擇。JAVA在這方面就沒有困惑了.

    Android的發展對於linux的推廣無疑起到了巨大的作用,而Android 提供的JAVA編程方式確是卻對應用速度的挑戰,以及JAVA語言本身無法直接操作系統底層接口的短處,而通過JAVA的JNI技術,JAVA很好的嫁接到了系統底層,這給了linux應用開發帶來新的春天,從linuxPC 到ANDROID 手機基本可以做到代碼級別的無縫切換。在實現一些android系統本身不提供的功能時,就可以將目光方向衆多優秀的linux開源庫,只要進行簡單的移植,主要是編譯方式的移植。這方面在之前的工作中,在分析功能需求時,會對着gentoo提供的一些依賴文件上,尋找一些自己需要的開源庫。

    這期間強化了自己的C的語言相關的瞭解,主要是編譯,鏈接,執行。

    這一階段主要讀物有《unix環境高級編程》《linux編程白皮書》《unix編程藝術》參考:linux學習的核心書籍

    三.linux driver學習與開發

在熟練使用linux提供的各種底層API後,開始對系統的底層實現感到好奇,進而開始學習內核編程,這方面本人的經歷是,先從舊的內核學起,主要學習是趙炯博士《linux內核完全刨析-linux 0.11》,主要是對內核有基本的瞭解,繼而開始實踐,在PC上對照着《linux設備驅動開發3》進行簡單練習,學習一些概念對應的代碼以及操作方式,這類驅動都是基於內存的驅動,中間換了一份設備驅動開發的工作,正式踏上嵌入式這條不歸路。換工作後,開始有機會在實際的板子上進行練習,主要參考宋寶華《linux設備驅動開發詳解》,理解了一些電器原理,以及各種接口協議,這一階段主調試經驗的積累,以及對kernel各種API的使用。

 

    四 linux kernel學習

    瞭解了內核中驅動模塊的編寫與調試後,對其中涉及的API進行研究,這個階段比較吃力,痛苦的根源來自基礎理論不紮實,中間各種中斷,去補習操作系統的理論知識,

    這階段要持續很長時間,在路上。。。。

 

轉載地址:http://bbs.mcuol.com/

發佈了17 篇原創文章 · 獲贊 17 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章