Armadilloフォーラム

ABOS Armadillo-610のVSCodeビルド(C言語)について

shun

2024年9月9日 14時32分

お世話になっております。
Armadillo-840mからArmadillo-610(ABOS対応)に移植したいと考えており、ATDE上のVS Codeでコーディングをしております。

ATDE上のVS Code上にて/app/src上に .cファイル, .hファイル, .shファイルなどを配置し、build-essencialでビルド、.swuインストールを一通り済ました後に、「App run on Armadillo」で実行後のコンテナログを確認すると、ATDE上のパス指定しているファイル等が読み込めないです。

Armadilloのディレクトリ階層を確認したところ、ATDEとは異なるディレクトリ階層になっていました。

.swuインストールした時点で、Armadilloに書き込まれるものではないのでしょうか?
お忙しいところ恐縮ですが、ご回答のほどお願いいたします。

コメント

at_satoshi.ohta

2024年9月9日 15時55分

太田です。

はじめに共通認識としてC言語のプロジェクトにおける「App run on Armadillo」の流れを説明させてください。
ここではプロジェクトディレクトリを my_project とします。

「App run on Armadillo」を実行すると、

1. ATDE 上の my_project/app/build ディレクトリと my_project/app/lib ディレクトリを Armadillo Base OS 上にある /var/app/rollback/volumes/my_project にコピーします。

2. Armadillo Base OS 上の /var/app/rollback/volumes/my_project を開発したコンテナの /vol_app にマウントします。
コンテナの中では、/vol_app/build と /vol_app/lib ディレクトリを確認できます。

3. デフォルトでは、/bin/c_launch をコンテナ起動時に実行します。(コンテナ自動起動ファイルに「set_command c_launch
」と記述されています。)/bin/c_launch には /vol_app/build/main が実行されるようになっています。

そのため、ATDE上にある my_project/app/src ディレクトリ内のファイルは Armadillo に送られません。
my_project/app/build ディレクトリもしくは my_project/app/lib ディレクトリ内のファイルが Armadillo に送られます。
また、これは「ABOSのArmadilloのプロジェクトについて」のフォーラムにも関係すると思いますが、.sh ファイルは my_project/app/build ディレクトリに配置していただければ Armadillo に送られます。

もし、c_launch ではなくご自身が作成したシェルスクリプトを実行したい場合は(実行権限を付与することをお忘れなく)、my_project/container/resources/bin 内に配置した上で my_project/config/app.conf の 「set_command c_launch
」を「set_command <作成したシェルスクリプト名>」に編集してください。

その後、再度「Generate development swu」を実行して生成された development.swu を Armadillo にインストールしてください。(コンテナ内の /bin ディレクトリは「App run on Armadillo」では更新できないためです。)
それにより、コンテナ起動時にご自身が作成したシェルスクリプトが実行されるはずです。

少し複雑な説明になってしまい申し訳ありません。
どうぞよろしくお願いいたします。

太田様
お世話になっております。

現在.cファイルから.shファイルを実行するといった処理をしたいのですが、コンテナログには、

/var/app/rollback/volumes/my_project/build/XXX.sh: not found
sh: 1: sudo: not found
sh: 1: /var/app/rollback/volumes/my_project/build/XXX.sh: not found
sh: 1: sudo: not found
sh: 1: /var/app/rollback/volumes/my_project/build/XXX.sh: not found
sh: 1: sudo: not found

というループが続いている状態です。
上記のパスには実行権限が付与された.shファイルがArmadillo上に存在するのですが、not foundという状態になっています。

原因はわかりますでしょうか?
よろしくお願いいたします。

at_satoshi.ohta

2024年9月10日 16時31分

太田です。

2点、状況確認をさせていただきたいのですが、

1. 実行している.cファイル(これは.cファイルをビルドして作成されたバイナリファイルを実行しているという意味だと想像していますが、)は Armadillo 上のコンテナの中で実行しているということでよろしいでしょうか?

2. .cファイルの中で、「 /var/app/rollback/volumes/my_project/build/XXX.sh」のパスを指定しているという理解でよろしいでしょうか?

また、ログを見ると sudo を実行していますが、「chmod +x XXX.sh」といったようにファイルに実行権限を与えることで必要なくなります。

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

お世話になっております。
1. Armadillo内の実行ファイル(/var/app/rollback/volumes/my_project/build/main)をc_launchから起動している状況です。
2. その通りです。複数ファイルに跨って処理がされており、その一部の処理で.shファイルをしようしています。

よろしくお願いいたします。

at_satoshi.ohta

2024年9月10日 18時30分

太田です。

ご回答有り難うございます。

Armadillo Base OS 上の「/var/app/rollback/volumes/my_project/build」ディレクトリはコンテナの中では「/vol_app/build」にマウントされます。
そのため、.cファイルの中で「/var/app/rollback/volumes/my_project/build/XXX.sh」と指定しているパスを「/vol_app/build/XXX.sh」に変更して実行してみてください。

また、前のコメントでもお伝えしましたが sudo コマンドは必要ないはずなので、.cファイルの中の sudo は削除して実行してみてください。

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