Linuxで「欠けている」i2cインターフェースを追加するには?

Linuxで「欠けている」i2cインターフェースを追加するには?

dmesg私はDigi ConnectCore 6UL SBC Proを利用する組み込みプロジェクトに取り組んでいます。

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.

3番目のインターフェイスがどこにあるか知りたいです。また、これは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インターフェイスを見ることができないようです。 3番目の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出力に一致するファイルが1つもないようです...:

$ 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

*.dtbSDカードから起動した場合は、SDカードでファイルを見つけることができます。このコンパイルされたデバイスツリーファイルは、どのハードウェアが利用可能かをカーネルに伝えます。これをファイルでコンパイルされたカスタムバージョンに置き換えることができます*.dts

アップストリームのLinuxソースコードで見ることができます。imx6ul-ccimx6ulsbcpro.dtsこれは取締役会の選択でなければなりません。ただし、i2c1含まれている場合にのみ有効になるようです。imx6ul.dtsi実際には4つのI2Cインターフェースがあることがわかります。

少なくともアップストリームLinuxカーネルを使用している場合は、次のものを追加して3番目のI2Cインターフェイスを有効にする必要がありますmx6ul-ccimx6ulsbcpro.dts

&i2c3 {
    status = "okay";
};

次に、make dtbsビルド DTB を実行します。

次のコマンドを使用して DTB をデコンパイル/コンパイルすることもできます。直接

関連情報