Armadilloフォーラム

IoT G4 spidev0.0が作成されない

nishioka

2023年8月9日 17時01分

お世話になっております。

iot-g4でspiの設定を行ったのですが、armadilloで/dev/spidev0.0が作成されません。

以下を参照しながら作業を行いました。
https://armadillo.atmark-techno.com/howto/aiotg4-connect-g4-spi
https://armadillo.atmark-techno.com/forum/armadillo/14913

1. at-dtwebを用いて、ECSPI1を設定しました。

2. kernelConfigの"User mode SPI device drive support"は有効になっています。

3. mkswu/at-dtweb-Armadillo-IoT_G4/at-dtweb.desc からupdate.swuを作成しました。

4. 作成したswuでアップデートを行いましたが、作成されませんでした。

何か手順が抜けているのでしょうか。
以上、よろしくお願い致します。

ファイル ファイルの説明
設定.png
コメント

at_ohsawa

2023年8月9日 18時53分

at-dtwebの出力したdtboとdescを使ってmkswuしたということですね。

作業そのものより、実機の状態が不明なので、次の確認をしてみてください。

armadillo:# cat /boot/overlays.txt
fdt_overlays=armadillo_iotg_g4-at-dtweb.dtbo

(この記述が無ければ、at-dtwebの生成したdtboが読み込まれません)

armadillo:# find /sys/firmware/devicetree/base  |grep ecspi1
./soc@0/bus@30000000/pinctrl@30330000/ecspi1grp
./soc@0/bus@30000000/pinctrl@30330000/ecspi1grp/fsl,pins
./soc@0/bus@30000000/pinctrl@30330000/ecspi1grp/phandle
./soc@0/bus@30000000/pinctrl@30330000/ecspi1grp/name
./__symbols__/ecspi1

(ここで、最後の行の./__symbols__/ecspi1だけしか無ければ、dtboが正しく生成されていないか
何か古い物をswuに入れた可能性が有ります。)

上の状態になっていなければ、device-treeの問題です。
mkswuしているものやswupdateの実行に成功したかどうかの確認をしてみてください。

ここまで問題なければ後はkernel本体側ですが、
実はspidevはカーネルモジュールが既にabosに付属しているため再ビルド不要です。

(今年の3月のリリースから付属しています、もしそれ以前のバージョンであれば、
このモジュールと関係なくABOSをアップデートしたほうが良い程度には古いです)

モジュールが付属しているのか確かめる方法

armadillo:~# uname -r
5.10.175-r0  < ここが175以上であればモジュールが付属しています

ビルド済みのモジュールが付属しているABOSの中では、次の手順でspidevを有効化して、永続化できます。

armadillo:# modprobe spidev #spidevの読み込み
armadillo:# persist_file -rv /lib/modules #永続化

再起動後にモジュールが有効になっているかlsmodで確認できます。

armadillo:# lsmod
(略)
spidev                 20480  0
(略)

ここまで完了できていれば/dev/spidev0.0が存在しているはずです。

nishioka

2023年8月10日 8時29分

at_ohsawa様
ありがとうございます。

"cat /boot/overlays.txt" の確認

armadillo:~# cat /boot/overlays.txt
fdt_overlays=armadillo_iotg_g4-aw-xm458.dtbo armadillo_iotg_g4-at-dtweb.dtbo

"find /sys/firmware/devicetree/base |grep ecspi1"の確認

armadillo:~# find /sys/firmware/devicetree/base |grep ecspi1
/sys/firmware/devicetree/base/soc@0/bus@30000000/pinctrl@30330000/ecspi1grp
/sys/firmware/devicetree/base/soc@0/bus@30000000/pinctrl@30330000/ecspi1grp/fsl,pins
/sys/firmware/devicetree/base/soc@0/bus@30000000/pinctrl@30330000/ecspi1grp/phandle
/sys/firmware/devicetree/base/soc@0/bus@30000000/pinctrl@30330000/ecspi1grp/name
/sys/firmware/devicetree/base/__symbols__/ecspi1

アップデートの確認

base_os 3.17.4-at.8
boot 2020.4-at16
cwm 1
extra_os.at_dtweb 3
extra_os.cwm 1
extra_os.karnel 2
extra_os.kernel 5.10.82-3
extra_os.start 1
extra_os.tmcUpdate 12

問題なくアップデートされていることを確認しました。

モジュールが付属しているのか確認

armadillo:~# uname -r
5.10.180
<code>
armadillo:# modprobe spidev #spidevの読み込み
<code>
armadillo:~# modprobe spidev
modprobe: can't change directory to '5.10.180': No such file or directory

となりました。kernelのバージョンが問題なのでしょうか。
以上、よろしくお願い致します。

at_dominique.m…

2023年8月10日 9時04分

nishiokaさん、

横からすみません、
マルティネです。

> armadillo:~# modprobe spidev
> modprobe: can't change directory to '5.10.180': No such file or directory

> となりました。kernelのバージョンが問題なのでしょうか。

カーネルを自分でインストールしましたが、モジュールはインストールしてないようです。

Armadillo Base OS で使っているカーネルは様々なハードウェアを対応するためにモジュールを使っていますので、インストールするときにモジュールも必ずインストールするようにしてください。
マニュアルに説明されている「ビルドしたカーネルは、以下に示すどちらかの方法でインストールしてください。」で説明されている手順を参考にできます:
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

ちなみに、spidev だけでしたら標準のカーネルでもモジュールを提供しています。
「abos-ctrl restore-kernel」でカーネルを元に戻して、再起動すれば spidev を使えるようになると思います。
(標準で提供していない、あるいはカスタムなモジュールを使用している場合はもちろん自分のカーネルでも使えます)

よろしくお願いします。

nishioka

2023年8月10日 9時25分

マルティネ様
ありがとうございます。

> Armadillo Base OS で使っているカーネルは様々なハードウェアを対応するためにモジュールを使っていますので、インストールするときにモジュールも必ずインストールするようにしてください。
> マニュアルに説明されている「ビルドしたカーネルは、以下に示すどちらかの方法でインストールしてください。」で説明されている手順を参考にできます:
> https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

マニュアル「swupdate でインストールする」を参考にしてアップデートを既に行っています。
以下がアップデート用のdesc内容です。

# set version once for all below swdesc elements unless
# forced with --version
swdesc_option component=extra_os.kernel version=5.10.82-3
 
# write over files in /boot
swdesc_files --dest /boot "Image" "armadillo_iotg_g4.dtb"

> ちなみに、spidev だけでしたら標準のカーネルでもモジュールを提供しています。
> 「abos-ctrl restore-kernel」でカーネルを元に戻して、再起動すれば spidev を使えるようになると思います。
> (標準で提供していない、あるいはカスタムなモジュールを使用している場合はもちろん自分のカーネルでも使えます)

"abos-ctrl restore-kernel"を行ったところ、

armadillo:~# abos-ctrl restore-kernel
Cloning current partition to other side. Rollback in case of error.
Starting clone to /dev/mmcblk2p2
Reusing up-to-date rootfs
Updating appfs snapshots
Reusing up-to-date bootloader
Rollback clone successful
Removing old kernel
Nothing to do, none of the requested files exist: /boot/Image
ERROR: Could not remove kernel image

となりエラーになります。

以上、よろしくお願い致します。

ファイル ファイルの説明
kernel.png

at_dominique.m…

2023年8月10日 9時50分

nishiokaさん、

> マニュアル「swupdate でインストールする」を参考にしてアップデートを既に行っています。
> 以下がアップデート用のdesc内容です。

> # set version once for all below swdesc elements unless
> # forced with --version
> swdesc_option component=extra_os.kernel version=5.10.82-3
> 
> # write over files in /boot
> swdesc_files --dest /boot "Image" "armadillo_iotg_g4.dtb"

申し訳ございません、この desc ファイルはすごく古くて、2021年12月以前のバージョンでモジュールをまだインストールしていませんでした。
マニュアルも今年の3月に明確にモジュールのインストールの話を追加して、使用中のカーネルバージョンからみるとちょうど同じころでしたね…お手数をおかけしました。

ATDE で「sudo apt update && sudo apt install mkswu」で mkswu をアップデートして、新しい手順にしたがえばインストールされます…が、今回は標準カーネルでよさそうなのでそちらの手順を続いてみましょう。

> "abos-ctrl restore-kernel"を行ったところ、

> armadillo:~# abos-ctrl restore-kernel
> Cloning current partition to other side. Rollback in case of error.
> Starting clone to /dev/mmcblk2p2
> Reusing up-to-date rootfs
> Updating appfs snapshots
> Reusing up-to-date bootloader
> Rollback clone successful
> Removing old kernel
> Nothing to do, none of the requested files exist: /boot/Image
> ERROR: Could not remove kernel image

> となりエラーになります。

/boot/Image がなければ起動できないと思いますが、手動で編集しましたか?今後のバージョンでエラーせずに続くように直します。

続いても問題ないので、お手数ですがスクリプトの続きを Armadillo に手動に実行してください:

sed -i -e '/POST \/\(boot\|lib\/modules\)$/d' /etc/swupdate_preserve_files && persist_file /etc/swupdate_preserve_files
persist_file -a update
persist_file -a del 'linux-at-*'
persist_file -dr /lib/modules
persist_file -a add linux-at-x2@atmark

今の状態では起動できなくなっていると思いますので、最後のコマンドだけでも成功させるまで再起動しないでください。
コマンドを実行した後に、 ls /boot/Image でファイルがあるはずです。

よろしくお願いします。

nishioka

2023年8月10日 10時23分

マルティネ様
ありがとうございます。

> 続いても問題ないので、お手数ですがスクリプトの続きを Armadillo に手動に実行してください:
>

> sed -i -e '/POST \/\(boot\|lib\/modules\)$/d' /etc/swupdate_preserve_files && persist_file /etc/swupdate_preserve_files
> persist_file -a update
> persist_file -a del 'linux-at-*'
> persist_file -dr /lib/modules
> persist_file -a add linux-at-x2@atmark
> 

を行ったところ、spidev0.0 が作成されました。ありがとうございます。

> ATDE で「sudo apt update && sudo apt install mkswu」で mkswu をアップデートして、新しい手順にしたがえばインストールされます… とのことですが、

atmark@atde9:~$ sudo apt update && sudo apt install mkswu
[sudo] atmark のパスワード:
ヒット:1 http://ftp.jp.debian.org/debian bullseye InRelease                    
無視:2 http://download.atmark-techno.com/debian bullseye InRelease             
ヒット:3 http://ftp.jp.debian.org/debian bullseye-updates InRelease            
取得:4 http://security.debian.org/debian-security bullseye-security InRelease [48.4 kB]
ヒット:5 http://download.atmark-techno.com/debian bullseye Release             
ヒット:6 http://packages.microsoft.com/repos/code stable InRelease
48.4 kB を 3秒 で取得しました (13.9 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了        
パッケージはすべて最新です。
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
mkswu はすでに最新バージョン (4.14.1-1) です。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  linux-headers-5.10.0-20-amd64 linux-headers-5.10.0-20-common
  linux-image-5.10.0-20-amd64
これを削除するには 'sudo apt autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

最新の状態でした。手順が変わっているとの事ですが、マニュアルに記載されている

/usr/share/mkswu/examples/kernel_update_plain.install.sh ~/mkswu/kernel.desc

の事でしょうか。

以上。よろしくお願い致します。

at_dominique.m…

2023年8月10日 10時45分

nishiokaさん

>手順が変わっているとの事ですが、マニュアルに記載されている

> /usr/share/mkswu/examples/kernel_update_plain.install.sh ~/mkswu/kernel.desc

> の事でしょうか。

はい、そのコマンドをカーネルのビルドディレクトリで実行することで ~/mkswu/kernel.desc が生成されて、 ~/mkswu/kernel ディレクトリにカーネルの Image, dtb/dtbo とモジュールがインストールされます。

前の手順のように(新しい) /usr/share/mkswu/examples/kernel_update_plain.desc を手動にコピーして、コメントに記載されているコマンドで必要なファイルをインストールしてもいいですが、...install.sh のスクリプトで色々確認していますので推奨します。

よろしくお願いします

at_dominique.m…

2023年8月10日 11時27分

nishiokaさん

連続の返事ですみません。
自分のカーネルをインストールすることに問題があるわけではありませんが、参考までになぜビルドしているかを教えていただけますでしょうか?

spidev だけでしたら先ほど確認できましたので、他の(標準のカーネルにない)モジュールが必要ということでしょうか?
それか swu を使って他の Armadillo を救いたいだけでしょうか?

後者でしたら、カーネルを戻す .desc ファイルを準備しますのでその方がいいかもしれません。
(Armadillo Base OS を更新しているように見えますので、カスタムなカーネルが不要の場合にカーネルの更新も使えるようにした方が脆弱性などの面で便利だと思います)

よろしくお願いします。

nishioka

2023年8月10日 12時01分

マルティネ様

> 連続の返事ですみません。
> 自分のカーネルをインストールすることに問題があるわけではありませんが、参考までになぜビルドしているかを教えていただけますでしょうか?
>
> spidev だけでしたら先ほど確認できましたので、他の(標準のカーネルにない)モジュールが必要ということでしょうか?
> それか swu を使って他の Armadillo を救いたいだけでしょうか?
>
> 後者でしたら、カーネルを戻す .desc ファイルを準備しますのでその方がいいかもしれません。
> (Armadillo Base OS を更新しているように見えますので、カスタムなカーネルが不要の場合にカーネルの更新も使えるようにした方が脆弱性などの面で便利だと思います)
>
> よろしくお願いします。

EDIDの固定方法とタッチパネルが動作しなかった件でカーネルの設定を変更したためです。

EDIDの固定方法: https://armadillo.atmark-techno.com/forum/armadillo/14580
タッチパネル:https://armadillo.atmark-techno.com/forum/armadillo/15679

手順の件ですが、

atmark@atde9:~/ダウンロード/linux-5.10-5.10.180-r0$ /usr/share/mkswu/examples/kernel_update_plain.install.sh ~/mkswu/kernel.desc
ERROR: Please build kernel first

となり作成することが出来ません。
linux-5.10-5.10.180-r0/tools/build が存在しますがこの中で行うのでしょうか。

以上、よろしくお願い致します。

at_dominique.m…

2023年8月10日 12時19分

nishiokaさん

> EDIDの固定方法とタッチパネルが動作しなかった件でカーネルの設定を変更したためです。
>
> EDIDの固定方法: https://armadillo.atmark-techno.com/forum/armadillo/14580
> タッチパネル:https://armadillo.atmark-techno.com/forum/armadillo/15679

返事ありがとうございます。。。すみませんでした、タッチパネルは私が回答していたのに忘れていました。
色々ありましたね。確かにカスタムなカーネルが必要です。
インストール方法に戻ります。

> atmark@atde9:~/ダウンロード/linux-5.10-5.10.180-r0$ /usr/share/mkswu/examples/kernel_update_plain.install.sh ~/mkswu/kernel.desc
> ERROR: Please build kernel first

> となり作成することが出来ません。
> linux-5.10-5.10.180-r0/tools/build が存在しますがこの中で行うのでしょうか。

カーネルをビルドしたディレクトリで実行するコマンドで間違いありません。

このエラーメッセージは、(現在・ビルド)ディレクトリに「vmlinux」というファイルが存在しない場合のエラーです。
カーネルをビルドした時に生成されたはずのファイルですが、この 「~/ダウンロード/linux-5.10-5.10.180-r0」ディレクトリはまだビルドしてないディレクトリでしょうか?
必要なコンフィグ変更/確認 (「make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig」)を行った後に
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j5」を実行すると必要なファイル(vmlinux, arch/arm64/boot/Image, モジュールファイルなど)が生成されますので、もう一度ビルドしてみてください。

その後にまたインストールスクリプトがエラーしていたらまた聞いてください。

よろしくお願いします。

nishioka

2023年8月10日 15時31分

マルティネ様、at_ohsawa様

返信遅くなり申し訳ありません。
無事、spidev0.0の作成は出来ました。ありがとうございました。

spi通信についてお伺いしたいのですが、枠を変えた方がよろしいでしょうか。

以上、よろしくお願いいたします。

at_dominique.m…

2023年8月10日 15時54分

nishiokaさん

> 無事、spidev0.0の作成は出来ました。ありがとうございました。

報告ありがとうございます。

> spi通信についてお伺いしたいのですが、枠を変えた方がよろしいでしょうか。

そうですね、ここでも回答しますが別のスレッドを作っていただければ幸いです。

よろしくお願いします。