카메라 드라이버를 로드할 때 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에 있는 두 번째(모든 Linux 커널 종류) i2c 버스의 imx274에 연결되어 있음을 나타냅니다.