Armadilloフォーラム

自作したアプリの追加について

atom

2015年3月20日 17時38分

お世話になっております。
atom 佐藤です。

自作したアプリケーションをイメージに追加しようとしているのですが上手くいかずに困っています。
以前に手順について教えていただいた内容に沿っているかと思うのです上手くいきませんでした。
参考 : http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-2…
以下の手順で行っているのですが、どこか間違ってる点はあるのでしょうか?
ご教授よろしくお願いします。

以下実際に行った手順
(1) vendors/AtmarkTechno にある Armadillo-460 を別名にしてコピー
(2) (1)で作成したフォルダに自作したアプリ用のフォルダを作成し、ソース、Makefileをコピー
(3) (1)で策したフォルダにあるMakefileの"SUBDIR_y"に(2)で追加したフォルダ名を追記
(4) make menuconfig で(1)で追加したプロダクトディレクトリを選択し、 makeを実行する
(5) 起動時に自動的に起動させるため"/romfs/etc/default/rc.local"を作成し、起動プログラムのバックグラウンドで動作させる。
(6) (5)のファイルに実行権限の追加 "chmod 777 ..."
(7) make image を実行し、作成されたイメージファイルをATDEのウェブ公開用ディレクトリにコピー
(8) Armadillo 上から "netflash -bknsr ..."カーネル及びユーザランドを変更し、reboot

現時点で確認できている状況
① イメージをコピーしてもArmadillo側に自作アプリの実行ファイルがない
/bin を確認したが見当たらない ( (2)で作成したフォルダには実行ファイルはできている)
② rc.local に自作アプリの実行ファイル名を追加したがArmadillo上のrc.localに反映されていない
以前に"hello"を試したがそのデータのまま変更されていない

先ほど投稿した内容もあるため以下のようにしたいと考えているのですが可能でしょうか。また可能ならどのような手順になるのでしょうか?
デバッグ時にArmadillo上にコピーした実行ファイルをそのままArmadillo上に残し、そのファイルを指定して起動時に自動的に実行できるよう
にする。

デバッグ時は"wget コマンド"を使用して実行ファイルを取得して、 Armadillo上で "chmode +x" と実行権限を付加して動作させていました。

コメント

y.nakamura

2015年3月20日 18時05分

中村です。

> 以下実際に行った手順
> (1) vendors/AtmarkTechno にある Armadillo-460 を別名にしてコピー
> (2) (1)で作成したフォルダに自作したアプリ用のフォルダを作成し、ソース、Makefileをコピー
> (3) (1)で策したフォルダにあるMakefileの"SUBDIR_y"に(2)で追加したフォルダ名を追記
> (4) make menuconfig で(1)で追加したプロダクトディレクトリを選択し、 makeを実行する
> (5) 起動時に自動的に起動させるため"/romfs/etc/default/rc.local"を作成し、起動プログラムのバックグラウンドで動作させる。
> (6) (5)のファイルに実行権限の追加 "chmod 777 ..."
> (7) make image を実行し、作成されたイメージファイルをATDEのウェブ公開用ディレクトリにコピー
> (8) Armadillo 上から "netflash -bknsr ..."カーネル及びユーザランドを変更し、reboot
>
> 現時点で確認できている状況
> ① イメージをコピーしてもArmadillo側に自作アプリの実行ファイルがない
> /bin を確認したが見当たらない ( (2)で作成したフォルダには実行ファイルはできている)

(2)の自作アプリのMakefileにromfsでのインストール処理はありますよね?
http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-2…
の例にある

romfs:
        $(ROMFSINST) /bin/$(TARGET)

に相当のものです。

(4)でmakeをした後、atmark-dist-xxxx/romfs/binの下に
自作アプリが入っているかを確認してください。

> ② rc.local に自作アプリの実行ファイル名を追加したがArmadillo上のrc.localに反映されていない
> 以前に"hello"を試したがそのデータのまま変更されていない

(8)のあと、"flatfsd -i"を実行して、configをクリアして再起動してみてください。
以前のrc.localがconfigフラッシュに残っているのだと思います。
"flatfsd -i"する前に、
# ls -l /etc/default/
# ls -l /etc/config/
して中身の違いを確認してみてください。
"flatfsd -i"でななく、/etc/configのrc.localを削除して"flatfsd -s"でもいいと思います)

> 先ほど投稿した内容もあるため以下のようにしたいと考えているのですが可能でしょうか。また可能ならどのような手順になるのでしょうか?
> デバッグ時にArmadillo上にコピーした実行ファイルをそのままArmadillo上に残し、そのファイルを指定して起動時に自動的に実行できるよう
> にする。

configフラッシュに入る大きさならば、そのバイナリをconfigに保存しおいて、
rc.localからそれを実行するようにすれば可能と思います。

--
なかむら

atom

2015年3月23日 13時58分

お世話になっております。
atom 佐藤です。

ご教授いただいた内容について確認し、再度試したところ問題が解決しました。

① 自作アプリの実行ファイルがイメージに追加されていなかった点について
"romfs"についてMakefileに記述はしていたのですがTargetなどの名称などに不備があったために起こったことでした。
Makefile を修正することにより、"/romfs/bin"下に実行ファイルの追加を確認できるようになりました。

② 新規 rc.local が反映されていなかった点について
ご指摘の通り,「reboot」実施後に「flatfsd -i」を実行することによりイメージファイル作成時の設定が反映されることを確認できました。

追加での確認
① 新規のボードに"rc.local"の設定込みのイメージを書き込む場合も「reboot」実施後に「flatfsd -i」を実行しても問題ないでしょうか?
新規の場合は,「flatfsd -s」にしたほうがいいのでしょうか?

② 自作したアプリをバックグラウンドで自動起動した場合、アプリ実行後自動的に終了することのないようなアプリの場合
どうしても停止させたい場合はどのように終了させればいいのでしょうか?

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

y.nakamura

2015年3月23日 14時52分

中村です。

> 追加での確認
> ① 新規のボードに"rc.local"の設定込みのイメージを書き込む場合も「reboot」実施後に「flatfsd -i」を実行しても問題ないでしょうか?
> 新規の場合は,「flatfsd -s」にしたほうがいいのでしょうか?

Armadillo-460ですよね。
460は工場出荷状態では確か/etc/defalt/rc.localはかったと思いますので
(/etc/defalt/rc.localがなければ/etc/config/rc.localもないはず)
何もしなくても大丈夫ですが、rc.local同様の問題がinterfacesなどでも
発生しますので、"flatfsd -i"をするのが安心だと思います。
問題が起きそうなファイルの有無をチェックして、/etc/configからそれらを
消して"flatfsd -s"でもいいでけど・・・、"-i"の方が楽ですよね。
"-i"をやって問題が起きることはないと思ってます。

> ② 自作したアプリをバックグラウンドで自動起動した場合、アプリ実行後自動的に終了することのないようなアプリの場合
> どうしても停止させたい場合はどのように終了させればいいのでしょうか?

どういう状況でどうやって(人間がやるのか自動でやるのか、人間の場合
どういう人なのか、他のプロセスや機器と通信しているのか)などによりますけど、
私が過去にやったことがあるのは、
- 人間が手作業でpsしてpid調べてkillする
- psしてpid調べてkillするスクリプトを作って、それを走らせる
- /var/runにpidファイルを作っておいてkill `cat /var/run/xxx`する
- スイッチの長押しなどを監視して自分で死ぬ
- 通信相手から何か特定のパケットを受信したら自分で死ぬ
などなど・・・

/var/runのpidファイルを使うのは常駐物での常套手段かと。

--
なかむら

atom

2015年3月23日 17時24分

atom 佐藤です。
回答ありがとうございます。

① について
指示書を用意して他の人が操作を行うことも考えると、何も考えずに手順として出来そうなので
"flatfsd -i" にした方がよさそうなので、基本的に"flatfsd -i" での操作にしたいと思います。

② について
今回は今からスクリプトを組んで用意しておく時間はなさそうなので
psコマンドで調べて、killコマンドでプログラムをとめることにします。

いろいろとご教授ありがとうございました。

y.nakamura

2015年3月23日 18時07分

中村です。

> ② について
> 今回は今からスクリプトを組んで用意しておく時間はなさそうなので
> psコマンドで調べて、killコマンドでプログラムをとめることにします。

スクリプトと言っても、私が使ってるのはこういう簡単なものです。

#!/bin/sh
kill `ps | grep hoge | grep -v grep | awk '{print $1}'`

止めたいプログラムが"hoge"という名前で、
psしたときに他のプログラムなどで"hoge"とは出てこない
という前提です。

これを/bin/kill-hogeというような名前で入れておけば、
# kill-hoge
するだけです。

> いろいろとご教授ありがとうございました。

どういたしまして。

--
なかむら