Jetson TX2デバイスツリー、i2cノード、およびカメラドライバのロード

Jetson TX2デバイスツリー、i2cノード、およびカメラドライバのロード

カメラドライバをロードすると、Jetson TX2の動作が少し混乱します。

以下は、デバイスツリーのIMX274定義です。

i2c@3180000 {
        reg = <0x0 0x3180000 0x0 0x100>;
        dmas = <0x19 0x17 0x19 0x17>;
        interrupts = <0x0 0x1b 0x4>;
        compatible = "nvidia,tegra186-i2c";
        clock-names = "div-clk", "parent", "slow-clk";
        reset-names = "i2c";
        clock-frequency = <0x61a80>;
        scl-gpio = <0x12 0x72 0x0>;
        sda-gpio = <0x12 0x73 0x0>;
        clocks = <0xd 0x4b 0xd 0x10d 0xd 0x5c>;
        resets = <0xd 0x15>;
        status = "okay";
        #address-cells = <0x1>;
        phandle = <0x7c>;
        #stream-id-cells = <0x1>;
        #size-cells = <0x0>;
        dma-names = "rx", "tx";
        linux,phandle = <0x7c>;

        imx274_a@1a {
                reg = <0x1a>;
                mclk = "extperiph1";
                devnode = "video0";
                avdd-reg = "vana";
                compatible = "nvidia,imx274";
                clock-names = "extperiph1", "pllp_grtba";
                reset-gpios = <0x12 0x8d 0x0>;
                physical_h = "2.738";
                physical_w = "3.674";
                clocks = <0xd 0x59 0xd 0x10d>;
                vana-supply = <0x1a>;
                sensor_model = "imx274";
                iovdd-reg = "vif";
                delayed_gain = "true";
                vif-supply = <0x1a>;
                dvdd-reg = "vdig";
                vdig-supply = <0x1a>;

                mode0 {
                    ...
                }

                ports {
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;

                        port@0 {
                                reg = <0x0>;

                                endpoint {
                                        bus-width = <0x4>;
                                        remote-endpoint = <0x1d>;
                                        phandle = <0x94>;
                                        csi-port = <0x0>;
                                        linux,phandle = <0x94>;
                                };
                        };
                };
        };

i2c2 は i2c@3180000 のエイリアスなので、バス 2 でそのデバイスを見ることができると予想されます。もちろん、住所のあるバスでも見ることができます0x57

nvidia@tegra-ubuntu:~/kernel/kernel$ sudo i2cdetect -r -y 2
[sudo] password for nvidia: 
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- 
20: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --            

最初の質問が出ます。カーネルはバス上のi2cデバイスタイプをどのように識別しますか?このフィールドはすでに使用されているようですが、regデバイスツリーの0x1aはバスの0x57とはかなり異なります。

第二に、私が見ることができるように、モジュールは次のドライバと互換性があります。compatible = "nvidia,imx274";ただし、デバイスドライバは異なります。

nvidia@tegra-ubuntu:~/kernel/kernel$ sudo v4l2-ctl -D -d /dev/video0
Driver Info (not using libv4l2):
        Driver name   : tegra-video
        Card type     : vi-output, imx274 2-001a
        Bus info      : platform:15700000.vi:0
        Driver version: 4.4.38
        Capabilities  : 0x84200001
                Video Capture
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps   : 0x04200001
                Video Capture
                Streaming
                Extended Pix Format

だから何らかの理由で誤ったドライバがロードされているようです。これは本当ですか、それとも私が何かを逃したのですか?しかし、Argusを使用して画像をキャプチャすることは依然として可能です。

答え1

ランダムな答え:

dtsファイルのreg =�は型ではなく、i2cバスの周辺機器アドレスです。このアドレスはドライバによって登録されるため、i2c-Detect では検出されないため、i2c-Detect 出力のアドレス 1a に「UU」が表示されます。出力の「57」は別の周辺機器です。

nvidia TX2 v4l2世界では、/ dev / video0はセンサーが接続されているCSIに接続されたVIドライバを表します。 「v4l2-ctl -D」出力の「imx274 2-001a」は、このVIがアドレス0x1aの2番目(すべてのLinuxカーネルタイプ)i2cバスのimx274に接続されていることを示します。

関連情報