一、總體說明
提到嵌入式的概念,一時間腦容量已經容納不下,轉到驅動的設計剛剛好,習慣將一件事分層次去做,驅動設計亦是如此,很多人做工程時因為項目的時間緊張,直接想到如何去實現(xiàn),甚至直接跳到工具上去,學習編程語言。時常將做一個工程比作建一座大廈,有了圖紙,有了地基才可以建造更漂亮更完美的建筑,如果開始就去關注一個鍬,一個蓋樓的機器,一磚一瓦的樣子,可能建造出來的早已不是自己想要的樣子。這里本人想就嵌入式驅動設計,以what、why和how搭建出,嵌入式驅動設計的簡單藍圖,給出嵌入式驅動設計的“圖紙”,“大廈”的 “一磚一瓦”留給每個想要建造這個“大廈”的人去設計。
二、什么是驅動(what 驅動概念)?
一個沒接觸過嵌入式底層設計的人員可能會對驅動的概念比較模糊,它是什么?以什么形式存在?什么作用?個人的理解,驅動是一種軟件,這個軟件一方面可以直接與CPU、各種總線和外設進行交互,讓這些板上的硬件組成單元活躍起來,另一方面,它還與操作系統(tǒng)和應用程序聯(lián)系,將自己對外的接口嵌入到系統(tǒng)或者應用程序中,當業(yè)務需要某一個外設參與時,它就開始活躍了,聽從上層的指令,并將旨意傳達到硬件資源,讓硬件工作。簡而言之,所謂驅動,驅而動之,以“主”之意,驅使硬件“動”起來。
三、為什么做驅動(why 驅動存在的意義、地位)?
一般做工程時,應用程序關心的多數(shù)是協(xié)議和業(yè)務相關的調度,而不關心底層或者硬件的執(zhí)行過程,也沒有必要去關心硬件的執(zhí)行過程,驅動作為一個庫或者調度的接口即可,這時就需要驅動的存在,任何的業(yè)務都要有硬件的支撐,驅動的存在,可以將硬件的初始化,讀寫,配置等基本操作嵌入應用之中,于無聲之中操作硬件的執(zhí)行邏輯,使其工作起來。
嵌入式驅動在其體系中所處的位置示意
四、怎么實現(xiàn)驅動設計(how 驅動設計的過程)?
這是本人對于一個板卡的硬件資源抽象,驅動,驅而動之的外設,一般分為兩類,一類藏于CPU之內,稱為片上外設。另一類存在于板卡之上,CPU之外,叫接口芯片,或者板級外設(個人叫法)。如何實現(xiàn)驅動設計,最簡單的是首先進入CPU內部,先搞定CPU的內核,指令集,幸好這一步有每個平臺開發(fā)軟件做了(編譯器),然后搞定CPU組成架構,總線和片上外設都有什么,然后找到每個外設的基本協(xié)議,至少知道它是如何工作的,然后找到這個CPU的開發(fā)平臺,找到它的開發(fā)語言,比如:C語言,找到官方提供的簡單測試程序。學習并二次開發(fā)(當然可以完全自己來),搞定CPU之后,這個板子的心臟就跳起來了,下一步找到每一個板級外設的資料(datasheet),搞定其初始化,讀寫操作邏輯,利用掌握的語言和開發(fā)環(huán)境,利用固定的通信接口搞定板級外設。做到這一步之后驅動就基本搭建起來了,之后的事就是每個“屋子”的裝修問題,問住這個屋子的人需要什么樣的風格,按照其意愿,完成這個“大廈”每一個房間的裝修,到此“大廈”竣工