1. 程式人生 > >關於如何學習嵌入式linux

關於如何學習嵌入式linux

           首先感謝powerful1大神關於如何學好嵌入式linux的介紹!

        Linux和stm32 一個是軟體平臺一個是硬體平臺,完全不一樣的(記住,是平臺!)。這樣說吧,既然你喜歡微控制器,就先學stm32,把硬體基礎打牢,尤其是各種匯流排(usb、iic、spi...)、各種外設模組(紅外、溫溼、mpu6050...),然後就把注意力集中到ucosii上,也就是說學會把你的任務放到作業系統這個架構裡完成,而不是簡單地寫程式--對作業系統機制的掌握是你和周圍的微控制器同事拉開距離的關鍵;在這過程中你要理解OS的精髓,建議你這個時候看下《作業系統原理》。
然後你就可以接觸ARM了(為什麼接著不是linux呢?等會告訴你)。你可以買個友善之臂或者飛霖的s3c2440開發板(算不算廣告啊?),要不買個A8的板子也行,都是500元左右。開始學ARM時無非就是裸板程式,用匯編和C控制cpu內部的暫存器,從而控制外設,和STM32差不多的。當你學會控制開發板的外設後,恭喜你進入嵌入式Linux的大門!


這個時候,你需要深入精通C語言了,注意是精通GNU C。什麼叫精通GNU C呢?你得知道GNU C和ANSI C的區別,知道一段C程式碼執行時在SDRAM中佈局,知道指標的靈活用法,知道如何用面向過程的C實現面向物件思想的方法... 你需要至少看三本C語言的書(國產的除外)外加若干博文。前提是你在Linux裡寫程式碼。你可以裝個ubuntu,學會設定環境變數、學會用vim,用gcc編譯、學會用gdb除錯,建議你看下《鳥哥的Linux私房菜》。
精通C後,你可以開始學習Linux系統程式設計了,多程序、多執行緒、socket程式設計什麼的。建議從《Unix高階環境程式設計》開始,然後看看《...IPC》《UNIX網路程式設計》... 每一部分就是一本書 !這之中最重要是 多程序/多執行緒對共享變數的併發控制機制,和socket程式設計--切記一定要把它們學好!!!當你把這些學完後,也就一年多的時間,你就會愛上Linux了。

最後,你研究下uboot、Linux核心剪裁,檔案系統製作什麼的。這個時候,你前面學的C和Linux系統程式設計已經和你的ARM板發生聯絡了。
最最後,如何你依然深愛硬體。你可以向嵌入式Linux驅動開發方向發展,你之前在stm32上積累的硬體基礎這時就派上用場了。從Linux裝置模型、核心模組,到字元裝置驅動、塊裝置驅動、網路裝置驅動,養成用source insight看Linux核心原始碼的習慣--隨便回想下當年學的ucosii。建議你看《LDD3》和宋的《Linux裝置驅動程式詳解》。這個過程需要兩年的時間。
  最最最後,你會發現stm32、s5pv210、ucosii、linux都叫嵌入式系統。

ps:
還有不要相信很多產品不用Linux,沒走進Linux的世界不會明白Linux有多麼美。但是不要把Linux當你的終極目標,就像當初不把ucosii當終極目標一樣,使用作業系統機制解決複雜問題的策略才是你整個職業生涯應都應當關注的--連z-stack協議棧都採用了作業系統抽象層(OSAL)機制了--關於這一點只可意會,不可言傳。有空看下《Unix設計哲學》。大家一起學習交流。