三、驅動:
驅動包含兩部分:硬體本身的操作、驅動程式的框架。
又是硬體,還是要看得懂原理圖、讀得懂晶元手冊,多練吧。
說到驅動框架,有一些書介紹一下。ldd3,即,老外寫的那本,裡面介紹了不少概念,值得一讀。但是,它的作用
也就限於介紹概念了。我基本上是入門之前用它來熟悉一下概念,入門後就扔掉了。
驅動方面比較全的介紹,應該是宋寶華的了,老實說我只看過目錄,有不少人說好,這裡推薦一下。
要想深入了解某一塊,絕對是超5星級推薦。你別指望把它讀完,1800多頁,上下兩冊呢。我是某一塊不清楚
時,就去翻一下它。任何一部分,這書都可以講上2、3百頁,非常詳細。並且是以某個目標來帶你分析核心原始碼。它以linux 2.4為例,
但是原理相通,同樣適用於其它版本的linux。
把你手上的開發板所涉及的硬體,都去嘗試寫乙個驅動吧。有問題就先"痛苦地思考",思考的過程中你會把很多不相關的知識
串聯起來,最終貫通。
四、根檔案系統:
大家有沒有想過這2個問題:
1. 對於linux做出來的產品,有些用作監控、有些做手機、有些做平板。那麼核心啟動後,掛載根檔案系統後,應該啟動哪乙個應用程式呢?
答:核心不知道也不管應該啟動哪乙個使用者程式。它只啟動init這乙個應用程式,它對應/sbin/init。
顯然,這個應用程式就要讀取配置檔案,根據配置檔案去啟動使用者程式(監控、手冊介面、平板介面等等)
這個問題提示我們,檔案系統的內容是有一些約定的,比如要有/sbin/init,要有配置檔案
2. 你寫的hello,world程式,有沒有想過裡面用到的printf是誰實現的?
答:這個函式不是你實現的,是庫函式實現的。它執行時,得找到庫。
這個問題提示我們,檔案系統裡還要有庫。
簡單的自問自答到這裡,要想深入了解,可以看一下busybox的init.c,就可以知道init程序做的事情了。
當然,也可以看< linux>裡構建根檔案系統那章。
說一下我的學習經歷吧。
1. 我在學校時讀的是物理電子專業,其實課程裡沒有教怎麼設計電路,只是教了些電子電路方面的知識。pcb的設計
是在實驗室裡自學的,只設計過2層板,現在忘記得差不多了。但是保留了看原理圖、看晶元手冊的能力。
2. 選修了軟體學位,對軟體設計挺感興趣,但是也只是學了c語言、資料庫而已。憑著興趣做了不少競賽題。沒能力去
參加競賽,但是把c語言練得很紮實。
3. 在實驗室、在第1家公司,就是設計些簡單的pci卡,寫一下windows的驅動程式
4. 在第2家公司,用51微控制器做車載**,開始走上純軟體的道路。
5. 開始感到微控制器的不足,辭職半年閉門學linux,從red hat怎麼操作開始。步驟就是先看,
再自己寫裸板程式操作硬體,接著到分析u-boot。同時看,對linux框架有所了解。
在寫裸板時,建議各位加強對中斷的理解,核心就是用中斷來完成各種功能的。
6. 分析完u-boot,就開始進行簡單的驅動程式設計了,這時候,能力還很弱。
7. 開始去中興上班,工作2年,編寫各類驅動、解決各類問題(驅動問題、幫助定位應用問題),能力得到煅煉。
作為乙個新人,怎樣學習嵌入式Linux? 韋東山)
這篇文章是引用韋老師的部分關於新人怎麼學習嵌入式linux的經驗,引用如下 1.電腦一開機,那些介面是誰顯示的?是bios,它做什麼?一些自檢,然後從硬碟上讀入windows,並啟動它。答 這個函式不是你實現的,是庫函式實現的。它執行時,得找到庫。這個問題提示我們,檔案系統裡還要有庫。簡單的自問自答...
開乙個嵌入式學習的坑
2.3版本的stm32f10x dfp與5.15版本的mdk並不相容,開始新建專案會有message函式沒辦法正常讀取的問題。有前輩說將keil.stm32f1xx dfp.pdsc中的message函式注釋掉會解決,親測無效,有可能是別的原因。在解除安裝舊版本的mdk時,原本的韌體包不會被解除安裝...
乙個嵌入式的成長
記得那是 2006 年的第一場雪,比 2005 年來的稍晚了些。在 2006 年初,我們公司開始涉及嵌入式領域,其實就是開始涉及基於 arm的嵌入式式開發。原來一直搞微控制器開發,上大學時幫助老師調點 pic的微控制器程式這樣的經歷使我積累了點關於硬體的經驗。當時國內的嵌入式式開發還幹幹起步,基本上...