2017-07-07 149 views
1

我編譯我的攝像頭驅動程序,並嘗試從我的目標板測試i.MX6Q 我面臨着嵌入式Linux設備驅動程序錯誤代碼1-001a?

探頭1-001a的失敗,出現錯誤-16

錯誤,當我看看dmesg | grep camera_name,我認爲1-001a是指設備驅動程序camera_name @ 1a。 這是我的設備驅動程序

camera_name: [email protected] { 
    compatible = "camera,camera_name"; 
    reg = <0x1a>; 
    inck-name = "mclk"; 
    xvs-output-len = <8>; 
    xclr-gpio = <&gpio1 6 1 GPIO_ACTIVE_LOW>; 
    pwn-gpios = <&gpio1 6 1>; 
    clock-names = "csi_mclk"; 
    DOVDD = <&reg_1p8v>; 
    AVDD = <&reg_2p9v>; 
    DVDD = <&reg_1p2v>; 
    rst-gpios = <&gpio1 6 1>; /* xclr */  
    ipu_id = <0>;    
    csi_id = <0>; 
    mclk = <37125000>; 
    mclk_source = <0>; 
    lanes = <4>; 
}; 

但我不明白這個錯誤是什麼意思?你有什麼建議嗎?我無法找到任何有關它的信息。

非常感謝。

最好的問候。

+1

檢查代碼中的* include/asm-generic/errno-base.h *。 – 0andriy

回答

3

此錯誤日誌probe of 1-001a failed with error -16告訴我們:

  • .probe功能的設備的驅動程序確定爲1-001a
  • 有返回錯誤值-EBUSY

設備-t問題中提到的ree節點屬於設備驅動程序。

要由Linux內核
實現對上述設備的設備驅動程序中定位C文件瞭解上述故障的原因,

  1. 開始。

  2. 下一步查找註冊爲設備驅動程序中「.probe」處理程序的函數。

  3. 檢查在什麼條件下返回-EBUSY


errno-base.h包含Linux內核中定義的各種常見錯誤號的預定義的約定。 Linux內核設備驅動程序和各種Linux內核子系統中的大多數函數都使用這些錯誤代碼作爲返回值來表示錯誤條件。

+0

感謝您的明確回覆,我看了errno-base.h並找到了-EBUSY #define \t EBUSY \t/*設備或資源忙* /'是否會選擇錯誤的gpio節點或設備樹上的i2c節點?我想知道我們如何決定根據設備選擇哪個節點?是否有任何資源,因爲我選擇了ov5640設備樹參考中的xclr-gpio和pwn-gpios,因爲此錯誤可能會發生。 – Mustafa

+1

你猜的是一種可能性。確定它的一個可靠方法是讀取驅動程序的探測功能並檢查它返回的條件-EBUSY。如果驅動程序在多個條件下返回EBUSY,則可以嘗試在每個條件分支中添加'printk()'語句以確認探測函數內的流程。 – TheCodeArtist

+0

感謝您的建議,它幫助我弄清楚發生這個錯誤的代碼的哪一部分,我寫了pr_info();函數而不是printk();但我認爲兩者都是一樣的。非常感謝 。我想再問一個問題。在我們編寫設備樹節點時,例如如何確定應該選擇哪個gpios,是否有關於如何選擇這些gpşos或其他東西的任何信息或文檔? – Mustafa

相關問題