Armadilloフォーラム

ABOS Armadillo-610のデバッグについて

shun

2024年10月4日 15時08分

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

ABOS対応のArmadillo-610のVSCode上でブレーク実行のデバッグ確認をしたいのですが、どのようにすればよいでしょうか?

ご回答の程よろしくお願いいたします。

コメント

at_reika.yamazaki

2024年10月4日 19時15分

お世話になっております。山崎です。

対象となるアプリケーションは何になるでしょうか?
また、ABOSDE を使用しているという認識ですが、誤りでしたらご指摘ください。

python プロジェクトの場合は、以下のフォーラムが参考になるかと思います。
・VScodeとpythonスクリプトのpdbによるデバッグ環境構築について
https://armadillo.atmark-techno.com/index.php/forum/armadillo/18317

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

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

私用している環境はABOS DEです。
Armadillo-840mからArmadillo-610(ABOS対応)に移植したいと考えており、ATDE上のVS CodeでC言語によるコーディングをしております。

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

at_reika.yamazaki

2024年10月10日 13時05分

お世話になっております。山崎です。
お返事が遅れて申し訳ありません。
結論として vscode 上からのデバッグは難しそうです。
ご期待の方法とは異なると思いますが、ABOSDE の C言語プロジェクトを修正することで ATDE から gdb デバッグを実行できることはわかりました。
こちらの方法が参考になりましたら幸いです。
手順は以下になります。

1. app/src/Makefile の CFLAGS に -g を追加
以下は追加例です。

CFLAGS += -g -Wall -Wextra -MMD -MP

2. app/build/main, app/src/*.o, app/src/*.d ファイルを削除
リビルドする必要があるため、念のためファイルを削除してください。

3. container/packages.txt に gdb を追加
コンテナに gdb をインストールする必要があります。
以下は追加例です。

gdb
[build]
build-essential

4. config/app/conf の set_command の書き換え

#set_command c_launch
set_command sleep infinity

5. 「開発用 SWU を生成」タスクを実行
1~4 までの設定を反映させた development.swu が生成されるので、Armadillo にインストールしてください。
無事にインストールが終了するとプロジェクト名のコンテナが起動します。

6. プロジェクトのディレクトリに移動し、gdb デバッグを実行
ATDE のターミナルから以下のコマンドを実行します。

cd <プロジェクトのディレクトリ>
ssh -F config/ssh_config Armadillo "podman exec -it <プロジェクト名> gdb /vol_app/build/main"

gdb のログが表示されたら無事に接続できています。

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

お世話になっております。磯田です。
手順通りに実行しましたが、6.を実行すると以下のようなログが出力されました。

atmark@atde9:~/XXX $ ssh -F config/ssh_config Armadillo "podman exec -it XXX gdb /vol_app/build/main"
Warning: Permanently added '192.168.nnn.nnn' (ECDSA) to the list of known hosts.
Error: no container with name or ID "XXX" found: no such container

回答の程よろしくお願いいたします。

at_reika.yamazaki

2024年10月16日 16時13分

お世話になっております。山崎です。
エラー文が「Error: no container with name or ID "XXX" found: no such container」となっており、
指定した XXX というコンテナ名のコンテナが起動していない状態だと思います。
以下のコマンドを実行すると起動しているコンテナを知ることができます。

ssh -F config/ssh_config Armadillo "podman ps"

起動しているコンテナ名と、XXX が一致しているかご確認ください。
異なる場合は変更して再度実行してください。

もし、何も表示されていない場合はコンテナが正しく起動できていない状態かもしれません。
その場合は以下を実行してください。

1. コンテナイメージが存在しているか確認します。
以下を実行したときに <プロジェクト名> のコンテナイメージが表示されるか確認してください。

ssh -F config/ssh_config Armadillo "podman images"

2. コンテナの設定ファイルが存在するか確認します。
以下を実行したときに <プロジェクト名>.conf が表示されるか確認してください。

ssh -F config/ssh_config Armadillo "ls /etc/atmark/containers/"

3. コンテナイメージ、コンテナの設定ファイルが存在している場合、コンテナを再起動してみてください。

ssh -F config/ssh_config Armadillo "podman_start <プロジェクト名>"
ssh -F config/ssh_config Armadillo "podman ps"

表示されるようになったかどうか確認してください。

もし、状況が不明な場合は実行したコマンドと、その実行結果を貼っていただけると助かります。
以上、どうぞよろしくお願いいたします。

お世話になっております。
頂いたコマンドを実行したのですが、以下のようなエラーが出力され、SSHサービスが機能していないようなエラーになっております。
ABOS Webも閲覧でき、swuアップデートも可能な状態ではあります。

どのようにしたらよいでしょうか。回答の程よろしくお願いいたします。

atmark@atde9:~/InitSubToMain$ ssh -F config/ssh_config Armadillo "podman ps"
ssh: connect to host 192.168.nnn.nnn port 22: No route to host
atmark@atde9:~/InitSubToMain$ ssh -F config/ssh_config Armadillo "podman images"
ssh: connect to host 192.168.nnn.nnn port 22: No route to host
atmark@atde9:~/InitSubToMain$ ssh -F config/ssh_config Armadillo "ls /etc/atmark/containers/"
ssh: connect to host 192.168.nnn.nnn port 22: No route to host

at_reika.yamazaki

2024年10月17日 19時07分

お世話になっております。山崎です。
何点か確認させてください。

1. ABOS Web で接続しているのは 192.168.nnn.nnn と同じ IP アドレスという認識で良いでしょうか?
ABOS WEB の [状態一覧] を選択すると [LAN情報] の項目があると思います。
表示されている IP アドレスと一致しているかご確認ください。

2. ATDE から 192.168.nnn.nnn に対して ping の反応はありますか?

ping -c 3 192.168.nnn.nnn 

3. ATDE から ssh_config を使用しない場合は ssh に成功するでしょうか?

ssh root@192.168.nnn.nnn

ご確認いただけますと幸いです。
以上、どうぞよろしくお願いいたします。

お世話になっております。
頂いた確認事項の結果を以下に示します。

1. ABOS Web
LAN情報
IPアドレス サブネットマスク ゲートウェイ インターフェース MACアドレス
192.168.nnn.56 255.255.255.0 192.168.nnn.1 eth0 XX:XX:XX:XX:XX:XX

2. ping の反応

atmark@atde9:~/XXX$ ping -c 3 192.168.nnn.7
PING 192.168.nnn.7 (192.168.nnn.7) 56(84) bytes of data.
From 192.168.nnn.44 icmp_seq=1 Destination Host Unreachable
From 192.168.nnn.44 icmp_seq=2 Destination Host Unreachable
From 192.168.nnn.44 icmp_seq=3 Destination Host Unreachable
 
--- 192.168.nnn.nnn ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2041ms
pipe 3

3. ssh_config

atmark@atde9:~/XXX$ ssh root@192.168.nnn.nnn
ssh: connect to host 192.168.nnn.nnn port 22: No route to host

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

at_reika.yamazaki

2024年10月18日 15時34分

お世話になっております。山崎です。
実行結果ありがとうございます。

LAN情報で表示されている IP アドレスは末尾が 56 と表示されています。
ATDE から 192.168.nnn.56 に対して ping の反応はありますか?

ping -c 3 192.168.nnn.56

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

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

pingは通ることは確認しました。

atmark@atde9:~/XXX$ ping -c 3 192.168.nnn.56
PING 192.168.nnn.56 (192.168.11.56) 56(84) bytes of data.
64 bytes from 192.168.nnn.56: icmp_seq=1 ttl=64 time=6.58 ms
64 bytes from 192.168.nnn.56: icmp_seq=2 ttl=64 time=2.09 ms
64 bytes from 192.168.nnn.56: icmp_seq=3 ttl=64 time=2.40 ms
 
--- 192.168.nnn.56 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 2.087/3.688/6.581/2.049 ms

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

at_reika.yamazaki

2024年10月18日 17時17分

お世話になっております。山崎です。

192.168.nnn.56 に対して ping が通ったということで了解です。
こちらがデバッグに使用したい Armadillo の IP アドレスになります。
次はこちらの Armadillo に正しく development.swu が適用されているか確認します。

192.168.nnn.56 に対して ssh は成功するでしょうか?

ssh root@192.168.nnn.56

成功した場合は ssh 設定ができています。
そのまま ssh した状態で以下のコマンドを実行して、コンテナの状態を確認してください。

podman ps
podman images

ABOSDE で作成したプロジェクト名のコンテナがあるか確認してください。

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

お世話になっております。
実行した結果、このような結果になりました。

atmark@atde9:~/XXX$ ssh root@192.168.nnn.56
The authenticity of host '192.168.nnn.56 (192.168.nnn.56)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.nnn.56' (ECDSA) to the list of known hosts.
Welcome to Alpine!
 
The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.
 
 
Please note this system is READ-ONLY with a read-write overlayfs,
after updating password make sure to save new password with
# persist_file /etc/shadow
 
You can change this message by editing /etc/motd.
Last update on Thu Oct 17 15:50:19 JST 2024, updated:
  extra_os.XXX: 116 -> 117
  XXX: 116 -> 117
armadillo:~# podman ps
CONTAINER ID  IMAGE                           COMMAND         CREATED       STATUS                 PORTS       NAMES
c6e16f4a9be5  localhost/XXX:latest  sleep infinity  26 hours ago  Up 26 hours                        XXX
armadillo:~# podman images
REPOSITORY               TAG         IMAGE ID      CREATED      SIZE        R/O
localhost/XXX  latest      b586e4d5bd8c  2 days ago   181 MB      true

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

at_reika.yamazaki

2024年10月18日 18時23分

お世話になっております。山崎です。

実行結果ありがとうございます。
ssh ログインに成功し、XXX というコンテナが起動している状態です。
この XXX がプロジェクト名であろうと思います。
ssh ログインした状態で以下のコマンドを実行すると、gdb デバッグが使用できると思われます。

podman exec -it <プロジェクト名> gdb /vol_app/build/main

また、最初にお伝えした以下のコマンドが失敗した理由ですが、ssh_config の IP アドレスを 192.168.nnn.56 に変更するとこちらでも成功すると思います。

cd <プロジェクトのディレクトリ>
ssh -F config/ssh_config Armadillo "podman exec -it <プロジェクト名> gdb /vol_app/build/main"

ご使用しやすい方をお使いください。
以上、どうぞよろしくお願いいたします。

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

上記のコマンドで実行したところ問題なくGDBを起動できました。ありがとうございます。
加えて、2点追加の質問があります。

①GDB上で実行ファイル(/vol_app/build/main)をコンパイルする時に使用した.cファイルを指定したブレークポイント(ex. b XXX.c:123)を設定したいのですが、うまくいきません。解決方法を教えていただきたいです。

②fopen関数(引数: wb)を使用してファイルを生成したいのですが、毎回NULLで返されてしまいます。ABOS DE上でfopen関数を使用するのに必要な固有の設定等はございますか?

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

at_reika.yamazaki

2024年10月23日 14時21分

お世話になっております。山崎です。

>上記のコマンドで実行したところ問題なくGDBを起動できました。ありがとうございます。
無事に gdb が起動できたということで良かったです。

>①GDB上で実行ファイル(/vol_app/build/main)をコンパイルする時に使用した.cファイルを指定したブレークポイント(ex.
>b
>XXX.c:123)を設定したいのですが、うまくいきません。解決方法を教えていただきたいです。
関数名でのブレークポイント指定(例: b main)だとどうなるでしょうか?

>②fopen関数(引数:
>wb)を使用してファイルを生成したいのですが、毎回NULLで返されてしまいます。ABOS
>DE上でfopen関数を使用するのに必要な固有の設定等はございますか?
いえ、特に必要ありません。
C 言語プロジェクトをダウンロードしてくると、app/src/log_temp.c というファイルがあると思います。
このファイル内でも fopen() は使っています。
log_temp.c では "/vol_data/log/temp.txt" にファイルを作成すると、
コンテナ外の "/var/app/volumes/<プロジェクト名>/log/temp.txt" にファイルが作成されます。

これは、コンテナ外のディレクトリをコンテナ内からも使えるようにボリュームマウントしているからです。
config/app.conf にて以下のように記載があると思います。

add_volumes /var/app/volumes/{{PROJECT}}:/vol_data

{{PROJECT}} はプロジェクト名になります。
上記の設定でコンテナ外のディレクトリをコンテナ内から使えるようにボリュームマウントしています。
/vol_data にファイルを作成するようにするとうまくいくか、ご確認いただくのが良いかと思います。

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

お世話になっております。
上記の方法で実行したところ問題なく実行できました。ありがとうございます。

新しく質問があるのですが、カーネルコンフィグレーションの編集で、
[USB Modem (CDC ACM) support]を、[M] (← 山括弧)にし、カーネル設定を適用して作成した[cdc-acm.ko]を利用してUSBシリアル通信を実行したいのですが、
ABOS環境で実行する方法が分からず、戸惑っております。

ご回答いただけると幸いです。よろしくお願いいたします。

> お世話になっております。
> 上記の方法で実行したところ問題なく実行できました。ありがとうございます。
>
> 新しく質問があるのですが、カーネルコンフィグレーションの編集で、
> [USB Modem (CDC ACM) support]を、[M] (← 山括弧)にし、カーネル設定を適用して作成した[cdc-acm.ko]を利用してUSBシリアル通信を実行したいのですが、
> ABOS環境で実行する方法が分からず、戸惑っております。
>
> ご回答いただけると幸いです。よろしくお願いいたします。

上記の内容に追記します。
今現在実行したい処理は、cdc_acmモジュールのリブートで、[rmmod], [insmod]を用いて[cdc-acm.ko]のリロードといった内容です。
下記のフォーラムと同一内容を、ABOSで実行するにはどうしたらいいか困っております。
よろしくお願いいたします。

[参照フォーラム] https://armadillo.atmark-techno.com/forum/armadillo/9748

at_reika.yamazaki

2024年11月12日 17時13分

お世話になっております。山崎です。

カーネルコンフィギュレーションを編集して cdc-acm.ko を作成したとありますが、
マニュアルの以下の手順を参照してカーネルを作成したという認識で合っていますか?

・6.20.2. Linux カーネルをビルドする
https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…

また、「インストール」の手順まで実行すると kernel.swu が作成されると思うのですが、こちらを Armadillo に適用するまでの作業は実行済でしょうか?

その場合はカーネルにモジュールが入っているため、modprobe コマンドを用いてモジュールをロードしてください。

modprobe cdc-acm

ロードされたかどうかは lsmod コマンドでご確認ください。

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

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

lsmodコマンドでロード済みのカーネルモジュールを確認したところ、[cdc_acm]が見当たりませんでした。

> ・6.20.2. Linux カーネルをビルドする
> https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…

上記の手順でkernel.swuをインストールしているのですが、何か不備があるのかお教え願いたいです。

at_reika.yamazaki

2024年11月13日 18時49分

お世話になっております。山崎です。

モジュールが含まれる設定になっているか確認したいです。
Armadillo 上で以下のコマンドを実行した結果をいただけますか?

zcat /proc/config.gz | grep CONFIG_USB_ACM

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

お世話になっております。
上記の実行結果を以下に示します。

armadillo:~# zcat /proc/config.gz | grep CONFIG_USB_ACM
CONFIG_USB_ACM=y

以上の結果になりました。
ご確認お願いします。

at_reika.yamazaki

2024年11月14日 16時01分

お世話になっております。山崎です。

実行結果ありがとうございます。
>CONFIG_USB_ACM=y
ということはカーネルにはすでにモジュールが組み込まれています。
そのため、modprobe 等を実行しなくても使用できると思います。
以上、どうぞよろしくお願いいたします。

お世話になっております。
カーネルにモジュールが問題なく組み込まれているとのことでありがとうございます。

現在ATDE上のgdbで[rmmod], [insmod]を用いた[cdc-acm.ko]のリロードするプログラムを実行したのですが、

[Detaching after vfork from child process 22]
Com: rmmod cdc_acm
sh: 1: rmmod: not found
Com: insmod /vol_app/build/cdc-acm.ko
sh: 1: insmod: not found
Com: rmmod cdc_acm
sh: 1: rmmod: not found
Com: insmod /vol_app/build/cdc-acm.ko
sh: 1: insmod: not found
Com: rmmod cdc_acm
sh: 1: rmmod: not found
Com: insmod /vol_app/build/cdc-acm.ko
sh: 1: insmod: not found

以上のような結果が返ってきました。

①ATDE上で実行するgdbのデバッグ環境
②USBモジュールで外からArmadilloに直接繋いだ時の環境

①,②の違いがどういったものでしょうか。
ご回答の程よろしくお願いいたします。

at_reika.yamazaki

2024年11月15日 19時00分

お世話になっております。山崎です。

すみません。確認です。
すでに Armadillo のカーネルに組み込まれているため、rmmod/insmod する必要はないのですが、
改めてモジュールをインストールしようとしているのはなぜなのでしょうか?
よろしければ、理由を聞かせていただけますと助かります。
以上、どうぞよろしくお願いいたします。

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

https://armadillo.atmark-techno.com/forum/armadillo/9748

上記のフォーラムに投稿されているように、「仮に対象デバイスが動作停止に陥ってもリブートのような処理」を行える機能を実現できるようにこのような処理をしたいと考えております。

現在私は上記のフォーラムに投稿している方の製品のソフトウェア移植(Armadillo-840m → Armadillo-610[ABOS])をしようとしております。

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

at_reika.yamazaki

2024年11月20日 18時29分

お世話になっております。山崎です。

「上記のフォーラムに投稿している方の製品のソフトウェア」内で insmod/rmmod を使用しているため、行いたいということなのだと思います。

これまでの投稿で以下の内容があったと思います。
> [USB Modem (CDC ACM) support]を、[M] (← 山括弧)にし、カーネル設定を適用して作成した[cdc-acm.ko]を利用してUSBシリアル通信を実行したいのですが、
このカーネルコンフィギュレーションの変更は保存されたのでしょうか?
ちゃんと保存した場合は "cat .config | grep USB_ACM" の実行結果が "CONFIG_USB_ACM=m" になります。
ご確認をお願いします。
実行結果を確認してちゃんと保存されているようならカーネルをビルドしてください。
ビルドが終わったらマニュアル通り Armadillo にインストールしてご使用ください。

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