隨著智慧型手機的飛躍發展,特別是Android智慧型機的爆炸性發展,Android驅動工程師是越來越受歡迎的職位,而且是一個非常值得人期待的職位,因為可能你參與研發的一款手機就能改變了很多人的生活,所以,進階吧,Android驅動程式猿,那怎樣成為一名優秀的Android驅動程式猿,我來發表一下我的意見吧,希望各位網友不要輕易拍磚。
Android驅動的基礎知識
首先作為Android驅動程式猿,你必須清楚的了解你要做的是什麼,平時需要用到的基礎知識,對Android的基本框架的了解還是非常的有必要,對linux下的程式設計基礎也需要了解,因為嚴格來說,Android驅動是基於Linux驅動,個人強烈推薦閱讀Linux Device Driver 3rd版,這本書講了Linux下設備驅動的基礎知識,作為Android驅動程式猿,你需要能最好讀懂這本書,而且是反覆的閱讀這本書,因為我發現每次重新讀這本書,都有新的收穫,這本書很值得一讀,強烈五星級推薦;而且還要會基本的C編程,能很好的讀懂和編寫一些C程序,而且懂一些基礎的Java那就更好了,因為Framework層的代碼與驅動層的代碼聯繫也比較緊密,稍微懂一些Java代碼,你會發現你對整個驅動框架的了解會更加的熟悉,相關的Linux編譯腳本和Linux編譯體系,因為商業開發的一些原因,Android本身的文件架構體係可能會被一些編譯腳本而改變,加入新設備驅動,你需要了解整個的驅動編譯體系,那樣書寫驅動程式也會更加的清晰!
\
Android/Linux相關驅動程式框架知識
為詳細了解Android驅動程式設計師需要會的技術,我特意了各家Android驅動程式設計師招募需對Android程式猿的要,選擇哪幾家呢,國產手機的代表,中興,華為,酷派,聯想,小米,魅族,VIVO都是非常不錯的國產手機廠商,而且研發的Android智慧型手機越來越好,我甚至還專門去看了一下新興Android智慧型機公司,包括錘子手機官網的Android驅動工程師招聘需,One Plus One的官網連個加入我們的鏈接都木有,創業型的公司不知道是人才暫時飽和,還是啥原因,居然沒有招聘信息,匯總發現,這些公司要差異不是特別大,出了需要基本的Android調試能力,你還需要對Android各模組驅動框架的了解,比如,某錘科技的Android驅動工程師招聘需,大夥可以去試試,錘子手機號稱是在做最好的手機,比目前的旗艦手機都要好一點點,加入它,還蠻有期待的! \ 某米公司的Android驅動工程師也需要Android/Linux相關的知識,中興和聯想的Android招聘需就比較籠統了,估計是大公司的緣故吧, \ 中興的官網居然開始找不到驅動工程師的招聘,我的個神,廢了我好大勁,才找到相關的招募資訊! \
相關的硬體知識與通訊知識
Android驅動平時工作就是調試各種外圍設備,是直接跟硬體打交道的職位,需要你看的懂電路原理圖,了解基本的顯示原理和基本的攝像頭成像原理等等,這是跟你平時工作非常相關的基礎知識,做Android智慧型手機,你也需要了解基本的通訊相關知識,射頻原理和基本的Modem相關知識,只有懂相關的硬體知識和通訊設備相關的基礎知識,你才可以寫出更好的Android驅動程序,才能調試出更滿意的效果!
熱愛驅動開發與不斷學習
其實這一點是非常的重要,應該擺在第一位,首先是你必須喜歡這份工作,你才可以做的更好,興趣是最好的老師,這句話是真心的大實話,而目前的社會狀態是什麼賺錢,就一窩蜂的衝去做那個,結果,最後可能做的很不開心,然後,錢也沒撈到;如今,我的大學同學很有一部分都放棄了所學的專業對口工作,有去賣保險的,有去工廠做普工的,有去做銷售的,有去吃鐵飯碗的,當然職業肯定不分貴賤好壞,我說這一點,主要是建議大家去堅持最初的夢想!我的夢想就是做出一款可以改變人們生活的行動終端,讓這個世界因為我而有一點點的不同,童鞋們,一起堅持夢想吧!此外,做Android驅動工程師需要的是不斷的學習,時刻保持著一股激情,不斷的學習才能更好的完成日常的驅動開發任務,並能保持對開發的的敏銳感覺,我覺得喬布斯的:Stay hungry,Stay foolish說的很好,一直被當做是我的座右銘,來激勵我堅持做一個更好的Android驅動工程師,寫這篇博客的目的就是分享我的一些小看法,日後我還是會不斷更新我的博客,分享一些驅動開發相關的文檔和博客,和廣大的驅動程式猿一起進步!
你這個離得還太遠了,現在說核心驅動這些有些太早了,這個學習週期非常的長。
核心驅動程式設計並不是什麼高深的知識,無非也是按照系統的API,框架去做程式碼罷了,只是這些東西,提供了更接近於底層的功能,在某些情況下對程式的架構更加有利效率更高而已。沒有創新的東西是無所謂難度不難的,照葫蘆畫瓢而已。
從哪裡學起,基本路線 語言-》演算法-》框架機制&WINDOWS程式-》系統核心實作等。
下面說的一些內容都有一個共同的前提,就是不斷的去寫程式碼,調試程式碼,否則說什麼也是白搭的。我曾經一個作業系統的老師的一句話是「看了書叫你做,做不出來就是沒學懂」
第一階段:鑑於你現在已經提了一個方向了,那選擇的語言自然是C和C ,兩門都需要,現在WINDOWS內核是混合的,從這個角度來說也必須兩門都熟悉。相關書籍,國內的可以買譚浩強的C和C 書,比較簡短,適合上手,然後C PRIMER這種從C 的思想去講解C 的書也可以翻一翻。然後為了C和C 的基礎紮實一些,可以看例如EFFECTIVE C /MORE EFFECTIVE C /C語言陷阱等等類似的書,都是從語言的層面去解釋一些經驗和技巧,注意,這裡的內容沒有涉及一點點技術,只是最基本的語言基礎。
為了方便後面的學習,這個階段應該學習電腦的基礎課程,資料結構,電腦網絡,作業系統,資料庫原理,組成原理等等,甚至包括一些高等數學,離散數學的基礎。這個要視你的情況而定,非常重要,對進一步發展影響很大。
第二個階段:WINDOWS程序,熟悉WINDOWS程序的實作機制,例如訊息回應,事件處理這些都應該明白底層是如何實現的,而不只是知道一個概念而已。相關的包括WINDOWS SDK,MFC框架等,書籍有《WINDOWS程式設計》(微軟那本1300頁的書,雖然很厚,但這本無非是該領域的經典,當然國內的也有不少,但是都是寫的比較淺顯,很多地方一筆帶過),《深入淺出MFC》《VC技術內幕》等,這些都是講解MFC底層實現機制的書,比起教你如何去拖控件,更有實際價值。 >這是講解SOCKET的,其實這方面內容一般WINDOWS程序的書都有涉及,但是很多人還是不明白,為了熟悉一些,還是有必要看的。驅動程序,這個只是在WINDOWS的一個固定框架下去做,沒什麼大不了。
第三個階段:核心相關。由於WINDOWS不開源,所以沒有程式碼可以看,好的是現在又REACTOS這種仿WINDOWS的系統是開源的,可以看看程式碼的實現,熟悉作業系統是怎麼運作的。這些東西很多牽涉到了安全相關的機制,要靠自己去琢磨。
除此之外還應該明白編譯器如何編譯,鏈接器如何鏈接,操作系統如何加載文件,WINDOWS如何管理內存等等無數的相關知識,這些不會對你的程序造成直接價值,但是間接價值無限。在學習的過程中,應該要明白一些基本的解決問題方法,設計模式什麼的,這些東西才是真正的技術。我估計你要做點什麼研究很困難了,不過上面這些也夠了。
現在很多人一學習就要係統的學,但是你也要明白這樣的代價。前面進步很慢,學習週期很長,很難堅持。學到什麼程度?學會了能夠拿來用,做的出來說的出道理就可以繼續後面的學習了,別要用了幾年的NEW,還不知道NEW做了些什麼。
展開全部
1. 那麼究竟什麼是驅動程序,它有什麼用呢:#
##l 驅動程式是硬體設備與應用程式之間的一個中間軟體層l 它使得某個特定硬體能夠響應一個定義良好的內部編程接口,同時完全隱藏了設備的工作細節
l 使用者透過一組與特定裝置無關的標準化的呼叫來完成對應的操作
l 驅動程式的任務就是把這些標準化的系統呼叫映射到特定設備對於實際硬體的特定操作上
l 驅動程式是核心的一部分,可以使用中斷、DMA等操作
l 驅動程式在使用者狀態和核心狀態之間傳遞資料
2. Linux驅動的基本架構
#3. Linux下裝置驅動程式的一般可以分為以下三類
1) 字元裝置
a) 所有能夠像字節流一樣存取的設備都透過字元設備來實現
b) 它們被映射為檔案系統中的節點,通常在/dev/目錄下方
c) 一般要包含open read write close等系統呼叫的實作
2) 區塊設備
d) 通常是指磁碟、記憶體、Flash等可以容納檔案系統的儲存裝置。
e) 區塊裝置也是透過檔案系統來訪問,與字元裝置的區別是:核心管理資料的方式不同
f) 它允許像字元裝置一樣以位元組流的方式來訪問,也可一次傳遞任意多的位元組。
3) 網路介面設備
g) 通常它指的是硬體設備,但有時也可能是一個軟體設備(如回環介面loopback),它們由核心中網路子系統驅動,負責發送和接收資料包。
h) 它們的資料傳送往往不是面向流的,因此很難將它們映射到一個檔案系統的節點上。
以上是學習Android設備驅動開發的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!