做高通平台安卓驅動感言


         第二次寫這類博客,之前還是求職期間寫的面試之類的經歷。下面是做高通安卓驅動的感言。 同一時候獻給擇職想做驅動的參考。

         不知不覺做驅動再過2個月就3年了。能夠說這3年學習到的非常多。老大或者同事們的不吝賜教。針對性通過百度等搜索等。還有就是自己一邊工作一邊自己研究到的。知識,解決這個問題的能力也是慢慢積累起來的。這二年多來一直在做驅動,由開始開始接觸調試LCD TP等等。每次會反復做事,可是自己學習到的也非常多,學會分析關鍵問題,掌握一些驅動調試方法,事實上調試驅動來說一個printk真的夠了。再強大只是了,調試過高通modem側代碼后發現kernel是多么好調試。

再調試LCD中首先研究懂得了一些平台操作display的流程與kernel背光操作,之后解決這個問題就非常熟手了。比較難的就是調試qctlk里面的lcd顯示與開機logo保持。這些感覺對於剛開始做驅動還是蠻吃力的那段時間壓力非常大。期間會使用delay來調試lkkernel剛啟動出現的問題,比與說在lk里面logo消失或者kernel剛啟動時消失,調試過一次lcd lk display后后面不亮的或者其他問題的都非常好攻克了,當然是qct的,調試qrd就輕松多了,主要是問題比較少。啟動時顯示出現故障使用delay就非常好查了。有的可能說串口輸出,可是實踐證明delay是最有用的。當然串口輸出調試確實非常好比方死機等等。非常強大,個人感覺僅僅要能夠輸出log,就非常難存在解決不了的問題。

對於TP。無非採樣上報。屬於i2c設備同一時候屬於input設備。調試期間遇見的更多是FAE優化抗干擾與報點。睡眠電流,喚醒不能工作等問題。相比lcd簡單的多。

lcd tp差點兒相同了,感覺掌握的非常好,問題出現能夠高速攻克了,之后又搞了chargebatt,同一時候像休眠問題也在搞。后面一直從事電源管理方面的。chargebatt個人感覺功能ok后興許還是須要試用期間慢慢優化的,特別是電量不准確問題。做qct出現過插上charger后不能充電問題。還有更多的問題量產前都會慢慢出現。個人認為僅僅要熟悉linux power部分解決不是非常難的,還是那句話linux kernel出現的問題因為有printk最easy解決的,除非是硬件問題。是的驅動與硬件常常相互指責,當出現故障的時候。再說camera,僅僅記得第一年搞過高通realease出來的一個sense模組,另一個須要在其他平台移植過來的驅動。調試過程中無非上上電。拉下RST。移植中出現空指針等。解決完遇見的問題后camera終於會亮起來,當然之后還須要tunning。這個是個非常費力的活。同一時候非常耗時間。以后沒有干過camera了,個人認為還是繼續研究linux kernel里面的為好。畢竟是做驅動,而不是去為了camera效果一直去tunning

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

         所在公司不光做手機還會集成其他的模塊,這樣開發起來相比僅僅做手機的難度大了很多,非常多東西自己得去研究。

比方集成第三方modem。驅動project師活也多。盡管一般廠家會提供驅動可是適配到新的平台難免有很多問題,甚至非常嚴重的問題須要分析解決。開發難度上層最大,可是驅動是基礎,所以穩定性等要求比較高。

比方集成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非常難,后來發現某個大廠這個平台上都有這個問題,非常慶幸自己能解決大廠不能解決的問題。

解決后高通支持反過來問怎樣解決的?倒是非常滋潤。對於高通支持project師我想說。他們支持越來越慢,非常多時候全然靠自己,竟然有時說沒有機器,可是每次關閉case還是習慣性好評。

         從去年開始能夠給公司解決一些比較難的底層問題到如今領導把LCD等外設交給新入職的調試,個人能力慢慢成長,如今還是非常關注linux kernel里面一些驅動等研究。解決一些有難度的問題。

雖說說不上精通linux kernel可是能夠說非常熟悉。產品底層出現故障能夠高速定位分析。個人感覺即使做驅動十年也談不上精通,畢竟linux kerne是個系統內核,精髓在內存管理等等。說精通恐怕僅僅有那些提交linux改進優化系統內核的人。

        前段時間看過別人評價做mtk驅動的。說怎么怎么簡單。害了年輕人,個人非常慶幸當時入職選擇了做高通驅動。之前也是能夠選擇做mtk驅動的或者wince的。再加上這家公司技術實力還是比較牛逼的在業界。自己做高通,就我熟知的kernel代碼確實非常美麗,外國人寫的質量非常高。同一時候設備驅動非常豐富。對於剛參加工作的人確實非常故意處,學到的非常的多。

對於mtk自己沒有做過。盡管別人說怎么怎么樣,可是國產的畢竟跑起來的也是非常牛逼的。個人認為知識在於深入研究才會長能力。以后有機會倒是想多接觸幾個平台。可是做linux驅動的感覺與平台關系也不是非常大,畢竟Linux大的框架擺在那里。

    記得剛入職時干活非常急非常浮躁。恨不得一下功能就ok。

可是如今干活很多其它的是享受。一種積累。一種深入發掘的過程。

做產品很多其它的是關注是自己后期試用來找出或者測試出來的問題,同一時候定位解決這個問題。

    興許發展方向:研究音頻方面,之前自己也學習了不少,可是沒有親自做過,這些都是別人負責的,自己也會拿手機去debug比方耳機插拔 按鍵 speaker等。這些都是簡單的。軟件上很多其它的是底層通道切換等等。


     

         



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM