Armadilloフォーラム

[ABOS] ホスト側のABOSにコピーした実行ファイルが実行できない

shun

2025年4月22日 13時30分

==========
製品型番:Armadillo-610
Debian/ABOSバージョン:3.19.2-at.5
カーネルバージョン:5.10.220
==========
[abos/resources]ディレクトリに置いたファイル(abos/resources/usr/bin/InitProgram ←個人で作成した初期起動用の実行ファイル)をメイン関数で実行するようにして.swuを書き込んだのですが、実行できませんでした。
Armadillo本体にアクセスしてファイルの実態を確認すると、

armadillo:/usr/bin# ./InitProgram 
-ash: ./InitProgram : not found
armadillo:/usr/bin# file ./InitProgram
-ash: file: not found
armadillo:/usr/bin# ls -l ./InitProgram
-rwxr-xr-x    1 root     root        307736 Apr 21 17:08 ./InitProgram
armadillo:/usr/bin# ls /lib/ /usr/lib/ | grep libstdc++
libstdc++.so.6
libstdc++.so.6.0.32

ファイルの実態はあるのに[not found]と出てしまいます。
原因がわかりましたらご回答の程、よろしくお願いいたします。

ファイル ファイルの説明
コメント 2025-04-22 115821.png
コメント

at_satoshi.ohta

2025年4月22日 13時51分

太田です。

別スレッドとして立てていただきありがとうございます。
InitProgram について質問させてください。

1. InitProgram は C 言語のソースコードを make して作成した実行バイナリファイルということでよろしいでしょうか?
make した場合はどこで make しましたか?ATDE上でしょうか?それともATDE上のArmadillo に転送するコンテナの中でしょうか?

2. InitProgram はABOS上のコンテナの中で実行するべき実行ファイルでしょうか?それともABOS(ホスト)で実行するべき実行ファイルでしょうか?

3. InitProgram が行う具体的な処理をもう少し詳しく教えていただけますしょうか?

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

お世話になっております。
> 1. InitProgram は C 言語のソースコードを make して作成した実行バイナリファイルということでよろしいでしょうか?
> make した場合はどこで make しましたか?ATDE上でしょうか?それともATDE上のArmadillo に転送するコンテナの中でしょうか?
こちらはATDE上のMakefileによってコンパイルした実行ファイルです。
生成した実行ファイルを[abos/resources/usr/bin/]ディレクトリに移動してswuファイルを本体にコピーしました。

#プログラム名
PROGRAM=InitProgram
 
#ターゲット名(PROGRAMから変更があるときのみ)
TARGET=../build/InitProgram
#インクルードパス
USER_INCLUDE= -I include
#オブジェクトディレクトリ
OBJ_DIR=./common/object
#共通部ソースファイルディレクトリ
SRC_DIR=./common/src
 
MAINSRCS := $(PROGRAM).c
COMSRCS := $(wildcard *.c)
SRCS := $(MAINSRCS) $(COMSRCS)
 
OBJS := $(SRCS:%.c=%.o)
DEPS := $(OBJS:.o=.d)
 
CFLAGS += -O0 -Wall -Wextra -MMD -MP
 
all: $(TARGET)
 
#ターゲット
$(TARGET): $(OBJS)
	$(CC) $(LDFLAGS) $(TARGET_ARCH) $^ -g -o $@
 
%.o:%.c
	$(CC) -c -g $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $< -o $@
 
.PHONY: clean
clean:
	$(RM) $(OBJS) $(DEPS) $(TARGET)
 
-include $(DEPS)

> 2. InitProgram はABOS上のコンテナの中で実行するべき実行ファイルでしょうか?それともABOS(ホスト)で実行するべき実行ファイルでしょうか?
InitProgramはABOS(ホスト)で実行する予定の実行ファイルです。
こちらの件は旧Armadillo-840mで製品化していたプログラムの移植をしたいと思っており、ABOSで使用されているコンテナを活用しつつ、プログラム内で定義したルートなどの情報はできるだけ変更しないように開発を進めたいと考えております。

> 3. InitProgram が行う具体的な処理をもう少し詳しく教えていただけますしょうか?
①main関数で[/etc/init.d/init.sh ←初回処理スクリプト]を実行します。main関数の処理は以上。
②[/etc/init.d/init.sh]では、弊社のメイン基板からの通信処理モジュール(MainComm)をバックグラウンド実行したのち、メイン基板への通信処理を実行するモジュール(SubComm)を起動します。

/* 一部抜粋 */ 
# Launch MainToSubComm
/usr/bin/MainComm &
echo "MainComm End"
 
# Launch Init Module
echo "SubComm Start"
/usr/bin/SubComm

MainCommとSubCommは、それぞれgdbデバッグ環境上で実行できることは確認しています。

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