隨著(zhù)智能手機的飛躍發(fā)展,特別是Android智能機的爆炸性發(fā)展,Android驅動(dòng)工程師是越來(lái)越受歡迎的一個(gè)職位,而且是一個(gè)非常值得人期待的職位,因為可能你參與研發(fā)的一款手機就能改變了很多人的生活,所以,進(jìn)階吧,Android驅動(dòng)程序猿,那怎樣成為一名優(yōu)秀的Android驅動(dòng)程序猿,我來(lái)發(fā)表一下我的意見(jiàn)吧,希望各位網(wǎng)友不要輕易拍磚。
Android驅動(dòng)的基礎知識
首先作為Android驅動(dòng)程序猿,你必須清楚的了解你要做的是什么,平時(shí)需要用到的基礎知識,對Android的基本框架的了解還是非常的有必要,對linux下的編程基礎也需要了解,因為嚴格來(lái)說(shuō),Android驅動(dòng)是基于Linux驅動(dòng),個(gè)人強烈推薦閱讀Linux Device Driver 3rd版,這本書(shū)講了Linux下設備驅動(dòng)的基礎知識,作為Android驅動(dòng)程序猿,你需要能最好讀懂這本書(shū),而且是反復的閱讀這本書(shū),因為我發(fā)現每次重新讀這本書(shū),都有新的收獲,這本書(shū)很值得一讀,強烈五星級推薦;而且還要會(huì )基本的C編程,能很好的讀懂和編寫(xiě)一些C程序,而且懂一些基礎的Java那就更好了,因為Framework層的代碼與驅動(dòng)層的代碼聯(lián)系也比較緊密,稍微懂一些Java代碼,你會(huì )發(fā)現你對整個(gè)驅動(dòng)框架的了解會(huì )更加的熟悉,相關(guān)的Linux編譯腳本和Linux編譯體系,因為商業(yè)開(kāi)發(fā)的一些原因,Android本身的文件架構體系可能會(huì )被一些編譯腳本而改變,加入新設備驅動(dòng),你需要了解整個(gè)的驅動(dòng)編譯體系,那樣書(shū)寫(xiě)驅動(dòng)程序也會(huì )更加的清晰!
\
Android/Linux相關(guān)驅動(dòng)框架知識
為詳細了解一下Android驅動(dòng)程序員需要會(huì )的技術(shù),我特意百度了各家Android驅動(dòng)程序員招聘需求對Android程序猿的要求,選擇哪幾家呢,國產(chǎn)手機的代表,中興,華為,酷派,聯(lián)想,小米,魅族,VIVO都是非常不錯的國產(chǎn)手機廠(chǎng)商,而且研發(fā)的Android智能手機越來(lái)越好,我甚至還專(zhuān)門(mén)去看了一下新興Android智能機公司,包括錘子手機官網(wǎng)的Android驅動(dòng)工程師招聘需求,One Plus One的官網(wǎng)連個(gè)加入我們的鏈接都木有,創(chuàng )業(yè)型的公司不知道是人才暫時(shí)飽和,還是啥原因,居然沒(méi)有招聘信息,匯總發(fā)現,這些公司要求差異不是特別大,出了需要基本的Android調試能力,你還需要對Android各模塊驅動(dòng)框架的了解,比如,某錘科技的Android驅動(dòng)工程師招聘需求,大伙可以去試試,錘子手機號稱(chēng)是在做最好的手機,比目前的旗艦手機都要好一點(diǎn)點(diǎn),加入它,還蠻有期待的! \ 某米公司的Android驅動(dòng)工程師也需要Android/Linux相關(guān)的知識,中興和聯(lián)想的Android招聘需求就比較籠統了,估計是大公司的緣故吧, \ 中興的官網(wǎng)居然開(kāi)始找不到驅動(dòng)工程師的招聘,我的個(gè)神,廢了我好大勁,才找到相關(guān)的招聘信息! \
相關(guān)的硬件知識和通信知識
Android驅動(dòng)平時(shí)工作就是調試各種外圍設備,是直接跟硬件打交道的職位,需要你看的懂電路原理圖,了解基本的顯示原理和基本的攝像頭成像原理等等,這是跟你平時(shí)工作非常相關(guān)的基礎知識,做Android智能手機,你也需要了解基本的通信相關(guān)知識,射頻原理和基本的Modem相關(guān)知識,只有懂相關(guān)的硬件知識和通訊設備相關(guān)的基礎知識,你才可以寫(xiě)出更好的Android驅動(dòng)程序,才能調試出更滿(mǎn)意的效果!
熱愛(ài)驅動(dòng)開(kāi)發(fā)和不斷學(xué)習
其實(shí)這點(diǎn)是非常的重要,應該擺在第一位,首先是你必須喜歡這份工作,你才可以做的更好,興趣是最好的老師,這句話(huà)是真心的大實(shí)話(huà),而目前的社會(huì )狀態(tài)是什么賺錢(qián),就一窩蜂的沖去做那個(gè),結果,最后可能做的很不開(kāi)心,然后,錢(qián)也沒(méi)撈到;如今,我的大學(xué)同學(xué)很有一部分都放棄了所學(xué)的專(zhuān)業(yè)對口工作,有去賣(mài)保險的,有去工廠(chǎng)做普工的,有去做銷(xiāo)售的,有去吃鐵飯碗的,當然職業(yè)肯定不分貴賤好壞,我說(shuō)這一點(diǎn),主要是建議大家去堅持最初的夢(mèng)想!我的夢(mèng)想就是做出一款可以改變人們生活的移動(dòng)終端,讓這個(gè)世界因為我而有一點(diǎn)點(diǎn)的不同,童鞋們,一起堅持夢(mèng)想吧! 此外,做Android驅動(dòng)工程師需要的是不斷的學(xué)習,時(shí)刻保持著(zhù)一股激情,不斷的學(xué)習才能更好的完成日常的驅動(dòng)開(kāi)發(fā)任務(wù),并能保持對開(kāi)發(fā)的的敏銳感覺(jué),我覺(jué)得喬布斯的:Stay hungry,Stay foolish說(shuō)的很好,一直被當做是我的座右銘,來(lái)激勵我堅持做一個(gè)更好的Android驅動(dòng)工程師,??寫(xiě)這篇博客的目的就是分享我的一些小看法,日后我還是會(huì )不斷更新我的博客,分享一些驅動(dòng)開(kāi)發(fā)相關(guān)的文檔和博客,和廣大的驅動(dòng)程序猿一起進(jìn)步!
1:硬件相關(guān):簡(jiǎn)單的數字電路要懂,看的懂電路圖(這個(gè)很簡(jiǎn)單),能根據電路找到相應Camera硬件連接的GPIO,并根據芯片手冊配置GPIO為相應的模式;比如GPIO模式,輸入IO或輸出IO;或配置成PWM模式;不同的模式這個(gè)GPIO的工作方式是不同的;
2:Camera驅動(dòng):比如ov5640;你要找本Linux驅動(dòng)相關(guān)的書(shū)看看,比如《linux設備驅動(dòng)程序》知道簡(jiǎn)單的linux設備驅動(dòng)寫(xiě)法;當然工作中Camera驅動(dòng)不需要你寫(xiě)的,有參考的可以使用,但是參考驅動(dòng)一般支持實(shí)現錄像、拍照功能,別的白平衡、對焦等都需要你去自己調試;
3:你要學(xué)習V4L2協(xié)議,因為驅動(dòng)導出/dev/video0接口是通過(guò)V4L2協(xié)議的;上層C的應用也是通過(guò)V4L2協(xié)議訪(fǎng)問(wèn)/dev/video0的;實(shí)際V4L2協(xié)議就是通過(guò)一些標志linux ioctl()函數和底層驅動(dòng)通信的;V4L2協(xié)議是為了屏蔽各種Camera驅動(dòng)的不同(比如usb攝像頭,mipi接口攝像頭)而提供的統一和攝像頭驅動(dòng)通信的規范;
4:你要知道C++的class的相關(guān)知識,最好能看到C++的代碼,既然你有C的知識,哪把C++的面相對象看懂,知道C++的class就可以了;為什么要懂C++呢?因為Android Camera HAL訪(fǎng)問(wèn)/dev/video0都是用C++寫(xiě)的,二十幾個(gè)個(gè)xxxx.cpp不同的類(lèi)相互繼承實(shí)現的;而且你要懂Android HAL層的寫(xiě)法,至少查查資料知道用哪里看;一般都是CameraModule.cpp或CameraHal.cpp;
5:JNI的寫(xiě)法最好以知道一些,至少可以抄就可以,因為這些寫(xiě)法都是固定的,因為調試的過(guò)程中有時(shí)候你一個(gè)人要從java層跟蹤代碼到HAL層再到驅動(dòng);
5:你要會(huì )用Linux,因為所有的Android源碼都是在Linux下編譯的;你要知道ARM架構,交叉編譯器;比如arm-linux-gcc;知道怎么編譯Android和kernel源碼;怎么刷機;怎么調試;最好買(mǎi)塊帶Camera的Android開(kāi)發(fā)板;
嵌入式驅動(dòng)開(kāi)發(fā)需要了解的知識大概有以下幾類(lèi): 1 嵌入式操作系統驅動(dòng)框架。
每一個(gè)操作系統都有自己的構架,應該了解驅動(dòng)在整個(gè)系統中的具體位置與構建驅動(dòng)程序的主要事項 2 總線(xiàn)知識,比如PCI、USB總線(xiàn)。 3 芯片知識。
驅動(dòng)其實(shí)就是對設備上一些寄存器的配置、CPU與設備本身的通訊以及對不同命令的處理 4 要做好驅動(dòng),必須對所使用的CPU體系結構有一個(gè)比較深刻的認識 5 C++基本用不上,主要是C和匯編。 6 做驅動(dòng)最好要懂內核調試(比如說(shuō)linux)。
java 并且必須掌握 JNI。
了解android應用編程。
會(huì ) C ++ ,看android 源碼中 就是在 c C++ Java 三種語(yǔ)言中穿梭。
知道 android 系統的啟動(dòng)流程。
會(huì )HAL(硬件抽象層)。
會(huì )Linux系統知識,及Linux-kernel、Linux驅動(dòng)開(kāi)發(fā)。因為HAL還是調用Linux驅動(dòng)的。
android是在Linux-kernel上再建立了一個(gè)類(lèi)似文件系統的系統。
首先作為Android驅動(dòng)程序猿,你必須清楚的了解你要做的是什么,平時(shí)需要用到的基礎知識,對Android的基本框架的了解還是非常的有必要,對linux下的編程基礎也需要了解,因為嚴格來(lái)說(shuō),Android驅動(dòng)是基于Linux驅動(dòng),個(gè)人強烈推薦閱讀Linux Device Driver 3rd版,這本書(shū)講了Linux下設備驅動(dòng)的基礎知識,作為Android驅動(dòng)程序猿,你需要能最好讀懂這本書(shū),而且是反復的閱讀這本書(shū),因為我發(fā)現每次重新讀這本書(shū),都有新的收獲,這本書(shū)很值得一讀,強烈五星級推薦;而且還要會(huì )基本的C編程,能很好的讀懂和編寫(xiě)一些C程序,而且懂一些基礎的Java那就更好了,因為Framework層的代碼與驅動(dòng)層的代碼聯(lián)系也比較緊密,稍微懂一些Java代碼,你會(huì )發(fā)現你對整個(gè)驅動(dòng)框架的了解會(huì )更加的熟悉,相關(guān)的Linux編譯腳本和Linux編譯體系,因為商業(yè)開(kāi)發(fā)的一些原因,Android本身的文件架構體系可能會(huì )被一些編譯腳本而改變,加入新設備驅動(dòng),你需要了解整個(gè)的驅動(dòng)編譯體系,那樣書(shū)寫(xiě)驅動(dòng)程序也會(huì )更加的清晰。
Android操作系統快捷鍵及常用技巧
1.最常用的技巧,長(cháng)按Home鍵可以調出最近使用的6個(gè)程序,并將當前程序置入后臺運行
2.調整音量至最低,就會(huì )依次進(jìn)入振動(dòng)模式和電話(huà)鈴聲靜音
3.長(cháng)按掛機鍵,在彈出的菜單中可以選擇飛行模式、靜音模式和關(guān)機,
4.輸入英文時(shí),刪除一個(gè)詞就可以同時(shí)按下Menu鍵和Del鍵,
5.在短信菜單中,長(cháng)按某條短信會(huì )調出菜單,可將此短信轉發(fā)或回復。
6.長(cháng)按接聽(tīng)鍵,會(huì )自動(dòng)激活系統的語(yǔ)音撥號功能,
7.將鈴聲文件轉移到SD卡,
在SD卡新建 "Ringtones" "Alarms" "Notifications" 等文件夾,
將鈴聲文件放進(jìn)去,系統選擇鈴聲的選項中就多出了這些音樂(lè )文件。
有電子通信的基礎應該好很多~看看熟不熟悉現代計算機基礎吧~ 像中斷 MMU 內存之類(lèi)的作用要弄清楚~然后在一些小板子上不跑linux 裸跑一些測試代碼~ 像在A(yíng)RM9上面寫(xiě)一些裸板的LED控制代碼和按鈕的中斷處理代碼~可以之后嘗試在linux下面寫(xiě)一個(gè)用中斷按鈕控制的led~再往上接觸一下input子系統和字符設備了解之后就能做各式各樣的驅動(dòng)了~ 基本都是子系統加字符設備~ 不過(guò)其子系統比input要復雜很多很多而已 還要搭上協(xié)議之類(lèi)的~再往后就是協(xié)議的學(xué)習了~書(shū)的話(huà)都差不多的~ 反正現在出書(shū)的內容7 8分一樣的~ 隨便買(mǎi)本翻翻就好了。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.676秒