自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

?你確定是你的驅(qū)動(dòng)出問(wèn)題了嗎?

原創(chuàng) 精選
移動(dòng)開(kāi)發(fā) 移動(dòng)應(yīng)用
對(duì)于初級(jí)開(kāi)發(fā)人員來(lái)說(shuō),強(qiáng)烈建議按照上面的步驟進(jìn)行開(kāi)發(fā)調(diào)試,因?yàn)樵S多初級(jí)人員無(wú)法像高級(jí)開(kāi)發(fā)人員那樣,可以從機(jī)器的狀態(tài)和節(jié)點(diǎn)信息,快速推斷出可能出問(wèn)題的模塊或者環(huán)節(jié)。

作者 |趙青窕

審校 |孫淑娟

在安卓驅(qū)動(dòng)開(kāi)發(fā)中,不少開(kāi)發(fā)同事反饋的問(wèn)題在定位后,我發(fā)現(xiàn)這些問(wèn)題大多不是驅(qū)動(dòng)本身的問(wèn)題,而是開(kāi)發(fā)者對(duì)驅(qū)動(dòng)框架理解的不夠透徹。比如有些開(kāi)發(fā)者燒錄到硬件板子中的鏡像本身就不包含驅(qū)動(dòng)的任何信息,有些開(kāi)發(fā)者本地的代碼中沒(méi)有對(duì)應(yīng)器件的驅(qū)動(dòng)。

在這兩種情況下,有些剛開(kāi)始接觸驅(qū)動(dòng)的開(kāi)發(fā)者已經(jīng)開(kāi)始進(jìn)行基于硬件環(huán)境的調(diào)試,此時(shí)他們的硬件環(huán)境中是不存在對(duì)應(yīng)的器件驅(qū)動(dòng)的,該器件百分百是無(wú)法工作的。但經(jīng)驗(yàn)不足的開(kāi)發(fā)者甚至可能會(huì)消耗數(shù)天時(shí)間來(lái)排查器件不工作的原因,為了防止這種低端問(wèn)題的再次出現(xiàn),我整理了一份驅(qū)動(dòng)檢查表,其主要內(nèi)容如下:

  • 你當(dāng)前的軟件代碼中是否存在器件對(duì)應(yīng)的驅(qū)動(dòng)和設(shè)備樹(shù)信息
  • 如不存在驅(qū)動(dòng)和設(shè)備樹(shù),該如何處理
  • 如何確保你的驅(qū)動(dòng)和設(shè)備樹(shù)已正常編譯
  • 如何確保你的鏡像中包含正確使用的驅(qū)動(dòng)和設(shè)備樹(shù)
  • 如何確保燒錄鏡像后的硬件環(huán)境中,存在對(duì)應(yīng)的驅(qū)動(dòng)和設(shè)備樹(shù)信息

以上這五項(xiàng)是環(huán)環(huán)相扣的,只有在上一步正確的前提條件下,才能進(jìn)行下一步。

對(duì)于初級(jí)開(kāi)發(fā)人員來(lái)說(shuō),強(qiáng)烈建議按照上面的步驟進(jìn)行開(kāi)發(fā)調(diào)試,因?yàn)樵S多初級(jí)人員無(wú)法像高級(jí)開(kāi)發(fā)人員那樣,可以從機(jī)器的狀態(tài)和節(jié)點(diǎn)信息,快速推斷出可能出問(wèn)題的模塊或者環(huán)節(jié)。接下來(lái),我將詳細(xì)的描述如何確認(rèn)每一個(gè)環(huán)節(jié)。

1.驅(qū)動(dòng)和設(shè)備樹(shù)信息確認(rèn)及獲取

對(duì)于安卓模式來(lái)說(shuō),項(xiàng)目中所用的大部分器件的驅(qū)動(dòng)和設(shè)備樹(shù)均需要從器件廠的FAE處獲取,比如指紋,LCD,sensor,NFC。當(dāng)我們拿到這類(lèi)器件的設(shè)備樹(shù)和驅(qū)動(dòng)后,結(jié)合硬件原理圖進(jìn)行設(shè)備樹(shù)的適配,把驅(qū)動(dòng)和設(shè)備樹(shù)放在本地代碼相應(yīng)位置處,然后進(jìn)行編譯配置進(jìn)行編譯即可。

除了上述類(lèi)型的器件外,還有一類(lèi)器件,比如SD卡驅(qū)動(dòng),按鍵驅(qū)動(dòng),指示燈驅(qū)動(dòng)等會(huì)隨著平臺(tái)方(高通,展銳,MTK等)的基線進(jìn)行釋放,但也有例外,我最近從事的MTK平臺(tái)的項(xiàng)目,其釋放的基線中就不包含某一功能的驅(qū)動(dòng),最后我是從MTK平臺(tái)索要的驅(qū)動(dòng)代碼,然后進(jìn)行的功能調(diào)試。

對(duì)于一些特殊的定制化功能,可能就沒(méi)有供應(yīng)商,且平臺(tái)默認(rèn)也不支持這種功能,這種時(shí)候就需要自己編寫(xiě)驅(qū)動(dòng)和設(shè)備樹(shù)。

綜上所述,假如當(dāng)前代碼中缺少對(duì)應(yīng)平臺(tái)的驅(qū)動(dòng)和設(shè)備樹(shù),需要通過(guò)平臺(tái)提供的渠道索要獲取,其他驅(qū)動(dòng)可以從器件供應(yīng)商處獲取。那么問(wèn)題來(lái)了,我們?nèi)绾闻袛喈?dāng)前代碼是否已包含我們需要的驅(qū)動(dòng)和設(shè)備樹(shù)呢?

實(shí)際上,對(duì)于有經(jīng)驗(yàn)的工程師來(lái)說(shuō),通常只看代碼就能很快判斷出是否缺少驅(qū)動(dòng)或者設(shè)備樹(shù)配置,畢竟他們對(duì)代碼實(shí)現(xiàn)等已經(jīng)很熟悉了。但對(duì)于新手來(lái)說(shuō),通常要先了解對(duì)應(yīng)平臺(tái)下某一模塊代碼架構(gòu)和實(shí)現(xiàn)等,才能做出判斷,下面是我入門(mén)時(shí)所采用的方式,供新手作為參考:

  • 從平臺(tái)方MTK,高通或者展銳等提供的渠道中獲取對(duì)應(yīng)的文檔,如下圖所示,是我獲取的MTK文檔,這種方式獲取的文檔是比較權(quán)威的。

圖片

  • 通過(guò)網(wǎng)絡(luò)搜索相關(guān)系列教程,網(wǎng)上的內(nèi)容比較繁多,而且系列教程的比例是比較少的。對(duì)于需要入門(mén)的開(kāi)發(fā)者來(lái)說(shuō),盡量查找系列類(lèi)教程。
  • 向別人請(qǐng)教,有些公司會(huì)有自己的代碼架構(gòu),這種只能通過(guò)公司內(nèi)部途徑,或者自己看代碼,文檔來(lái)做進(jìn)一步了解。

2.驅(qū)動(dòng)和設(shè)備樹(shù)編譯

實(shí)際上,編譯是個(gè)龐大的系統(tǒng),但在本文不打算說(shuō)明編譯相關(guān)內(nèi)容,僅僅用來(lái)說(shuō)明我們的驅(qū)動(dòng)和設(shè)備樹(shù)是否被編譯到。

對(duì)于驅(qū)動(dòng)來(lái)說(shuō),當(dāng)進(jìn)行編譯后,會(huì)在特定路徑下生成對(duì)應(yīng)的中間文件,我們可以通過(guò)查看是否有中間文件,或者中間文件的時(shí)間戳是否更新,從而確認(rèn)驅(qū)動(dòng)是否已經(jīng)編譯。

下圖中顯示了中間文件的路徑為:out/target/product/(項(xiàng)目對(duì)應(yīng)路徑)/obj/KERNEL_OBJ/drivers (圖中省略了個(gè)人或者項(xiàng)目信息)。

圖片

對(duì)于設(shè)備樹(shù)來(lái)說(shuō),當(dāng)進(jìn)行編譯后,同樣也可以在out路徑中找到,如下圖是采用在設(shè)備樹(shù)編譯的中間文件中查找關(guān)鍵字的方式,采用的命令是grep “cd-gpios” .–rn,此處查找的cd-gpios是SD卡相關(guān)功能中設(shè)備樹(shù)中的配置項(xiàng),從下圖中可以看出當(dāng)前我的SD卡對(duì)應(yīng)的設(shè)備樹(shù)確實(shí)已經(jīng)編譯,且采用的cd檢測(cè)引腳是GPIO4。假如在設(shè)備樹(shù)中修改了cd檢測(cè)引腳,那么可以在編譯后重新采用下圖中的方式來(lái)確認(rèn)修改是否生效。

當(dāng)發(fā)現(xiàn)驅(qū)動(dòng)或者設(shè)備樹(shù)沒(méi)有編譯,那就需要查看配置是否正確,此處要注意有些公司會(huì)對(duì)代碼進(jìn)行局部重構(gòu),重構(gòu)后的代碼對(duì)應(yīng)的中間文件可能會(huì)因?yàn)榫幾g腳本的原因而存在于其他路徑,本文中僅僅說(shuō)明上圖中的兩個(gè)標(biāo)準(zhǔn)路徑,供大家學(xué)習(xí)了解。

3.鏡像中是否包含修改

鏡像本質(zhì)上是打包壓縮,因其進(jìn)行了壓縮,所以無(wú)法使用grep等類(lèi)似方式來(lái)查詢鏡像中是否進(jìn)行了修改,要想確認(rèn)是否包含了修改,可以采用反編譯的方式,且大多數(shù)平臺(tái)代碼路徑編譯out/host/下是有對(duì)應(yīng)的反編譯工具,比如反編譯dtbo.img(設(shè)備樹(shù)相關(guān)鏡像),就需要用到out/host下的反編譯工具mkdtimg 和dtc,但是該方法不常見(jiàn),通常我就是采用時(shí)間戳來(lái)進(jìn)行簡(jiǎn)單判斷,刷機(jī)時(shí)采用最近的鏡像即可。

4.判斷硬件環(huán)境中是否有對(duì)應(yīng)驅(qū)動(dòng)和設(shè)備樹(shù)信息

我們得感謝內(nèi)核的sys架構(gòu),我們的驅(qū)動(dòng)和設(shè)備樹(shù)均會(huì)在/sys/bus下的對(duì)應(yīng)路徑創(chuàng)建對(duì)應(yīng)的節(jié)點(diǎn)信息,只有在該路徑下對(duì)應(yīng)的總線下能找到驅(qū)動(dòng)和設(shè)備樹(shù)信息(比如在/sys/bus/platform/device和/sys/bus/platform/driver),我們才可以開(kāi)始調(diào)試驅(qū)動(dòng),否則你所做的驅(qū)動(dòng)調(diào)試工作將是徒勞的。

如下圖所示是在SPI總線(/sys/bus/spi)的drivers路徑下查找到對(duì)應(yīng)的驅(qū)動(dòng)信息和在devices下找到的設(shè)備樹(shù)信息。

圖片

在進(jìn)行查找的時(shí)候,首先我們需要知道驅(qū)動(dòng)和設(shè)備樹(shù)對(duì)應(yīng)的總線信息。上圖中對(duì)應(yīng)的驅(qū)動(dòng)代碼在加載的時(shí)候采用spi_register_driver函數(shù)來(lái)把對(duì)應(yīng)驅(qū)動(dòng)注冊(cè)到spi總線,所以是在spi下總線查找對(duì)應(yīng)的信息的。倘若您的代碼中采用的是platform_driver_register函數(shù),那么就應(yīng)該在/sys/bus/platform總線下查找。若采用i2c_register_driver注冊(cè)驅(qū)動(dòng),那么就應(yīng)該在/sys/bus/i2c總線下查找。總之,您代碼中使用的驅(qū)動(dòng)注冊(cè)函數(shù)就決定了您的驅(qū)動(dòng)對(duì)應(yīng)的總線信息,在對(duì)應(yīng)總線下查找信息即可。

假如您的設(shè)備樹(shù)是在spi節(jié)點(diǎn)下,那就需要在/sys/bus/spi/device下查找對(duì)應(yīng)的設(shè)備樹(shù)信息。假如您的設(shè)備是在I2C節(jié)點(diǎn)下,那就需要在/sys/bus/i2c/device下查找對(duì)應(yīng)的設(shè)備樹(shù)信息??傊?,設(shè)備樹(shù)中添加節(jié)點(diǎn)的位置就決定了您設(shè)備樹(shù)對(duì)應(yīng)的總線信息,需要在對(duì)應(yīng)的總線下查找對(duì)應(yīng)的設(shè)備信息。

5.總結(jié)

本文沒(méi)有談及設(shè)計(jì)驅(qū)動(dòng)和設(shè)備樹(shù)的任何編寫(xiě)注意事項(xiàng)或者技巧,也并非代碼調(diào)試技巧,而是說(shuō)明了在代碼調(diào)試過(guò)程中的幾個(gè)關(guān)鍵注意點(diǎn),只有在這些關(guān)鍵點(diǎn)全部沒(méi)問(wèn)題的情況下,才能開(kāi)始代碼調(diào)試。

作者介紹

趙青窕,51CTO社區(qū)編輯,從事多年驅(qū)動(dòng)開(kāi)發(fā)。研究興趣包含安全OS和網(wǎng)絡(luò)安全領(lǐng)域,發(fā)表過(guò)網(wǎng)絡(luò)相關(guān)專(zhuān)利。

責(zé)任編輯:武曉燕 來(lái)源: 51CTO技術(shù)棧
相關(guān)推薦

2021-03-02 06:02:03

Kafka高并發(fā)系統(tǒng)

2012-05-16 13:43:20

操作系統(tǒng)故障檢修系統(tǒng)管理

2013-10-18 17:09:18

Windows 8.1微軟

2021-06-04 10:11:07

鴻蒙安卓操作系統(tǒng)

2010-12-02 16:08:09

AMD山貓服務(wù)器

2021-10-31 20:07:49

Windows驅(qū)動(dòng)開(kāi)發(fā)

2023-11-27 07:37:50

面試協(xié)程池

2012-01-16 10:41:25

安全互聯(lián)網(wǎng)IT部門(mén)

2016-04-20 09:49:25

網(wǎng)絡(luò)測(cè)試網(wǎng)絡(luò)優(yōu)化

2020-05-27 15:14:55

iOSiPhone更新

2023-12-12 08:02:10

2022-11-09 07:20:43

調(diào)用日志502報(bào)錯(cuò)nginx

2023-11-10 15:49:06

2024-01-05 09:23:09

Linux系統(tǒng)內(nèi)存內(nèi)存指標(biāo)

2018-11-08 09:09:37

Linux系統(tǒng)恢復(fù)

2022-09-19 08:35:28

Kafka節(jié)點(diǎn)故障

2023-06-05 08:36:04

SQL函數(shù)RANK()

2012-01-13 13:05:41

Scale Out網(wǎng)絡(luò)

2009-03-26 18:09:06

2022-04-22 17:07:02

源代碼開(kāi)源代碼泄漏
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)