Armadilloフォーラム

C言語での開発について

brakeme

2023年7月25日 18時04分

お世話になっております. フルヤと申します.

ModemManager,NetworkManagerの組み合わせでうまくLTE-Mの接続が確立されないので,pppd+chatで接続したいと考えています.
元々pppdは搭載されているようなのですが,ATコマンドを実行するための chat コマンドがありません. G3にはあったようですが.
そこで単純にコンパイルして適用したいのですが,以下の状況です. 環境は,ファイル名を見る限り atde9-amd64-20230328 となっています.

(1) 以下でコンパイル:
arm-linux-gnueabihf-gcc -DTERMIOS -DSIGTYPE=void -UNO_SLEEP -DFNDELAY=O_NDELAY -O2 -g -pipe chat.c -o chat -L /usr/arm-linux-gnueabihf/lib
armadillo:~# ls -l /usr/sbin/chat
-rwxr-xr-x 1 atmark atmark 29404 Jul 24 18:54 /usr/sbin/chat
armadillo:~# /usr/sbin/chat
ash: /usr/sbin/chat: not found

(2) aarch64-linux-gnu-gcc -DTERMIOS -DSIGTYPE=void -UNO_SLEEP -DFNDELAY=O_NDELAY -O2 -g -pipe chat.c -o chat -L /usr/aarch64-linux-gnu/lib
armadillo:/home/atmark# chat-aarch
/usr/sbin/chat-aarch: line 3: aa( a)(a*0a+8a,@a-Ha.Pa0Xa1`a2ha3pa4....(文字化け)...
・・・ 略 ・・・
/usr/sbin/chat-aarch: line 0: !荳 not found
/usr/sbin/chat-aarch: line 0: #・ not found
/usr/sbin/chat-aarch: line 1: : not found
^C
※ 単純にライブラリがない,といった動作には見えません.

コンパイルオプションは,単純にppp-2.4.7のMakefileのものを適用しています.
当然かと思いますが,備え付けのコンテナ下で実施しても結果は同じです.
元々適用したいアプリケーションもC言語で記述したものです.
aarch64 でも arm でもかまわないのですが,普通にC言語で開発するためにはどうしたらよいのでしょうか.

よろしくお願いします.

コメント

アットマークテクノの古賀です。

フルヤさん:
>そこで単純にコンパイルして適用したいのですが,以下の状況です. 環境は,ファイル名を見る限り atde9-amd64-20230328 となっています.

>(1) 以下でコンパイル:
> arm-linux-gnueabihf-gcc -DTERMIOS -DSIGTYPE=void -UNO_SLEEP -DFNDELAY=O_NDELAY -O2 -g -pipe chat.c -o chat -L /usr/arm-linux-gnueabihf/lib
> armadillo:~# ls -l /usr/sbin/chat
> -rwxr-xr-x 1 atmark atmark 29404 Jul 24 18:54 /usr/sbin/chat
> armadillo:~# /usr/sbin/chat
> ash: /usr/sbin/chat: not found

>コンパイルオプションは,単純にppp-2.4.7のMakefileのものを適用しています.
>当然かと思いますが,備え付けのコンテナ下で実施しても結果は同じです.
>元々適用したいアプリケーションもC言語で記述したものです.
>aarch64 でも arm でもかまわないのですが,普通にC言語で開発するためにはどうしたらよいのでしょうか.

お使いの Armadillog が IoT A6E であれば、aarch64 ではなく arm ターゲットにビルドしないといけません。
ATDE で arm-linux-gnueabihf-gcc を使ってビルドしたバイナリが A6E で動作しないのは、標準 C ライブラリの違いによるものです。Base OS や、Alpine コンテナで動作するバイナリをビルドするには、標準 C ライブラリとして musl libc をリンクしないといけません。
あるいは、Base OS に Debian コンテナをセットアップして、arm-linux-gnueabihf-gcc でビルドしたバイナリ(glibc をリンクしたバイナリ)を動かす、という解もありますが、Base OS 上で直接動かすバイナリをビルドする場合は、musl libc をリンクするようにビルドしないといけません。

C 言語で実装したプログラムを Base OS や Alpine コンテナで動作するようにビルドする方法については、このフォーラムで、過去にあった同様の質問に対する、次の回答が参考になるでしょう:

 https://armadillo.atmark-techno.com/forum/armadillo/14009#comment-12363
 https://armadillo.atmark-techno.com/forum/armadillo/15163#comment-13067

以上、参考になりましたら幸いです。

ところで、

>ModemManager,NetworkManagerの組み合わせでうまくLTE-Mの接続が確立されないので,pppd+chatで接続したいと考えています.

「うまくLTE-Mの接続が確立されない」というのは、具体的にはどういう状況でしょうか?
お使いの SIM が何かを含め、もし差し支えなければ、詳しい状況を教えてくださいませ。

古賀さま,

早速ご回答いただきましてありがとうございます.
ご案内いただきましたページの内容を試してみます.

ModemManager/NetworkManagerについては,あまり知識がなく,また,マニュアルの説明も私には分かりにくく,恐らく設定等
がうまくいっていないのだと思います.
必要な設定がはっきりわかる記述になっていればわかったかもしれませんが...

なお,手作業で接続を行いましたところ,無事にPPP接続までできましたので,SIM,APN等の条件に問題はないというのは確認して
おります.

よろしくお願いします.

アットマークテクノの古賀です。

フルヤさん:
>早速ご回答いただきましてありがとうございます.
>ご案内いただきましたページの内容を試してみます.

もしうまくいかない場合は、お知らせください。

>ModemManager/NetworkManagerについては,あまり知識がなく,また,マニュアルの説明も私には分かりにくく,恐らく設定等
>がうまくいっていないのだと思います.
>必要な設定がはっきりわかる記述になっていればわかったかもしれませんが...
>
>なお,手作業で接続を行いましたところ,無事にPPP接続までできましたので,SIM,APN等の条件に問題はないというのは確認して
>おります.

了解しました。LTE-M モジュールの接続設定ですが、もしよろしければ、6月にリリースしたバージョンの Base OS(3.17.4-at.7)から組み込んだ abos-web をお使いになってみてください:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

abos-web の「WWAN 設定」機能を使うと、Armadillo を LAN ケーブルで接続した LAN 上の PC から、Web ブラウザに表示する GUI 画面で設定を行うことができます。ModemManagaer/NetworkManager を CLI で直接操作する必要がなく、より直感的に設定操作できますので、多くの方にとって便利だと思っています。
abos-web が、お役に立ちましたら幸いです。

古賀さま,

コメントいただきましてありがとうございます. ちょっと余裕がなくてそちらは試せてはいないのですが,なんとか環境は整い,chatの稼働,および移植したアプリケーションの動作も基本的なところは確認できました.

ありがとうございます.