dmesg
저는 Digi ConnectCore 6UL SBC Pro를 활용하는 임베디드 프로젝트를 작업 중이며 시작 시 아래와 같이 3개의 I2C 인터페이스가 표시되어야 한다는 것을 알고 있습니다 .
i2c i2c-0: IMX I2C adapter registered
i2c i2c-0: can't use DMA, using PIO instead.
i2c i2c-1: IMX I2C adapter registered
i2c i2c-1: can't use DMA, using PIO instead.
i2c i2c-2: IMX I2C adapter registered
i2c i2c-2: can't use DMA, using PIO instead.
내 이미지를 부팅했는데 잘 부팅되었지만 3개가 아닌 2개의 인터페이스만 있습니다.
i2c i2c-0: IMX I2C adapter registered
i2c i2c-0: can't use DMA, using PIO instead.
i2c i2c-1: IMX I2C adapter registered
i2c i2c-1: can't use DMA, using PIO instead.
세 번째 인터페이스가 어디에 있는지 알고 싶습니다. 또한 이는 i2cdetect
다음과 같은 결과를 제공합니다. 원본 이미지:
# i2cdetect -l
i2c-1 i2c 21a4000.i2c I2C adapter
i2c-2 i2c 21a8000.i2c I2C adapter
i2c-0 i2c 21a0000.i2c I2C adapter
새 이미지와 비교:
# i2cdetect -l
i2c-1 i2c 21a4000.i2c I2C adapter
i2c-0 i2c 21a0000.i2c I2C adapter
커널이 주소 21a8000에서 I2C 인터페이스를 볼 수 없는 것 같습니다. 세 번째 I2C 장치도 볼 수 있도록 빌드를 수정하려면 어떻게 해야 합니까? 장치 트리 파일을 조사해 보았지만 이 문제를 어디에서 보고, 수정하고, 해결할 수 있는지 잘 모르겠습니다.
어떤 팁, 조언, 제안이라도 환영합니다!
/usr/local/dey-2.2~/tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/Documentation/devicetree/bounds/i2c/i2c-imx. 송신:
* Freescale Inter IC (I2C) and High Speed Inter IC (HS-I2C) for i.MX
Required properties:
- compatible :
- "fsl,imx1-i2c" for I2C compatible with the one integrated on i.MX1 SoC
- "fsl,imx21-i2c" for I2C compatible with the one integrated on i.MX21 SoC
- "fsl,vf610-i2c" for I2C compatible with the one integrated on Vybrid vf610 SoC
- reg : Should contain I2C/HS-I2C registers location and length
- interrupts : Should contain I2C/HS-I2C interrupt
- clocks : Should contain the I2C/HS-I2C clock specifier
Optional properties:
- clock-frequency : Constains desired I2C/HS-I2C bus clock frequency in Hz.
The absence of the property indicates the default frequency 100 kHz.
- dmas: A list of two dma specifiers, one for each entry in dma-names.
- dma-names: should contain "tx" and "rx".
- scl-gpios: specify the gpio related to SCL pin
- sda-gpios: specify the gpio related to SDA pin
- pinctrl: add extra pinctrl to configure i2c pins to gpio function for i2c
bus recovery, call it "gpio" state
Examples:
i2c@83fc4000 { /* I2C2 on i.MX51 */
compatible = "fsl,imx51-i2c", "fsl,imx21-i2c";
reg = <0x83fc4000 0x4000>;
interrupts = <63>;
};
i2c@70038000 { /* HS-I2C on i.MX51 */
compatible = "fsl,imx51-i2c", "fsl,imx21-i2c";
reg = <0x70038000 0x4000>;
interrupts = <64>;
clock-frequency = <400000>;
};
i2c0: i2c@40066000 { /* i2c0 on vf610 */
compatible = "fsl,vf610-i2c";
reg = <0x40066000 0x1000>;
interrupts =<0 71 0x04>;
dmas = <&edma0 0 50>,
<&edma0 0 51>;
dma-names = "rx","tx";
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c1>;
pinctrl-1 = <&pinctrl_i2c1_gpio>;
scl-gpios = <&gpio5 26 GPIO_ACTIVE_HIGH>;
sda-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>;
};
안녕하세요. 오랜 시간 공백을 겪게 되어 죄송하며 앞으로도 이 티켓을 계속 이용해주시기 바랍니다. @dirkt가 자신의 의견에서 제안한 대로 커널 소스에서 dts 및 dtsi 파일을 검색했지만 너무 많은 파일을 발견했습니다.
$ locate .dts | grep /arch/arm | grep /boot/dts | grep /usr/local/dey-2.2 | wc -l
1541
| grep -i i2c
위의 내용 대신 추가해도 | wc -l
결과가 나오지 않았습니다. 그렇다면 I2C
장치 트리의 올바른 위치에 장치를 추가하는 방법을 알고 싶습니다 .
다음과 같은 관련 문서를 찾을 수 있습니다 *.dts
.
$ find . -name "*imx6ul*.dts"
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-tx6ul-0011.dts
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-tx6ul-0010.dts
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-tx6ul-mainboard.dts
greping 후에는 i2c
위에서 본 i2c 출력과 일치하는 파일이 하나도 없는 것 같습니다...:
$ find . -name "*imx6ul*.dts" | xargs grep -i i2c
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts:&i2c1 {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: pinctrl-0 = <&pinctrl_i2c1>;
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts:&i2c2 {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: pinctrl-0 = <&pinctrl_i2c2>;
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts:&i2c3 {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: pinctrl-0 = <&pinctrl_i2c3>;
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: pinctrl_i2c1: i2c1grp {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: MX6UL_PAD_GPIO1_IO02__I2C1_SCL 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: MX6UL_PAD_GPIO1_IO03__I2C1_SDA 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: pinctrl_i2c2: i2c2grp {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: pinctrl_i2c3: i2c3grp {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: MX6UL_PAD_UART1_TX_DATA__I2C3_SCL 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-pico-hobbit.dts: MX6UL_PAD_UART1_RX_DATA__I2C3_SDA 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts:&i2c2 {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts: pinctrl-0 = <&pinctrl_i2c2>;
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts: pinctrl_i2c1: i2c1grp {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts: MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts: MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts: pinctrl_i2c2: i2c2grp {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts: MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-14x14-evk.dts: MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-tx6ul-mainboard.dts:&i2c_gpio {
./tmp/work/cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul-tx6ul-mainboard.dts:&i2c2 {
나는 다음을 발견했다: i2c@021a0000 { #address-cells = <1>; #size-cells = <0>; Compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c"; >;interrupt=<GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;clock=<&clks IMX6UL_CLK_I2C1>;status="disabled";};
i2c2: i2c@021a4000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c";
reg = <0x021a4000 0x4000>;
interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_I2C2>;
status = "disabled";
};
i2c3: i2c@021a8000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c";
reg = <0x021a8000 0x4000>;
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_I2C3>;
status = "disabled";
};
그중에는
cortexa7hf-neon-dey-linux-gnueabi/linux-libc-headers/4.8-r0/linux-4.8/arch/arm/boot/dts/imx6ul.dtsi
아마도 제가 작업 중인 장치 트리 파일이 있을 것입니다. 모든 i2c 인터페이스의 상태가 다음으로 설정되어 있다는 점은 주목할 가치가 있습니다."disabled"
답변1
*.dtb
SD 카드에서 부팅한 경우 SD 카드 에서 파일을 찾을 수 있습니다 . 이 컴파일된 장치 트리 파일은 어떤 하드웨어를 사용할 수 있는지 커널에 알려줍니다. 이를 파일에서 컴파일된 사용자 정의 버전으로 바꿀 수 있습니다 *.dts
.
업스트림 Linux 소스 코드에서 볼 수 있습니다.imx6ul-ccimx6ulsbcpro.dts이는 이사회의 선택이어야 합니다. 그러나 i2c1
포함된 경우 에만 활성화되는 것 같습니다 .imx6ul.dtsi실제로 4개의 I2C 인터페이스가 있음을 알 수 있습니다.
최소한 업스트림 Linux 커널을 사용하는 경우 다음을 추가하여 세 번째 I2C 인터페이스를 활성화할 수 있어야 합니다 mx6ul-ccimx6ulsbcpro.dts
.
&i2c3 {
status = "okay";
};
그런 다음 make dtbs
빌드 DTB를 실행합니다.
다음 명령을 사용하여 DTB를 디컴파일/컴파일할 수도 있습니다.직접.