平時用單片機,對單片機很熟悉,但都是低端系統,電路印製板什麼的都有經驗。對嵌入式LINUX不知道該從哪裡入手


微信公眾號:二進位人生 專註於嵌入式linux開發。

本文持續更新,第一版先面世,轉發請保留出處:二進位人生。這個學習路線是遵照大多數人的認知規律來的。

第一階段

1.1 C語言入門

入門選一本簡單的、薄一點、不要出錯的書就可以了,例如譚浩強老爺子的書,選太厚的容易打擊你的信心和學習興趣,譚老爺子的書雖然被很多人噴,但對於初學者來說還是比較合適的。在入門之後才建議去看C語言的經典教程:

《C Primer Plus》

這本書比較厚,知識點比較全,可以用於查漏補缺。

《C程序設計語言》(The C Programming Language)黑皮書這本書雖然經典,但是我個人覺得不適合初學者去看,個人看來這本書更像是在敘述C語言的標準,所以講得比較精鍊,初學者是看不懂的。

項目實戰

學完C語言之後可以嘗試寫一個無界面的學生成績管理系統、圖書管理系統。我大學時C語言的課設就是寫一個學生成績管理系統。

1.2 基本的數據結構

單向鏈表、雙向鏈表、循環隊列、循環緩衝區、簡單的二叉樹、哈希表

1.3 學會使用linux操作系統

掌握基本的linux命令,ubuntu(或者其他發行版本)操作系統的使用。

1.4 計算機網路基礎

  • tcp/ip網路模型、osi參考模型
  • 著重掌握tcp、http、udp、ip協議
  • 學會使用抓包工具,結合fiddle工具、wireshark等抓包工具學習網路協議。

推薦謝稀仁《計算機網路》這本書,經典的計算機網路教科書。

第二階段

2.1精通C語言

想要精通C語言並不容易,沒有一兩年的磨練難談精通。

推薦書籍:

  • 《C專家編程》
  • 《C與指針》
  • 《C陷阱》
  • 《C程序設計語言》(The C Programming Language)黑皮書C語言的難點在於指針和數組,前面三本書大部分的章節都是圍繞這兩點展開。

    《C程序設計語言》是由C語言的設計者Dennis M. Ritchie和著名計算機科學家Brian W. Kernighan編寫的一部介紹標準C語言及其程序設計方法的權威性經典著作。整本書有種提綱挈領的感覺,適合在學完C語言之後再來慢慢品讀,這本書很簡練,廢話很少,可以看成是一種標準。

2.2 最好掌握C++(不是必須,但推薦)

有了C語言的基礎,學習C語言是非常容易的,難點在於從面向過程到面向對象編程的轉變,掌握面向對象的設計規則和設計思想

入門書籍:

  • 《C++ Primer Plus》
  • 《C++ Primer》

C++進階書籍:

  • 《C++沉思錄》
  • 《Effictive C++》
  • 《More Effictive C++》
  • 《深度探索C++對象模型》
  • ...

2.3 掌握linux C和嵌入式C(linux應用程序開發)

學習上層的嵌入式linux應用程序開發和編譯調試(gcc、gdb的使用)。

核心:多進程、多線程、網路編程

《UNIX環境高級編程》

《UNIX網路編程》

練手項目

  • 實現一個最基本的tcp伺服器/客戶端程序
  • 實現一個簡單的http伺服器
  • 實現一個多人聊天室
  • 實現一個多任務線程池
  • 實現一個web伺服器多進程並發測試工具

2.4 shell腳本

《linux命令行於shell腳本編程大全》

《linux shell腳本攻略》

其實也不用看書,找個系統的知識網站或者博客看下,比如菜鳥教程,再動手寫下也可以。

2.5 Makefile語法

推薦 陳皓的系列文章,自行百度。

2.6 學習arm

認識arm體系結構

掌握基本的arm彙編

2.7 嵌入式系統的構建

建議買一個開發板

理解交叉編譯

ssh、telnet等工具的使用

samba伺服器搭建

nfs文件系統掛載

kernel裁剪、編譯、燒寫。

基本的uboot命令、uboot編譯燒寫、嘗試自己添加一個uboot命令。

文件系統製作、裁剪、燒寫(busybox使用)。

第三階段

3.1 學習內核

從事應用層、驅動層的都應深入學習內核,驅動層的工作對於內核的要求更高一些。

三大主題:

  • 進程管理與調用進程、線程
  • 內存管理進程的內存佈局
  • 文件系統

推薦書籍:
  • 《深入理解Linux內核》(第三版)
  • 《Linux內核源代碼情景分析》

3.2 操作系統原理

很多的高校把這個課放在了大一來教,個人覺得在沒有編程基礎和學習linux操作系統之前來學習操作系統原理,有點枯燥和難以理解,很多的知識點不能引起學生的共鳴。按照很多人的學習路線,也是在有了一定的開發經驗之後才來彌補操作系統的知識。

  • 《深入理解計算機系統》
  • 《操作系統概念》

    這個屬於內功心法,學了和沒學的人在認知上是不一樣的,學完操作系統原理,看待問題能夠看得透徹一些。譬如,老生常談進程和線程的概念,每一個人能講出的深度都是不一樣的。

3.3 學習行業相關的東西(稀缺人才)

到了這個階段,你需要學習行業相關的東西,這取決於你想從事的行業,

  • 流媒體 ---- rtsp、rtmp、onvif等協議
  • 路由器 ---- 網路協議
  • 機器人 ---- 實時操作系統
  • android
  • Qt
  • 底層驅動開發
  • ....

3.4 終生學習

學習是一生的事情,技術永遠學不完,保持終生學習的態度才能不被社會所淘汰!


深夜碼字不易,喜歡的點個贊,關注我的微信公眾號:二進位人生,是對我最大的支持。加入我的知識分享圈,我將致力於嵌入式linux知識的分享

每天進步一點點......

http://weixin.qq.com/r/pR2bg_7EAbN_rarg90i3 (二維碼自動識別)


學習liunx,應該先了解一下你要從事的方向,比如最近培訓用的比較多的是4412開發板,這塊開發板比較適合開發安卓系統,嵌入式方向還是比較廣的,方向要確定好,另外c語言,數據結構等理論應該有所基礎,如果從事應用方面可以考慮學習c++,如果底層驅動,要有紮實的硬體理論基礎,比如模電等。最後linux學習,開發板是少不了的,把開發板裡面的例成多研究幾遍,至少一遍是不夠的,不用去學習特別多的比較雜的知識。我說的都是嵌入式linux,如果你單純只對Linux系統有興趣,可以下個虛擬機暗轉Linux系統研究。


看到某位大神回答的發的那麼多書,我相信小白已經快崩潰了,基本就放棄了,你看下我這個帖子裏說的Linux驅動這塊的學習路線圖吧,希望對你有用。

請問只掌握linux能找到工作嗎??

www.zhihu.com圖標

首先裝一個linux系統或者虛擬機,先熟悉一下在linux系統上的操作方法,熟悉一下命令和常用的工具,例如vim等,其實嵌入式linux和PC上的linux是差不多的,就是運行的平臺不一樣。這樣就對linux操作有了大體瞭解了,如果對C語言有基礎的話,可以在linux下學習寫一些程序,等你學會寫程序了,移植到嵌入式上無非就是把你現有的程序交叉編譯一下就可以在嵌入式linux下運行了。到這也就說你可以在嵌入式linux下寫應用程序了,再下一步看看你想再怎麼走,學習驅動還是想幹點別的,相信你在學習前邊那些東西的過程中已經對嵌入式linux的瞭解更深了一些,自己心中也就有答案了!


買個板子 先從基礎開始熟悉 虛擬機 燒錄程序 基本架構什麼的 根據自身情況決定學底層還是上層的編程吧


可以去慕課網看看 有免費視頻課


嵌入式linux 兩層含義

1.用linux操作系統進行交叉編譯代碼

2.設備或者開發板使用linux操作系統

對於第一點可以從linux操作系統搭建開發環境,學習linux操作命令

對於第二點,分應用層開發和內核開發,這個就博大精深了,看書吧,我是搞內核的,是通過需求慢慢了解linux內核,不過我覺得都是c語言知識與業務的結合,業務是指應用層可能不通用,內核的業務比如網路/內存/調度/驅動...每一個都不簡單

所以熟練使用c語言是根本,業務用到去學


推薦閱讀:
相關文章