Armadilloフォーラム

Armadillo-640へCAN1追加時のビルドエラーの対処方法について

mato_developer

2019年11月25日 9時54分

お世話になっております、上園です。

Armadillo-640のDTB作成におけるLinux カーネルをビルドについて
質問があります。

Armadillo-640のCON11にUART4、UART5、CAN1、CAN2の各インタフェース
を割り付けて通信を行います。
(Linuxカーネルは”linux-v14-at15”です)

Armadillo-640 マルチプレクス表(v1.1.0)より、以下のピンを割り当てました。

・UART4(8,11ピン)
・UART5(40,43ピン)
・CAN1(22,23ピン)
・CAN2(24,25ピン)

DTBファイル、および各DTISファイルの作成と修正を行いビルドを行いましたが、
CAN1のDTISファイルをincludeした状態でビルドエラーが発生しました。

なお、行末の設定値については、CAN1はCAN2と同じ値にしています。

dtsファイル、各インターフェースのDTISファイルとCAN1有効時の
ビルド結果を添付いたします。

お手数ですが、ご教授のほどよろしくお願いいたします。

コメント

佐藤です。

armadillo-640-can1.dtsi 内

            MX6UL_PAD_LCD_DATA08__CAN1_TX 0x0b0b0
            MX6UL_PAD_LCD_DATA09__CAN1_RX 0x0b0b0

としている個所を

            MX6UL_PAD_LCD_DATA08__FLEXCAN1_TX 0x0b0b0
            MX6UL_PAD_LCD_DATA09__FLEXCAN1_RX 0x0b0b0

と修正して再度ビルドしてみてください。

佐藤様

お世話になっております、上園です。

> armadillo-640-can1.dtsi 内
>

>             MX6UL_PAD_LCD_DATA08__CAN1_TX 0x0b0b0
>             MX6UL_PAD_LCD_DATA09__CAN1_RX 0x0b0b0
> 

> としている個所を
>

>             MX6UL_PAD_LCD_DATA08__FLEXCAN1_TX 0x0b0b0
>             MX6UL_PAD_LCD_DATA09__FLEXCAN1_RX 0x0b0b0
> 

> と修正して再度ビルドしてみてください。

修正と再ビルドを実行してみたところ、ビルドエラーが起こらずに
Linux カーネルとDTBが作成されました。

ご指摘いただきまして、ありがとうございました。

出来ればマルチプレクス表の更新をお願いしたく存じます。

佐藤です。

> 出来ればマルチプレクス表の更新をお願いしたく存じます。
申し訳ありません、こちら次の定期アップデートにて更新いたします。

また、dtsファイルと同じディレクトリにある imx6ul-pinfunc.h を参照していただくと、
正確な定義名がわかるかと思います。

佐藤様

お世話になっております、上園です。

定義名の紹介いただきありがとうございます。

11.2.2. Linux カーネルイメージの書き換えと11.2.3. DTB の書き換えに従い、
カーネルと作成したDTBを/dev/mmcblk0p2にあるファイルと書き換え、
シャットダウンの後で起動させたところ、起動自体は問題なくできました。

ただ、起動時のログをみると、追加したデバイス(CAN1/CAn2/UART4/UART5)の
起動ステータスがすべて-22を返していました。
(添付した起動ログの122行目~144行目)

このため、/devの直下に追加したデバイスが認識できてない状態です。

imx6ul-pinfunc.hのパラメータはi.MX6のリファレンスマニュアルを参照していますが、
内容の理解を行っている所です。

前回修正したditsファイルを含め、必要なファイルをアップロードしますので、
お手数ですが、ご教示のほど重ねてお願いいたします。

ファイル ファイルの説明
armadillo-640-can1.dtsi 前回のご指摘で修正したFLEXCAN1のdtis
imx6ul-pinfunc_h.txt imx6ul-pinfunc.hです(ヘッダファイルがアップロードできなかったため)
起動ログ.txt カーネルとDTBを書き換えたArmadillo-640の起動ログです

佐藤です。

armadillo-640.dts の冒頭で include している armadillo-640-lcd70ext-l00.dtsi 内での定義とぶつかってしまっているように見えます。

#include "armadillo-640-lcd70ext-l00.dtsi"

となっている箇所を削除して再度確認してみてください。

佐藤様

お世話になっております、上園です。

上記の箇所を削除してみましたが、「Starting kernel ...」で止まってしまいました。
(添付ファイルに起動時のログを置きます)

修正前の「a640.dtb」に差し替えると起動できるので、
別の問題でないかと思います。

過去ログに同様なことが無かったか確認してみます。

ファイル ファイルの説明
起動ログ_err.txt

溝渕です。

"arch/arm/boot/dts/armadillo-640.dtb"の、iomuxcノードにある以下の9行を
削除してみていただけますか。

    pinctrl-names = "default";
    pinctrl-0 = <
#ifdef ARMADILLO640_LCD70EXT_L00
            &pinctrl_lcd70ext_l00hog
#endif
#ifdef ARMADILLO640_AT_DTWEB
            &pinctrl_expansion_interfacehog
#endif
            >;

溝渕です。

問題の本質を書いていなかった為追記します。何度も投稿してすみません。

#include "armadillo-640-lcd70ext-l00.dtsi"

上記を削除した結果、iomuxcノードの中は次のように展開されます。

    pinctrl-names = "default";
    pinctrl-0 = <
            >;

現状のpinctrlドライバでは、空のpin定義を許容していないようです。これが
原因で起動しなくなっていました。

溝渕様

お世話になっております、上園です。
ご教示いただきましてありがとうございます。

UART4/5とFLEXCAN0/1のデバイスの認識することができました。
実行した内容は以下の通り。

・#include "armadillo-640-lcd70ext-l00.dtsi"の削除

・以下の文の削除

pinctrl-names = "default";
pinctrl-0 = <
#ifdef ARMADILLO640_LCD70EXT_L00
&pinctrl_lcd70ext_l00hog
#endif
#ifdef ARMADILLO640_AT_DTWEB
&pinctrl_expansion_interfacehog
#endif
>;

起動と設定を確認する限り、エラーが表示されなくなったこと
CANの設定と起動が実行でき、ifconfigで認識できたので
当方としては、Armadillo-640での準備が完了できた判断しています。

佐藤様、溝渕様にはお忙しいなかご教示いただきましてありがとうございました。
また、当方の不勉強も重なりご迷惑をおかけして申し訳ございませんでした。

ファイル ファイルの説明
起動ログ_正常.txt 起動とデバイス確認、CANの設定と起動画面