本節結合迅為的 iTOP-4412 開發板來介紹一下嵌入式技術的學習步驟。 大家都知道,嵌入式技術的知識面非常廣,學起來往往不知道如何下手,我們通過這一小節給大家闡述一下嵌入式技術應該從哪里開始學起,以及按照什么樣的步驟深入下去,最后順利入門,成為一個合格的嵌入式工程師。 這節的教程很重要,希望通過這次的講解能起到提綱挈領的作用,讓大家能夠在大量的學習資料中有一個比較清晰的學習脈絡。 前面已經介紹過,嵌入式系統的學習方法,首先要掌握架構,那么什么是架構呢,這里再強調一遍,那就是要搞清楚幾個概念:弄明白什么是 BootLoadre 引導程序,什么是 Linux 操作系統內核 Kernel,什么是文件系統。這個很重要,如果搞不明白,直接去學其他的內容,學起來就比較迷糊,實際上是在走彎路,這里推薦大家首先要看一篇文章,也就是迅為用戶QQ 群的一個聊天記錄:《澄清幾個基本概念-迅為 QQ 群聊天記錄》,這個文件在迅為 QQ群的共享里有,在網盤里也有提供,大家可以去研讀一下。 相信大家看了這個對話以后,就應該明白 u-boot、Kernel 和文件系統這幾個文件的作用和意義。接下來大多數工作都是圍繞這幾個文件展開的,比如編譯環境的搭建, 源代碼的編譯和燒寫, 應用程序和驅動程序的編程等等,就是說這幾個文件是貫穿我們整個嵌入式學習的始終的。把這幾個文件搞明白了,后面的學習也就有了目標,所以說搞明白這幾個文件的含義非常重要。 接下來需要我們做的是搭建編譯環境,在教程里建議大家安裝 64 位的 WIN7 系統,并且在 WIN7 或者 WIN10 系統上安裝虛擬機,然后在虛擬機上再安裝 ubuntu。這里需要說明的是,大家在初學的時候要盡量按照教程里的方法一步步的來,這樣學習的效率比較高,如果你使用 XP 系統或者 WIN8 系統不是說不行,但是在安裝和編譯過程可能遇到很多別人沒有遇到的問題,解決起來就比較麻煩,所以在可能的情況下一定要按照手冊的要求來做,尤其是初學者;當然大家熟練以后可以去做下創新,做不同的嘗試。 安裝編譯環境是個很費事的過程,雖然說沒有太多的技術含量,但是在這個過程中也要客服很多困難,開源系統就是這樣,時常會遇到一些這樣那樣的問題,很多時候是不可預測的,或許大家會覺得安裝系統是浪費時間很困惑,其實這個過程也是很重要的,中間要學習很多的知識,只要大家不怕折騰,這些過程當中的困難都是可以克服的,迅為公司為了讓大家少走彎路,已經把安裝步驟做了很大程度的簡化,比如已經做好了虛擬機的 ubuntu 鏡像,直接拷貝進去就可以使用了。 開發環境搭建起來以后,這個時候可以學習一下對源碼進行編譯,同時也可以學習一下燒寫,一步步按照教程去做就可以了。再次強調一下,所有這些工作都是圍繞我們前面所講的那三個文件進行的,也就是 Uboot, Kernel 和文件系統。 系統的編譯和燒寫都是依賴于這個開發環境的,也就是必須在虛擬機上安裝好 ubuntu, 并且把源代碼從光盤中拷貝到 ubuntu 的環境下面,只要按照教程的提示往下做就可以了。 在熟練掌握系統的編譯和燒寫以后,就可以進一步開始嵌入式開發了,那么這個時候建議先學習一下 Linux 應用程序的設計,也就是按照教程開始逐步深入。 這個時候要按照網盤里的‘iTOP-4412 開發板視頻教程及其相關’里的‘嵌入式 linux 視 頻’進行學習。 大家在初學的時候,還是要按照這個實驗的順序來走一遍,這里強調兩個方面,來幫助大家理解: 一、第一個實驗也就是第 0 個,是制作 linux 的最小系統,那么什么是最小系統呢,就是Linux 運行的時候能跑的起來的最小系統,也就是說我們在文件系統當中把圖形系統的內容從這個文件系統里面砍掉了;在很多設備里面,比如說路由器,或者一些通訊類或者控制類的產品中是不需要圖形界面的,這樣我們就可以做一個簡化的 Linux 文件系統,這時候最小系統的設計就排上用場了。 二、這些實驗都是通過燒寫文件系統的方式來測試的,其實有一種比較簡單和實用的方 法,那就是通過網絡文件系統來進行(NFS),至于什么是 NFS,以及如何搭建,大家一定要 學習一下,具體可以參考第 12 個試驗,就是‘實驗 12’,因為將來我們調試應用程序或者驅動都是要通過這個手段來進行的,它是公認的比較好用的調試辦法。也就是說我們這些實驗回過頭來,都是可以通過 NFS 來進行調試的,這時候就不用每次燒寫,整個調試工作變得更容易,在實際的 Linux 調試中,多數是通過這種方式來進行的。 所以說大家一定要學會 NFS 的調試方法。 學完 Linux 的應用程序設計,接著應該學習一下 Linux 驅動方面的編程了。Linux 驅動程序全部掌握是非常困難的,但是要明確我們的目標是能利用 Linux 這個操作系統來開發產品。大家都知道,Linux 的驅動分為網絡設備驅動、塊設備驅動以及字符類設備驅動,如前面所述,我們只需要把字符類設備的驅動掌握好就可以了。 因為在開發產品的時候,網絡設備以及塊設備驅動在開發套件里都是做好的,直接用就可以了,幾乎沒有人從頭去做,就算開發不同的網絡接口驅動,也是直接把現成寫好的驅動拿來直接調試一下。所以說塊設備和網絡設備不需要我們去太多關注,但是對于字符類設備驅動就需要我們仔細研究并且完全掌握了,那么最基本的字符類驅動就是針對 GPIO 的驅動設計,這個是一定要掌握的。比如我們的產品增加一個步進電機,驅動幾個開關、繼電器、采集電流電壓模擬量、擴展并對外部 RAM 內存數據的讀取等等,都是基本的字符類的驅動,至于RFID、GPS 模塊、GPRS 模塊、CAN 總線等等實際都是利用 Linux 本身已經做好的驅動,歸根到底是使用串口、I2C 以及 SPI 等來實現的,很多開發并不需要我們做什么。對于網絡設備,只需要在上層做個應用程序,用 SOCKET 來實現數據通訊就可以了。 那么在學習這部分內容之前呢,建議大家讀一下另一個聊天記錄:‘Linux 驅動初探_精 英版 QQ 群聊天記錄.doc’,這個文檔會對大家理解驅動的架構很有好處。 那么我們前面說到了,應用程序的調試要通過 NFS 來進行,驅動也是這樣的,而且要學會用模塊的方法來調試驅動。 我們在 Android 的視頻中比較詳細的介紹了 Linux 的底層如何構建 LED 的驅動程序。除此之外呢,我們會在補充文檔里面跟大家說明如何使用模塊,也就是 module 的方法來調試驅動程序。掌握這些方法是很重要的。也就是說大家一定要掌握通過 module 的方法動態加載和卸載驅動來調試驅動程序。 當大家熟練學會了以上強調的 Linux 系統的開發技術,我想大家對 Linux 的體系有了基本的了解,這個時候其實已經算是入門了,也就是說可以嘗試去做一些產品,并不是說我們對Linux 的源碼分析一遍才能真正做事情,不是那樣的,我們的目標是做產品,學會利用 Linux這個操作系統,開發出目標產品! ![]() |