一位驅動(dòng)工程師工作3年后的感悟,給想做驅動(dòng)的新手們一些參考...

發(fā)布時(shí)間:2017-9-1 10:23    發(fā)布者:技術(shù)小白
關(guān)鍵詞: 嵌入式 , 工程師 , Linux , 驅動(dòng)
一位驅動(dòng)工程師工作3年后的感悟,給想做驅動(dòng)的新手們一些參考...

不知不覺(jué)做驅動(dòng)再過(guò)2個(gè)月就3年了,可以說(shuō)這3年學(xué)習到的很多,老大或者同事們的指教,針對性通過(guò)百度等搜索等,還有就是自己一邊工作一邊自己 研究到的知識,解決問(wèn)題的能力也是慢慢積累起來(lái)的。


這二年多來(lái)一直在做驅動(dòng),由開(kāi)始開(kāi)始接觸調試LCD TP等等,每次會(huì )重復做事,但是自己學(xué)習到的也很多,學(xué)會(huì )分析關(guān)鍵問(wèn)題,掌握一些驅動(dòng)調試方法,其實(shí)調試驅動(dòng)來(lái)說(shuō)一個(gè)printk真的夠了,再強大不過(guò)了,調試過(guò)高通modem側代碼后發(fā)現kernel是多么好調試。

再調試LCD中首先研究懂得了一些平臺操作display的流程與kernel背光操作,之后解決問(wèn)題就很熟手了。比較難的就是調試qct的lk里面的lcd顯示與開(kāi)機logo保持,這些感覺(jué)對于剛開(kāi)始做驅動(dòng)還是蠻吃力的那段時(shí)間壓力很大,期間會(huì )使用delay來(lái)調試lk與kernel剛啟動(dòng)出現的問(wèn)題,比與說(shuō)在lk里面logo消失或者kernel剛啟動(dòng)時(shí)消失,調試過(guò)一次lcd lk display后后面不亮的或者其它問(wèn)題的都很好解決了,當然是qct的,調試qrd就輕松多了,主要是問(wèn)題比較少。啟動(dòng)時(shí)顯示出現問(wèn)題使用delay就很好查了,有的可能說(shuō)串口輸出,但是實(shí)踐證明delay是最實(shí)用的。當然串口輸出調試確實(shí)很好比如死機等等,很強大,個(gè)人感覺(jué)只要可以輸出log,就很難存在解決不了的問(wèn)題。

對于TP,無(wú)非采樣上報,屬于i2c設備同時(shí)屬于input設備,調試期間遇見(jiàn)的更多是FAE優(yōu)化抗干擾與報點(diǎn),睡眠電流,喚醒不能工作等問(wèn)題。相比lcd簡(jiǎn)單的多。搞lcd tp差不多了,感覺(jué)掌握的很好,問(wèn)題出現可以快速解決了,之后又搞了charge與batt,同時(shí)像休眠問(wèn)題也在搞,后面一直從事電源管理方面的。charge與batt個(gè)人感覺(jué)功能ok后后續還是需要試用期間慢慢優(yōu)化的,特別是電量不準確問(wèn)題,做qct出現過(guò)插上charger后不能充電問(wèn)題,還有許多其他的問(wèn)題量產(chǎn)前都會(huì )慢慢出現,個(gè)人覺(jué)得只要熟悉Linux power部分解決不是很難的,還是那句話(huà)linux kernel出現的問(wèn)題由于有printk最容易解決的,除非是硬件問(wèn)題。

是的驅動(dòng)與硬件經(jīng)常相互指責,當出現問(wèn)題的時(shí)候。再說(shuō)camera,只記得第一年搞過(guò)高通realease出來(lái)的一個(gè)sense模組,還有一個(gè)需要在其它平臺移植過(guò)來(lái)的驅動(dòng),調試過(guò)程中無(wú)非上上電,拉下RST,移植中出現空指針等,解決完遇見(jiàn)的問(wèn)題后camera最終會(huì )亮起來(lái),當然之后還需要tunning。這個(gè)是個(gè)很費力的活,同時(shí)很耗時(shí)間。以后沒(méi)有干過(guò)camera了,個(gè)人覺(jué)得還是繼續研究linux kernel里面的為好,畢竟是做驅動(dòng),而不是去為了camera效果一直去tunning。tunning需要專(zhuān)門(mén)的人去做,一旦專(zhuān)門(mén)tunning就很難有時(shí)間做別的活了。當然有些公司給tunnning camera的待遇很好,即使這樣我也不會(huì )動(dòng)心去深入搞這塊。個(gè)人愛(ài)好等不一樣,后面一直專(zhuān)注于linux kernel。

所在公司不光做手機還會(huì )集成其它的模塊,這樣開(kāi)發(fā)起來(lái)相比只做手機的難度大了許多,很多東西自己得去研究。比如集成第三方modem,驅動(dòng)工程師活也多,雖然一般廠(chǎng)家會(huì )提供驅動(dòng)但是適配到新的平臺難免有許多問(wèn)題,甚至很?chē)乐氐膯?wèn)題需要分析解決。

開(kāi)發(fā)難度上層最大,但是驅動(dòng)是基礎,所以穩定性等要求比較高。比如集成UART掛載的模塊,會(huì )涉及到串口通訊驅動(dòng)與數據流等問(wèn)題。還有sdio接口的模塊比如網(wǎng)卡 特別功能的T卡等模塊,這里簡(jiǎn)單的說(shuō)下可熱插拔的sdio設備,當插入設備時(shí),首先sdcc host會(huì )出發(fā)中斷,在core.c里面會(huì )根據協(xié)議來(lái)detect是什么接口設備是sd還是sdio還是mmc,檢測到后會(huì )出現log:new high speed xxxx,之后就加載驅動(dòng)。

說(shuō)下usb,拿usb接口的網(wǎng)卡來(lái)說(shuō)下usb流程,首先當kernel啟動(dòng)時(shí)hub會(huì )檢測到usb設備,通過(guò)2次RST port來(lái)獲取設備描敘符,設置address,我們在驅動(dòng)里面需要找到對應的驅動(dòng),對于usb網(wǎng)卡來(lái)說(shuō),在driver/net/usb下面有許多類(lèi)似的驅動(dòng)程序,可以找到最匹配的一個(gè)來(lái)使用,加入獲取到的PID VID CALSS等信息,host會(huì )通過(guò)這些信息來(lái)match對應的usb設備接口,當然許多usb設備不止一個(gè)接口,usb通訊可以理解為多個(gè)高通串口,這里很可能需要根據不同的CLASS或者INTERFACE來(lái)加載不同的驅動(dòng),對于網(wǎng)卡驅動(dòng)來(lái)說(shuō)有自己driver模型而不需要字符設備等供上層交互,usb設備驅動(dòng)是linux最復雜點(diǎn)的,就說(shuō)這么多。

等到集成到AP上的模塊可以正常工作后,你會(huì )發(fā)現幾乎每個(gè)模塊由于使用到了linux下面的總線(xiàn),會(huì )導致休眠不了,不同的接口都需要自己研究處理,讓kernel休眠下來(lái),這部分很多需要自己的摸索。尤其是usb驅動(dòng)的休眠是最不好處理的,涉及到runtime機制。對于手機廠(chǎng)家來(lái)說(shuō)調驅動(dòng)更多的是他們家的外設,通常都有模板。

但是對于集成更多功能的嵌入式產(chǎn)品來(lái)說(shuō),功能很豐富,附加值高,開(kāi)發(fā)難度更多,大量的上層需要自己做,就做驅動(dòng)而言,首先底層需要提供一個(gè)類(lèi)似字符設備或者misc設備接口等供上層讀寫(xiě),驅動(dòng)寫(xiě)好后需要寫(xiě)個(gè)簡(jiǎn)單的測試程序來(lái)open write read文件,再跟下kernel里面的數據流,查查硬件通訊有沒(méi)有問(wèn)題,模塊接收到?jīng)]有,會(huì )不會(huì )丟數據等等,這些穩定性會(huì )在后期暴漏出來(lái)慢慢改進(jìn)。等一切ok后就是kernel里面的睡眠與喚醒了,當然還有第三方模塊自己的功耗問(wèn)題這個(gè)第三方負責了。

去年經(jīng)歷過(guò)一個(gè)很難解決的問(wèn)題就是高端平臺上1080P LCD偶爾會(huì )藍屏的問(wèn)題,但是通常一周可能才出現一次左右,甚至不會(huì )出現。當時(shí)頂著(zhù)壓力花費很久最終還是解決了。提case給高通,他們給的不能解決,最后是自己硬著(zhù)頭皮解決的,這個(gè)問(wèn)題難在復現bug很難,后來(lái)發(fā)現某個(gè)大廠(chǎng)這個(gè)平臺上都有這個(gè)問(wèn)題,很慶幸自己能解決大廠(chǎng)不能解決的問(wèn)題。

解決后高通支持反過(guò)來(lái)問(wèn)如何解決的?倒是很滋潤。對于高通支持工程師我想說(shuō),他們支持越來(lái)越慢,很多時(shí)候完全靠自己,居然有時(shí)說(shuō)沒(méi)有機器,但是每次關(guān)閉case還是習慣性好評。

從去年開(kāi)始可以給公司解決一些比較難的底層問(wèn)題到現在領(lǐng)導把LCD等外設交給新入職的調試,個(gè)人能力慢慢成長(cháng),現在還是很關(guān)注linux kernel里面一些驅動(dòng)等研究,解決一些有難度的問(wèn)題。雖說(shuō)說(shuō)不上精通linux kernel但是可以說(shuō)非常熟悉,產(chǎn)品底層出現問(wèn)題可以快速定位分析。個(gè)人感覺(jué)即使做驅動(dòng)十年也談不上精通,畢竟linux kerne是個(gè)系統內核,精髓在內存管理等等,說(shuō)精通恐怕只有那些提交linux改進(jìn)優(yōu)化系統內核的人。

前段時(shí)間看過(guò)別人評價(jià)做mtk驅動(dòng)的,說(shuō)怎么怎么簡(jiǎn)單,害了年輕人,個(gè)人很慶幸當時(shí)入職選擇了做高通驅動(dòng)。之前也是可以選擇做mtk驅動(dòng)的或者wince的。再加上這家公司技術(shù)實(shí)力還是比較牛逼的在業(yè)界。自己做高通,就我熟知的kernel代碼確實(shí)很漂亮,外國人寫(xiě)的質(zhì)量很高,同時(shí)設備驅動(dòng)很豐富,對于剛參加工作的人確實(shí)很有益處,學(xué)到的非常的多。對于mtk自己沒(méi)有做過(guò),雖然別人說(shuō)怎么怎么樣,但是國產(chǎn)的畢竟跑起來(lái)的也是很牛逼的。個(gè)人覺(jué)得知識在于深入研究才會(huì )長(cháng)能力。以后有機會(huì )倒是想多接觸幾個(gè)平臺。但是做linux驅動(dòng)的感覺(jué)與平臺關(guān)系也不是很大,畢竟Linux大的框架擺在那里。

記得剛入職時(shí)干活很急很浮躁,恨不得一下功能就ok。但是現在干活更多的是享受,一種積累,一種深入發(fā)掘的過(guò)程。做產(chǎn)品更多的是關(guān)注是自己后期試用來(lái)找出或者測試出來(lái)的問(wèn)題,同時(shí)定位解決問(wèn)題。

后續個(gè)人發(fā)展方向:研究音頻方面,之前自己也學(xué)習了不少,但是沒(méi)有親自做過(guò),這些都是別人負責的,自己也會(huì )拿手機去debug比如耳機插拔 按鍵 speaker等。這些都是簡(jiǎn)單的,軟件上更多的是底層通道切換等等。


以下課程可免費試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習的你和我聯(lián)系預約就可以免費聽(tīng)課了。
宋工企鵝號:3524-6590-88   Tel/WX:173--1795--1908



本文地址:http://selenalain.com/thread-516464-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页