您的位置:首頁>正文

驅動工程師成長歷程分享,是否找到曾經的你!

寫在最前面, 本文前半是一位工作近三年驅動工程師的經歷, 後面一部分是網友對成為驅動工程師一些想法, 分享給大家希望能有些幫助。

正文

這3年學習到很多, 老大或者同事們的指教, 針對性通過百度等搜索等, 還有就是自己一邊工作一邊自己研究到的知識, 解決問題的能力也是慢慢積累起來的。

由開始開始接觸調試LCD TP等等, 每次會重複做事, 但是自己學習到的也很多, 學會分析關鍵問題, 掌握一些驅動調試方法, 其實調試驅動來說一個printk真的夠了, 再強大不過了, 調試過高通modem側代碼後發現kernel是多麼好調試。

在調試LCD中首先研究懂得了一些平臺操作display的流程與kernel背光操作, 之後解決問題就很熟手了。 比較難的就是調試qct的lk裡面的lcd顯示與開機logo保持, 這些感覺對於剛開始做驅動還是蠻吃力的那段時間壓力很大, 期間會使用delay來調試lk與kernel剛啟動出現的問題。

比與說在lk裡面logo消失或者kernel剛啟動時消失, 調試過一次lcd lk display後後面不亮的或者其它問題的都很好解決了, 當然是qct的, 調試qrd就輕鬆多了, 主要是問題比較少。 啟動時顯示出現問題使用delay就很好查了, 有的可能說串口輸出, 但是實踐證明delay是最實用的。

當然串口輸出調試確實很好比如死機等等, 很強大, 個人感覺只要可以輸出log, 就很難存在解決不了的問題。

對於TP, 無非採樣上報, 屬於i2c設備同時屬於input設備, 調試期間遇見的更多是FAE優化抗干擾與報點, 睡眠電流, 喚醒不能工作等問題。 相比lcd簡單的多。 搞lcd tp差不多了, 感覺掌握的很好, 問題出現可以快速解決了, 之後又搞了charge與batt, 同時像休眠問題也在搞, 後面一直從事電源管理方面的。

charge與batt個人感覺功能ok後後續還是需要試用期間慢慢優化的, 特別是電量不準確問題, 做qct出現過插上charger後不能充電問題, 還有許多其他的問題量產前都會慢慢出現, 個人覺得只要熟悉Linux power部分解決不是很難的, 還是那句話linux kernel出現的問題由於有printk最容易解決的, 除非是硬體問題。

是的驅動與硬體經常相互指責, 當出現問題的時候。 再說camera, 只記得第一年搞過高通realease出來的一個sense模組, 還有一個需要在其它平臺移植過來的驅動, 調試過程中無非上上電, 拉下RST, 移植中出現空指標等, 解決完遇見的問題後camera最終會亮起來, 當然之後還需要tunning。

這個是個很費力的活, 同時很耗時間。 以後沒有幹過camera了, 個人覺得還是繼續研究linux kernel裡面的為好, 畢竟是做驅動,

而不是去為了camera效果一直去tunning。 tunning需要專門的人去做, 一旦專門tunning就很難有時間做別的活了。 當然有些公司給tunnning camera的待遇很好, 即使這樣我也不會動心去深入搞這塊。 個人愛好等不一樣, 後面一直專注於linux kernel。

所在公司不光做手機還會集成其它的模組, 這樣開發起來相比只做手機的難度大了許多, 很多東西自己得去研究。 比如集成協力廠商modem, 驅動工程師活也多, 雖然一般廠家會提供驅動但是適配到新的平臺難免有許多問題, 甚至很嚴重的問題需要分析解決。

開發難度上層最大, 但是驅動是基礎, 所以穩定性等要求比較高。

比如集成UART掛載的模組, 會涉及到串口通訊驅動與資料流程等問題。 還有sdio介面的模組比如網卡 特別功能的T卡等模組,

這裡簡單的說下可熱插拔的sdio設備, 當插入設備時, 首先sdcc host會出發中斷, 在core.c裡面會根據協定來detect是什麼周邊設備是sd還是sdio還是mmc, 檢測到後會出現log:new high speed xxxx, 之後就載入驅動。

說下usb, 拿usb介面的網卡來說下usb流程, 首先當kernel啟動時hub會檢測到usb設備, 通過2次RST port來獲取設備描敘符, 設置address,我們在驅動裡面需要找到對應的驅動,對於usb網卡來說,在driver/net/usb下面有許多類似的驅動程式,可以找到最匹配的一個來使用,加入獲取到的PID VID CALSS等資訊,host會通過這些資訊來match對應的usb設備介面。

當然許多usb設備不止一個介面,usb通訊可以理解為多個高通串口,這裡很可能需要根據不同的CLASS或者INTERFACE來載入不同的驅動,對於網卡驅動來說有自己driver模型而不需要字元設備等供上層交互,usb設備驅動是linux最複雜點的,就說這麼多。

等到集成到AP上的模組可以正常工作後,你會發現幾乎每個模組由於使用到了linux下面的匯流排,會導致休眠不了,不同的介面都需要自己研究處理,讓kernel休眠下來,這部分很多需要自己的摸索。尤其是usb驅動的休眠是最不好處理的,涉及到runtime機制。對於手機廠家來說調驅動更多的是他們家的外設,通常都有範本。

但是對於集成更多功能的嵌入式產品來說,功能很豐富,附加值高,開發難度更多,大量的上層需要自己做,就做驅動而言,首先底層需要提供一個類似字元設備或者misc設備介面等供上層讀寫,驅動寫好後需要寫個簡單的測試程式來open write read檔,再跟下kernel裡面的資料流程,查查硬體通訊有沒有問題,模組接收到沒有,會不會丟資料等等,這些穩定性會在後期暴漏出來慢慢改進。

等一切ok後就是kernel裡面的睡眠與喚醒了,當然還有協力廠商模組自己的功耗問題這個協力廠商負責了。

去年經歷過一個很難解決的問題就是高端平臺上1080P LCD偶爾會藍屏的問題,但是通常一周可能才出現一次左右,甚至不會出現。當時頂著壓力花費很久最終還是解決了。提case給高通,他們給的不能解決,最後是自己硬著頭皮解決的,這個問題難在複現bug很難,後來發現某個大廠這個平臺上都有這個問題,很慶倖自己能解決大廠不能解決的問題。

解決後高通支持反過來問如何解決的?倒是很滋潤。對於高通支援工程師我想說,他們支援越來越慢,很多時候完全靠自己,居然有時說沒有機器,但是每次關閉case還是習慣性好評。

從去年開始可以給公司解決一些比較難的底層問題到現在領導把LCD等外設交給新入職的調試,個人能力慢慢成長,現在還是很關注linux kernel裡面一些驅動等研究,解決一些有難度的問題。雖說說不上精通linux kernel但是可以說非常熟悉,產品底層出現問題可以快速定位分析。

個人感覺即使做驅動十年也談不上精通,畢竟linux kerne是個系統內核,精髓在記憶體管理等等,說精通恐怕只有那些提交linux改進優化系統內核的人。

前段時間看過別人評價做mtk驅動的,說怎麼怎麼簡單,害了年輕人,個人很慶倖當時入職選擇了做高通驅動。

之前也是可以選擇做mtk驅動的或者wince的。再加上這家公司技術實力還是比較牛逼的在業界。自己做高通,就我熟知的kernel代碼確實很漂亮,外國人寫的品質很高,同時設備驅動很豐富,對於剛參加工作的人確實很有益處,學到的非常的多。

對於mtk自己沒有做過,雖然別人說怎麼怎麼樣,但是國產的畢竟跑起來的也是很牛逼的。個人覺得知識在於深入研究才會長能力。以後有機會倒是想多接觸幾個平臺。但是做linux驅動的感覺與平臺關係也不是很大,畢竟Linux大的框架擺在那裡。

記得剛入職時幹活很急很浮躁,恨不得一下功能就ok。但是現在幹活更多的是享受,一種積累,一種深入發掘的過程。做產品更多的是關注是自己後期試用來找出或者測試出來的問題,同時定位解決問題。

後續個人發展方向:研究音訊方面,之前自己也學習了不少,但是沒有親自做過,這些都是別人負責的,自己也會拿手機去debug比如耳機插拔 按鍵 speaker等。這些都是簡單的,軟體上更多的是底層通道切換等等。

網友評論

下面是網友們對於驅動工程的一些看法,歡迎大家留言多多交流~

網友一

做驅動工程師有一年時間了,不過總是很迷茫,我本身對硬體瞭解甚少,機會湊巧,做了驅動工程師,還是沒有人帶的那種。到現在,我都沒有搞清楚,驅動到底是在幹什麼?難道就是諸如聯繫FAE調試效果這類工作?覺得實質性的東西都沒有學到,好像不知道從什麼地方開始學,該學寫什麼。

網友二

驅動工程師就是為週邊設備寫驅動程式,比如LCD屏的驅動,Sensor的驅動等等。

網友三

工作半年了UI的人叫驅動都叫系統, 以前做嵌入式的時候驅動就是讓週邊器件跑起來就行了,現在發現在我們公司不是這樣。很多驅動高通都給寫好了,自己寫的很少,大部分在讀懂高通的代碼然後維護了。AT指令指令的,要看DS 這些總不能讓UI的人看吧。

感覺就是cdma裡面自己能寫的代碼很少了,都需要去看高通的軟體構架及實現方法。很累。

網友四

首先驅動是介於系統和硬體之間的一塊,也就是說驅動是個紐帶。那麼如果想做一名合格的驅動工程師就要懂系統的架構和硬體的基本原理。現在由於滿足用戶快速開發各大公司發出的方案基本上是把能集成的外設驅動都寫好了,所以搞得很多工程師覺得沒做什麼技術含量的事。

每個平臺千差萬別,我個人認為Linux平臺由於其開放性,讓我們更好的瞭解內核,從而更清晰的瞭解整個系統而MTK的內核是封裝好的,所以如果你瞭解MTK的系統架構,還是要下很多功夫的。

網友五

要有四個要點:1、硬體基礎:主要是數電。次要是電路、模電、物理。2、處理器基礎:主流是ARM、單片機、DSP、微機原理。3、軟體程式設計基礎:主要是C語言。其次是C++。和驅動關係不大的是Java、C#、Objective-C。4、作業系統基礎:作業系統原理(驅動框架)、資料結構、編譯原理。

數電+ARM/單片機+C語言,這三樣最重要。數電:通過看數位器件的說明書(datasheetpec)知道一個數字器件的工作條件:1.上電;2.使能;3.設不同值使器件進行不同工作;ARM/單片機:1.會用GPIO控制設備(比如LED)2.會用中斷(讓鍵盤正常工作)3.一些常用通信協議(I2C/SPI/等等);C語言:沒什麼好說的,指標相關的都比較難,面試基本考這個為主。驅動框架,比如linux驅動框架(module_init>init>probe>fops/sysfs,device+driver+bus)等等。

網友六

個人認為是這樣的,首先得有一些基礎,比如C語言,電路等,有了基礎之後,再學起驅動比較不那麼費力。重要的是你的態度:你想不想學,你怎樣學!技術行業更新換代很快,要時刻保持學習的姿態。至於你想瞭解的成長經歷,我個人解讀是前途或者錢途?技術牛人不差錢,只要你牛逼。說的不太具體,請見諒。

第4屆中國IOT大會不僅邀請到微軟、高通、華為、Silicon Labs、周立功、和而泰高層發表主題演講,而且成功導入以色列創新元素,現已邀請到8家以色列創新IOT技術公司CEO到深圳發表主題演講和參加融資路演。

掃描下方二維碼

立即報名第4屆中國IOT大會

設置address,我們在驅動裡面需要找到對應的驅動,對於usb網卡來說,在driver/net/usb下面有許多類似的驅動程式,可以找到最匹配的一個來使用,加入獲取到的PID VID CALSS等資訊,host會通過這些資訊來match對應的usb設備介面。

當然許多usb設備不止一個介面,usb通訊可以理解為多個高通串口,這裡很可能需要根據不同的CLASS或者INTERFACE來載入不同的驅動,對於網卡驅動來說有自己driver模型而不需要字元設備等供上層交互,usb設備驅動是linux最複雜點的,就說這麼多。

等到集成到AP上的模組可以正常工作後,你會發現幾乎每個模組由於使用到了linux下面的匯流排,會導致休眠不了,不同的介面都需要自己研究處理,讓kernel休眠下來,這部分很多需要自己的摸索。尤其是usb驅動的休眠是最不好處理的,涉及到runtime機制。對於手機廠家來說調驅動更多的是他們家的外設,通常都有範本。

但是對於集成更多功能的嵌入式產品來說,功能很豐富,附加值高,開發難度更多,大量的上層需要自己做,就做驅動而言,首先底層需要提供一個類似字元設備或者misc設備介面等供上層讀寫,驅動寫好後需要寫個簡單的測試程式來open write read檔,再跟下kernel裡面的資料流程,查查硬體通訊有沒有問題,模組接收到沒有,會不會丟資料等等,這些穩定性會在後期暴漏出來慢慢改進。

等一切ok後就是kernel裡面的睡眠與喚醒了,當然還有協力廠商模組自己的功耗問題這個協力廠商負責了。

去年經歷過一個很難解決的問題就是高端平臺上1080P LCD偶爾會藍屏的問題,但是通常一周可能才出現一次左右,甚至不會出現。當時頂著壓力花費很久最終還是解決了。提case給高通,他們給的不能解決,最後是自己硬著頭皮解決的,這個問題難在複現bug很難,後來發現某個大廠這個平臺上都有這個問題,很慶倖自己能解決大廠不能解決的問題。

解決後高通支持反過來問如何解決的?倒是很滋潤。對於高通支援工程師我想說,他們支援越來越慢,很多時候完全靠自己,居然有時說沒有機器,但是每次關閉case還是習慣性好評。

從去年開始可以給公司解決一些比較難的底層問題到現在領導把LCD等外設交給新入職的調試,個人能力慢慢成長,現在還是很關注linux kernel裡面一些驅動等研究,解決一些有難度的問題。雖說說不上精通linux kernel但是可以說非常熟悉,產品底層出現問題可以快速定位分析。

個人感覺即使做驅動十年也談不上精通,畢竟linux kerne是個系統內核,精髓在記憶體管理等等,說精通恐怕只有那些提交linux改進優化系統內核的人。

前段時間看過別人評價做mtk驅動的,說怎麼怎麼簡單,害了年輕人,個人很慶倖當時入職選擇了做高通驅動。

之前也是可以選擇做mtk驅動的或者wince的。再加上這家公司技術實力還是比較牛逼的在業界。自己做高通,就我熟知的kernel代碼確實很漂亮,外國人寫的品質很高,同時設備驅動很豐富,對於剛參加工作的人確實很有益處,學到的非常的多。

對於mtk自己沒有做過,雖然別人說怎麼怎麼樣,但是國產的畢竟跑起來的也是很牛逼的。個人覺得知識在於深入研究才會長能力。以後有機會倒是想多接觸幾個平臺。但是做linux驅動的感覺與平臺關係也不是很大,畢竟Linux大的框架擺在那裡。

記得剛入職時幹活很急很浮躁,恨不得一下功能就ok。但是現在幹活更多的是享受,一種積累,一種深入發掘的過程。做產品更多的是關注是自己後期試用來找出或者測試出來的問題,同時定位解決問題。

後續個人發展方向:研究音訊方面,之前自己也學習了不少,但是沒有親自做過,這些都是別人負責的,自己也會拿手機去debug比如耳機插拔 按鍵 speaker等。這些都是簡單的,軟體上更多的是底層通道切換等等。

網友評論

下面是網友們對於驅動工程的一些看法,歡迎大家留言多多交流~

網友一

做驅動工程師有一年時間了,不過總是很迷茫,我本身對硬體瞭解甚少,機會湊巧,做了驅動工程師,還是沒有人帶的那種。到現在,我都沒有搞清楚,驅動到底是在幹什麼?難道就是諸如聯繫FAE調試效果這類工作?覺得實質性的東西都沒有學到,好像不知道從什麼地方開始學,該學寫什麼。

網友二

驅動工程師就是為週邊設備寫驅動程式,比如LCD屏的驅動,Sensor的驅動等等。

網友三

工作半年了UI的人叫驅動都叫系統, 以前做嵌入式的時候驅動就是讓週邊器件跑起來就行了,現在發現在我們公司不是這樣。很多驅動高通都給寫好了,自己寫的很少,大部分在讀懂高通的代碼然後維護了。AT指令指令的,要看DS 這些總不能讓UI的人看吧。

感覺就是cdma裡面自己能寫的代碼很少了,都需要去看高通的軟體構架及實現方法。很累。

網友四

首先驅動是介於系統和硬體之間的一塊,也就是說驅動是個紐帶。那麼如果想做一名合格的驅動工程師就要懂系統的架構和硬體的基本原理。現在由於滿足用戶快速開發各大公司發出的方案基本上是把能集成的外設驅動都寫好了,所以搞得很多工程師覺得沒做什麼技術含量的事。

每個平臺千差萬別,我個人認為Linux平臺由於其開放性,讓我們更好的瞭解內核,從而更清晰的瞭解整個系統而MTK的內核是封裝好的,所以如果你瞭解MTK的系統架構,還是要下很多功夫的。

網友五

要有四個要點:1、硬體基礎:主要是數電。次要是電路、模電、物理。2、處理器基礎:主流是ARM、單片機、DSP、微機原理。3、軟體程式設計基礎:主要是C語言。其次是C++。和驅動關係不大的是Java、C#、Objective-C。4、作業系統基礎:作業系統原理(驅動框架)、資料結構、編譯原理。

數電+ARM/單片機+C語言,這三樣最重要。數電:通過看數位器件的說明書(datasheetpec)知道一個數字器件的工作條件:1.上電;2.使能;3.設不同值使器件進行不同工作;ARM/單片機:1.會用GPIO控制設備(比如LED)2.會用中斷(讓鍵盤正常工作)3.一些常用通信協議(I2C/SPI/等等);C語言:沒什麼好說的,指標相關的都比較難,面試基本考這個為主。驅動框架,比如linux驅動框架(module_init>init>probe>fops/sysfs,device+driver+bus)等等。

網友六

個人認為是這樣的,首先得有一些基礎,比如C語言,電路等,有了基礎之後,再學起驅動比較不那麼費力。重要的是你的態度:你想不想學,你怎樣學!技術行業更新換代很快,要時刻保持學習的姿態。至於你想瞭解的成長經歷,我個人解讀是前途或者錢途?技術牛人不差錢,只要你牛逼。說的不太具體,請見諒。

第4屆中國IOT大會不僅邀請到微軟、高通、華為、Silicon Labs、周立功、和而泰高層發表主題演講,而且成功導入以色列創新元素,現已邀請到8家以色列創新IOT技術公司CEO到深圳發表主題演講和參加融資路演。

掃描下方二維碼

立即報名第4屆中國IOT大會

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示