Armadilloフォーラム

AVコーディック

hirao-technoaccell

2014年7月3日 13時16分

お世話になっております。平尾と申します。
AVコーディックのエンコードが上手くいかないのでアドバイスいただきたく。
Armadillo810+ATB-A810WLANのハードウェア構成で、A810WLANのUSBメモリにエンコードデータを保存しようとしています。
そこで、810製品マニュアル6.5AVコーディックミドルウェアの手順にそって

[root@armadillo810-0 (ttySC2) ~]# mount -t vfat /dev/sda1 /mnt

[root@armadillo810-0 (ttySC2) ~]# killall uvc-gadget
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
[root@armadillo810-0 (ttySC2) ~]# g_uvc_acm_ether gadget: high-speed config #1:  
UVC Composite with ACM and RNDIS

[root@armadillo810-0 (ttySC2) ~]# gst-launch-1.0 -e v4l2src device=/dev/video1 \
> ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \
> ! acmh264enc ! queue \
> ! qtmux ! filesink location=/mnt/output.mp4
Setting pipeline to PAUSED ...
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstAcmH264Enc:acmh264enc0: Resource n
ot found.
Additional debug info:
gstacmh264enc.c(585): gst_acm_h264_enc_open (): /GstPipeline:pipeline0/GstAcmH26
4Enc:acmh264enc0:
Failed open device (null). (Bad address)
Setting pipeline to NULL ...
Freeing pipeline ...
[root@armadillo810-0 (ttySC2) ~]# g_uvc_acm_ether gadget: high-speed config #1:
UVC Composite with ACM and RNDIS

とERRORになります。
[root@armadillo810-0 (ttySC2) ~]# ls /mnt
System Volume Information/ output.mp4*

で出力結果を見たところ、ファイル自体はあるようですが、VMwaveで再生してみるとストリーミングデータが無いとのメッセージが出ます。
Linux初心者のため、何か初歩的な間違いをしているのだと思いますが、アドバイス等頂けるとありがたいです。

インストールしているソフト環境ですが
 ・atmark-dist-20140602.tar.gz
 ・linux-3.4-at7.tar.gz
 ・awl13-3.0.2-3.tar.gz
をビルドしています。
宜しくお願い致します。

コメント

at_makoto.harada

2014年7月3日 14時05分

原田です。

> ERROR: from element /GstPipeline:pipeline0/GstAcmH264Enc:acmh264enc0: Resource n
> ot found.
> Additional debug info:
> gstacmh264enc.c(585): gst_acm_h264_enc_open (): /GstPipeline:pipeline0/GstAcmH26
> 4Enc:acmh264enc0:
> Failed open device (null). (Bad address)
> Setting pipeline to NULL ...
> Freeing pipeline ...

acm(AV Codec Middleware) デバイスドライバが組み込まれていないようですね。

> インストールしているソフト環境ですが
>  ・atmark-dist-20140602.tar.gz
>  ・linux-3.4-at7.tar.gz
>  ・awl13-3.0.2-3.tar.gz

linux-3.4-at7.tar.gz はACMデバイスドライバ無しのパッケージとなります。
ACMデバイスドライバ込みのlinux-3.4-at6.tar.gzで試してみてください。
http://armadillo.atmark-techno.com/armadillo-810/downloads

2つのバージョンの差分に関しては、以下のページをご覧ください
■ Armadillo 製品アップデートのお知らせ (2014年6月/Armadillo-800シリーズ対象)
http://armadillo.atmark-techno.com/node/1574
https://armadillo.atmark-techno.com/forum/armadillo/749

hirao-technoaccell

2014年7月3日 17時18分

原田様

お世話になっております。平尾です。
早速のアドバイスありがとうございます。やはり初歩的な間違いだったようですね。linux-3.4-at6.tar.gzはバグありとの表記があったので使用を控えておりました。
早速
・linux-3.4-at6.tar.gz
・atmark-dist-20140602.tar.gz
・awl13-3.0.2-3.tar.gz
をビルドし、実行しましたが、やはり同様なエラーが出てしまいました。ATB-A810WLAを使用しているのでmenuconfig時に貴社ホームペジにある「ATB-A810WLANの使用法について」に従って拡張インタフェース(CON5)の設定を変更していますが、ACMデバイスドライバを認識させるため他にも設定変更が必要でしょうか?
度々のお問い合わせで申し訳ありませんが、アドバイスのほど宜しくお願い致します。

[root@armadillo810-0 (ttySC2) ~]# gst-launch-1.0 -e v4l2src device=/dev/video1 \
> ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \
> ! acmh264enc ! queue \
> ! qtmux ! filesink location=/mnt/output.mp4
Setting pipeline to PAUSED ...
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstAcmH264Enc:acmh264enc0: Resource n
ot found.
Additional debug info:
gstacmh264enc.c(585): gst_acm_h264_enc_open (): /GstPipeline:pipeline0/GstAcmH26
4Enc:acmh264enc0:
Failed open device (null). (Bad address)
Setting pipeline to NULL ...
Freeing pipeline ...
[root@armadillo810-0 (ttySC2) ~]# g_uvc_acm_ether gadget: high-speed config #1:
UVC Composite with ACM and RNDIS

以上

> 原田です。
>
> > ERROR: from element /GstPipeline:pipeline0/GstAcmH264Enc:acmh264enc0: Resource n
> > ot found.
> > Additional debug info:
> > gstacmh264enc.c(585): gst_acm_h264_enc_open (): /GstPipeline:pipeline0/GstAcmH26
> > 4Enc:acmh264enc0:
> > Failed open device (null). (Bad address)
> > Setting pipeline to NULL ...
> > Freeing pipeline ...
>
> acm(AV Codec Middleware) デバイスドライバが組み込まれていないようですね。
>
> > インストールしているソフト環境ですが
> >  ・atmark-dist-20140602.tar.gz
> >  ・linux-3.4-at7.tar.gz
> >  ・awl13-3.0.2-3.tar.gz
>
> linux-3.4-at7.tar.gz はACMデバイスドライバ無しのパッケージとなります。
> ACMデバイスドライバ込みのlinux-3.4-at6.tar.gzで試してみてください。
> http://armadillo.atmark-techno.com/armadillo-810/downloads
>
> 2つのバージョンの差分に関しては、以下のページをご覧ください
> ■ Armadillo 製品アップデートのお知らせ (2014年6月/Armadillo-800シリーズ対象)
> http://armadillo.atmark-techno.com/node/1574
> https://armadillo.atmark-techno.com/forum/armadillo/749
>
>
>

at_makoto.harada

2014年7月3日 17時32分

原田です。

問題の切り分けのため、 Armadillo-810上で以下の3つのコマンド実行し、
その結果を教えてもらえませんでしょうか?

■ カーネルにACMドライバが組み込まれているかの確認
[armadiilo]# zcat /proc/config.gz |grep ACM
CONFIG_VIDEO_ACM=y
CONFIG_VIDEO_ACM_DECODER=y
CONFIG_VIDEO_ACM_ENCODER=y
# CONFIG_FB_MACMODES is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_G_ACM_MS is not set
# CONFIG_USB_G_UVC_ACM_ETHER is not set

■ ACM がencoder modeに設定されているかの確認
[armadiilo]# cat /sys/devices/platform/acm.0/codec
decoder [encoder] none

■aencoderがV4L2デバイスとして認識されているかの確認
[armadiilo]# find /sys/ |grep video |grep name
/sys/devices/virtual/acm/acm_h264enc/video0/name
/sys/devices/virtual/acm/acm_jpegenc/video2/name
/sys/devices/virtual/video4linux/video1/name
/sys/devices/platform/soc-camera-pdrv.0/video4linux/video3/name

hirao-technoaccell

2014年7月3日 18時01分

平尾です。早速のアドバイスありがとうございます。
確認結果をお送りいたします。

■ カーネルにACMドライバが組み込まれているかの確認
[root@armadillo810-0 (ttySC2) ~]# zcat /proc/config.gz |grep ACM
CONFIG_VIDEO_ACM=y
CONFIG_VIDEO_ACM_DECODER=y
CONFIG_VIDEO_ACM_ENCODER=y
# CONFIG_USB_ACM is not set
# CONFIG_USB_G_ACM_MS is not set
CONFIG_USB_G_UVC_ACM_ETHER=y
CONFIG_USB_G_UVC_ACM_RNDIS=y

■ ACM がencoder modeに設定されているかの確認
[root@armadillo810-0 (ttySC2) ~]# cat /sys/devices/platform/acm.0/codec
decoder encoder [none]

■aencoderがV4L2デバイスとして認識されているかの確認
[root@armadillo810-0 (ttySC2) ~]# find /sys/ |grep video |grep name
/sys/devices/platform/renesas_usbhs/gadget/video4linux/video0/name
/sys/devices/platform/soc-camera-pdrv.0/video4linux/video1/name

でした。
お手数をおかけいたしますが、設定法等アドバイス宜しくお願い致します。

以上

> 原田です。
>
> 問題の切り分けのため、 Armadillo-810上で以下の3つのコマンド実行し、
> その結果を教えてもらえませんでしょうか?
>
> ■ カーネルにACMドライバが組み込まれているかの確認
> [armadiilo]# zcat /proc/config.gz |grep ACM
> CONFIG_VIDEO_ACM=y
> CONFIG_VIDEO_ACM_DECODER=y
> CONFIG_VIDEO_ACM_ENCODER=y
> # CONFIG_FB_MACMODES is not set
> # CONFIG_USB_ACM is not set
> # CONFIG_USB_G_ACM_MS is not set
> # CONFIG_USB_G_UVC_ACM_ETHER is not set
>
> ■ ACM がencoder modeに設定されているかの確認
> [armadiilo]# cat /sys/devices/platform/acm.0/codec
> decoder [encoder] none
>
> ■aencoderがV4L2デバイスとして認識されているかの確認
> [armadiilo]# find /sys/ |grep video |grep name
> /sys/devices/virtual/acm/acm_h264enc/video0/name
> /sys/devices/virtual/acm/acm_jpegenc/video2/name
> /sys/devices/virtual/video4linux/video1/name
> /sys/devices/platform/soc-camera-pdrv.0/video4linux/video3/name
>
>

at_makoto.harada

2014年7月3日 18時48分

原田です。

>■ ACM がencoder modeに設定されているかの確認
>[root@armadillo810-0 (ttySC2) ~]# cat /sys/devices/platform/acm.0/codec
>decoder encoder [none]
ACMがencoder modeに設定されていないようですね。

echo encoder > /sys/devices/platform/acm.0/codec
と実行してみると、ACMがencoder modeで起動し、V4L2デバイスとして認識されるはずです。

この設定は、Armadillo-810起動時に、rc.local の以下のコードでencoder modeに
自動設定されるように設計されています。

■ /etc/config/rc.local (抜粋)

#
# for AV Codec Midleware
#   - load firmware
#
ACM_CODEC=encoder
ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
if [ -e $ACM_CODEC_SYSFS ]; then
        if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
                echo -n "load ${ACM_CODEC} firmware: "
                echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
                for i in 1 2 3 4 5; do
                        sleep 1
                        grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
                        if [ $? -eq 0 ]; then
                                break
                        else
                                false
                        fi
                done
                check_status
        fi
fi

rc.localファイルを含むconfig以下の設定ファイルはフラッシュに書きこまれています。
もし上記コードが場合がない場合は、atmark-dist-20140602.tar.gz を用いて
ビルドしたユーザーランドイメージでArmadillo-810を起動させ、
[armadillo ~]# flatfsd -w
としコンフィグ領域の初期化を実施してください。

以降、Armadillo-810が起動すると自動的にencoder modeに設定されるはずです。

コンフィグ領域の初期化に関しては製品マニュアルの以下も参考にしてみてください。
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…

hirao-technoaccell

2014年7月4日 13時43分

原田様

平尾です。アドバイスありがとうございます。
早速
[armadillo ~]# flatfsd -w
でコンフィグ領域の初期化を行ってみましたが結果は同じでした。

[root@armadillo810-0 (ttySC2) ~]# gst-launch-1.0 -e v4l2src device=/dev/video1 \
> ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \
> ! acmh264enc ! queue \
> ! qtmux ! filesink location=/mnt/output.mp4
Setting pipeline to PAUSED ...
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstAcmH264Enc:acmh264enc0: Resource n
ot found.
Additional debug info:
gstacmh264enc.c(585): gst_acm_h264_enc_open (): /GstPipeline:pipeline0/GstAcmH26
4Enc:acmh264enc0:
Failed open device (null). (Bad address)
Setting pipeline to NULL ...
Freeing pipeline ...
[root@armadillo810-0 (ttySC2) ~]# g_uvc_acm_ether gadget: high-speed config #1:
UVC Composite with ACM and RNDIS

アドバイス頂いたrc.localの内容を見てみましたが、メールで貼り付けて頂いたコードの・・・・・then以下が欠落していました。
対策として

echo -n "load ${ACM_CODEC} firmware: "
echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
for i in 1 2 3 4 5; do
sleep 1
grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
if [ $? -eq 0 ]; then
break
else
false
fi
done
check_status
fi
fi

をviエディターでペーストすれば宜しのでしょうか?
初歩的な質問で恐縮ですが、宜しくお願い致します。

以上

[root@armadillo810-0 (ttySC2) ~]# vi /etc/config/rc.local
(省略)
# for AV Codec Midleware
# - load firmware
#
ACM_CODEC=encoder
ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
if [ -e $ACM_CODEC_SYSFS ]; then
if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
- /etc/config/rc.local 1/37 2%

> 原田です。
>
> >■ ACM がencoder modeに設定されているかの確認
> >[root@armadillo810-0 (ttySC2) ~]# cat /sys/devices/platform/acm.0/codec
> >decoder encoder [none]
> ACMがencoder modeに設定されていないようですね。
>
> echo encoder > /sys/devices/platform/acm.0/codec
> と実行してみると、ACMがencoder modeで起動し、V4L2デバイスとして認識されるはずです。
>
> この設定は、Armadillo-810起動時に、rc.local の以下のコードでencoder modeに
> 自動設定されるように設計されています。
>
> ■ /etc/config/rc.local (抜粋)
>

> #
> # for AV Codec Midleware
> #   - load firmware
> #
> ACM_CODEC=encoder
> ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
> if [ -e $ACM_CODEC_SYSFS ]; then
>         if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
>                 echo -n "load ${ACM_CODEC} firmware: "
>                 echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
>                 for i in 1 2 3 4 5; do
>                         sleep 1
>                         grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
>                         if [ $? -eq 0 ]; then
>                                 break
>                         else
>                                 false
>                         fi
>                 done
>                 check_status
>         fi
> fi
> 

>
> rc.localファイルを含むconfig以下の設定ファイルはフラッシュに書きこまれています。
> もし上記コードが場合がない場合は、atmark-dist-20140602.tar.gz を用いて
> ビルドしたユーザーランドイメージでArmadillo-810を起動させ、
> [armadillo ~]# flatfsd -w
> としコンフィグ領域の初期化を実施してください。
>
> 以降、Armadillo-810が起動すると自動的にencoder modeに設定されるはずです。
>
> コンフィグ領域の初期化に関しては製品マニュアルの以下も参考にしてみてください。
> http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…
>

hirao-technoaccell

2014年7月4日 15時22分

原田様

平尾です。rc.localに関して私の勘違いがありましたので修正いたします。

rc.localの内容ですが
# for AV Codec Midleware
# - load firmware
#
ACM_CODEC=encoder
ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
if [ -e $ACM_CODEC_SYSFS ]; then
if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
echo -n "load ${ACM_CODEC} firmware: "
echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
for i in 1 2 3 4 5; do
sleep 1
grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
if [ $? -eq 0 ]; then
break
else
false
fi
done
check_status
fi
fi
と正しく入っていました。間違った情報をお送りして申し訳ありませんでした。
ただ、
[root@armadillo810-0 (ttySC2) ~]# echo encoder > /sys/devices/platform/acm.0/cod
ec
を入力すると
[root@armadillo810-0 (ttySC2) ~]# acm acm.0: failed to request firmware
が返って来てACMがencoder modeに設定できていないようです。

以上

> 原田様
>
> 平尾です。アドバイスありがとうございます。
> 早速
> [armadillo ~]# flatfsd -w
> でコンフィグ領域の初期化を行ってみましたが結果は同じでした。
>
> [root@armadillo810-0 (ttySC2) ~]# gst-launch-1.0 -e v4l2src device=/dev/video1 \
> > ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \
> > ! acmh264enc ! queue \
> > ! qtmux ! filesink location=/mnt/output.mp4
> Setting pipeline to PAUSED ...
> sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
> sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
> ERROR: Pipeline doesn't want to pause.
> ERROR: from element /GstPipeline:pipeline0/GstAcmH264Enc:acmh264enc0: Resource n
> ot found.
> Additional debug info:
> gstacmh264enc.c(585): gst_acm_h264_enc_open (): /GstPipeline:pipeline0/GstAcmH26
> 4Enc:acmh264enc0:
> Failed open device (null). (Bad address)
> Setting pipeline to NULL ...
> Freeing pipeline ...
> [root@armadillo810-0 (ttySC2) ~]# g_uvc_acm_ether gadget: high-speed config #1:
> UVC Composite with ACM and RNDIS
>
> アドバイス頂いたrc.localの内容を見てみましたが、メールで貼り付けて頂いたコードの・・・・・then以下が欠落していました。
> 対策として
>
> echo -n "load ${ACM_CODEC} firmware: "
> echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
> for i in 1 2 3 4 5; do
> sleep 1
> grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
> if [ $? -eq 0 ]; then
> break
> else
> false
> fi
> done
> check_status
> fi
> fi
>
> をviエディターでペーストすれば宜しのでしょうか?
> 初歩的な質問で恐縮ですが、宜しくお願い致します。
>
> 以上
>
> [root@armadillo810-0 (ttySC2) ~]# vi /etc/config/rc.local
> (省略)
> # for AV Codec Midleware
> # - load firmware
> #
> ACM_CODEC=encoder
> ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
> if [ -e $ACM_CODEC_SYSFS ]; then
> if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
> - /etc/config/rc.local 1/37 2%
>
>
>
> > 原田です。
> >
> > >■ ACM がencoder modeに設定されているかの確認
> > >[root@armadillo810-0 (ttySC2) ~]# cat /sys/devices/platform/acm.0/codec
> > >decoder encoder [none]
> > ACMがencoder modeに設定されていないようですね。
> >
> > echo encoder > /sys/devices/platform/acm.0/codec
> > と実行してみると、ACMがencoder modeで起動し、V4L2デバイスとして認識されるはずです。
> >
> > この設定は、Armadillo-810起動時に、rc.local の以下のコードでencoder modeに
> > 自動設定されるように設計されています。
> >
> > ■ /etc/config/rc.local (抜粋)
> >

> > #
> > # for AV Codec Midleware
> > #   - load firmware
> > #
> > ACM_CODEC=encoder
> > ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
> > if [ -e $ACM_CODEC_SYSFS ]; then
> >         if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
> >                 echo -n "load ${ACM_CODEC} firmware: "
> >                 echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
> >                 for i in 1 2 3 4 5; do
> >                         sleep 1
> >                         grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
> >                         if [ $? -eq 0 ]; then
> >                                 break
> >                         else
> >                                 false
> >                         fi
> >                 done
> >                 check_status
> >         fi
> > fi
> > 

> >
> > rc.localファイルを含むconfig以下の設定ファイルはフラッシュに書きこまれています。
> > もし上記コードが場合がない場合は、atmark-dist-20140602.tar.gz を用いて
> > ビルドしたユーザーランドイメージでArmadillo-810を起動させ、
> > [armadillo ~]# flatfsd -w
> > としコンフィグ領域の初期化を実施してください。
> >
> > 以降、Armadillo-810が起動すると自動的にencoder modeに設定されるはずです。
> >
> > コンフィグ領域の初期化に関しては製品マニュアルの以下も参考にしてみてください。
> > http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…
> >

at_makoto.harada

2014年7月4日 17時46分

>[root@armadillo810-0 (ttySC2) ~]# echo encoder > /sys/devices/platform/acm.0/codec
>を入力すると
>[root@armadillo810-0 (ttySC2) ~]# acm acm.0: failed to request firmware
>が返って来てACMがencoder modeに設定できていないようです。
ファームウェアが正しくロードできてないために起きている問題のようですね。

ACMのファムーウェアは、フラッシュメモリのfirmware領域に格納されており、
Armadillo 起動時に /opt/firmware にmount されます。

以下のコマンドを実行し、/opt/firmware にmount されているか確認してみてください。
[armadillo ~]# ls /opt/firmware/
acm sgx

mountされていない場合は、恐らく起動時のログでfirmware領域の
mount できていないエラーメッセージが出力されていると思います。
# dmesg |grep firmware
等でメッセージを確認してみてください。

正常な場合は以下のようなメッセージになるかと思います

■ 正常時起動メッセージ例
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man… より抜粋
Mounting firmware on /opt/firmware: done
Mounting license on /opt/license: done
Mounting tmpfs on /tmp, /var/tmp: done
Mounting ramfs on /home/ftp/pub: done
Creating decoder firmware symlink: done
Creating encoder firmware symlink: done

ファームウェアのマウントが失敗している場合は、フラッシュメモリのfirmware領域が壊れている可能性があります。
以下のサイトより、"Armadillo-800シリーズ Firmwareパーティション用イメージファイル"
をダウンロードし、A810のFlashのfirmware領域をダウンロードしたイメージファイルで書き直してください。
https://users.atmark-techno.com/download/armadillo-810

■ フラッシュメモリの書き換え方法
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…

例えば netflashを利用する場合は、ATDE5の /var/www/にfirmwareを配置し、以下のようにコマンドを実行します。
(IPアドレスはご使用の環境にあわせて適宜変更してくださいね。)
[armadillo ~]# netflash -b -k -n -u -s -r /dev/flash/firmware http://172.16.42.1/squashfs-a800-firmware-v3.00.img

以上です。

hirao-technoaccell

2014年7月4日 19時27分

原田様

平尾です。丁寧なご説明ありがとうございます。
ご指導に従いファームウェアを書き換えましたが状況は変わりません。
ファームウェアは正常に書き換えで来たようです。

[root@armadillo810-0 (ttySC2) ~]# netflash -b -k -n -u -s -r /dev/flash/firmware
http://atde5.local/squashfs-a800-firmware-v3.00.img
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
.....................................................
netflash: got "http://atde5.local/squashfs-a800-firmware-v3.00.img", length=6144
00
netflash: programming FLASH device /dev/flash/firmware

その後再度電源を入れ直しリブートしたのですが

load encoder firmware: acm acm.0: failed to request firmware
g_uvc_acm_ether gadget: high-speed config #1: UVC Composite with ACM and RNDIS
Unable to stop video stream: Device or resource busy
failed

のログメッセージがでました。また

[root@armadillo810-0 (ttySC2) ~]# dmesg |grep firmware
0x0000000c0000-0x0000004c0000 : "firmware"
acm acm.0: failed to request firmware

[root@armadillo810-0 (ttySC2) ~]# ls /opt/firmware/
[root@armadillo810-0 (ttySC2) ~]#

となりacmがmountされていないようです。

一点気になるのが、私はSDブートを使っています。フラッシュメモリのFirmwareを修正することで良いのでしょうか?Linux初心者のため見当違いなことを言っているかもしれません。
宜しくお願い致します。

以上

> >[root@armadillo810-0 (ttySC2) ~]# echo encoder > /sys/devices/platform/acm.0/codec
> >を入力すると
> >[root@armadillo810-0 (ttySC2) ~]# acm acm.0: failed to request firmware
> >が返って来てACMがencoder modeに設定できていないようです。
> ファームウェアが正しくロードできてないために起きている問題のようですね。
>
> ACMのファムーウェアは、フラッシュメモリのfirmware領域に格納されており、
> Armadillo 起動時に /opt/firmware にmount されます。
>
> 以下のコマンドを実行し、/opt/firmware にmount されているか確認してみてください。
> [armadillo ~]# ls /opt/firmware/
> acm sgx
>
> mountされていない場合は、恐らく起動時のログでfirmware領域の
> mount できていないエラーメッセージが出力されていると思います。
> # dmesg |grep firmware
> 等でメッセージを確認してみてください。
>
> 正常な場合は以下のようなメッセージになるかと思います
>
> ■ 正常時起動メッセージ例
> http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man… より抜粋
> Mounting firmware on /opt/firmware: done
> Mounting license on /opt/license: done
> Mounting tmpfs on /tmp, /var/tmp: done
> Mounting ramfs on /home/ftp/pub: done
> Creating decoder firmware symlink: done
> Creating encoder firmware symlink: done
>
> ファームウェアのマウントが失敗している場合は、フラッシュメモリのfirmware領域が壊れている可能性があります。
> 以下のサイトより、"Armadillo-800シリーズ Firmwareパーティション用イメージファイル"
> をダウンロードし、A810のFlashのfirmware領域をダウンロードしたイメージファイルで書き直してください。
> https://users.atmark-techno.com/download/armadillo-810
>
> ■ フラッシュメモリの書き換え方法
> http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…
>
> 例えば netflashを利用する場合は、ATDE5の /var/www/にfirmwareを配置し、以下のようにコマンドを実行します。
> (IPアドレスはご使用の環境にあわせて適宜変更してくださいね。)
> [armadillo ~]# netflash -b -k -n -u -s -r /dev/flash/firmware http://172.16.42.1/squashfs-a800-firmware-v3.00.img
>
> 以上です。
>
>
>

hirao-technoaccell

2014年7月4日 22時47分

原田様

平尾です。お世話になっております。追加情報をお送りいたします。
下記メールでお伝えした

load encoder firmware: acm acm.0: failed to request firmware
g_uvc_acm_ether gadget: high-speed config #1: UVC Composite with ACM and RNDIS
Unable to stop video stream: Device or resource busy
failed

の他に、

Mounting firmware on /opt/firmware: SQUASHFS error: unable to read id index table
failed

のエラーもログにあることに気が付きました。
どうもid indexが読めず、そのためファームウェアがロードできないようです。どのように対処すればよいかご指導頂きたく。
尚、関係あるかどうかわかりませんが、SDブートでシステムを立ち上げています。
宜しくお願い致します。

以上

> 原田様
>
> 平尾です。丁寧なご説明ありがとうございます。
> ご指導に従いファームウェアを書き換えましたが状況は変わりません。
> ファームウェアは正常に書き換えで来たようです。
>
> [root@armadillo810-0 (ttySC2) ~]# netflash -b -k -n -u -s -r /dev/flash/firmware
> http://atde5.local/squashfs-a800-firmware-v3.00.img
> ................................................................................
> ................................................................................
> ................................................................................
> ................................................................................
> ................................................................................
> ................................................................................
> ................................................................................
> ................................................................................
> .....................................................
> netflash: got "http://atde5.local/squashfs-a800-firmware-v3.00.img", length=6144
> 00
> netflash: programming FLASH device /dev/flash/firmware
>
> その後再度電源を入れ直しリブートしたのですが
>
> load encoder firmware: acm acm.0: failed to request firmware
> g_uvc_acm_ether gadget: high-speed config #1: UVC Composite with ACM and RNDIS
> Unable to stop video stream: Device or resource busy
> failed
>
> のログメッセージがでました。また
>
> [root@armadillo810-0 (ttySC2) ~]# dmesg |grep firmware
> 0x0000000c0000-0x0000004c0000 : "firmware"
> acm acm.0: failed to request firmware
>
> [root@armadillo810-0 (ttySC2) ~]# ls /opt/firmware/
> [root@armadillo810-0 (ttySC2) ~]#
>
> となりacmがmountされていないようです。
>
> 一点気になるのが、私はSDブートを使っています。フラッシュメモリのFirmwareを修正することで良いのでしょうか?Linux初心者のため見当違いなことを言っているかもしれません。
> 宜しくお願い致します。
>
> 以上
>
> > >[root@armadillo810-0 (ttySC2) ~]# echo encoder > /sys/devices/platform/acm.0/codec
> > >を入力すると
> > >[root@armadillo810-0 (ttySC2) ~]# acm acm.0: failed to request firmware
> > >が返って来てACMがencoder modeに設定できていないようです。
> > ファームウェアが正しくロードできてないために起きている問題のようですね。
> >
> > ACMのファムーウェアは、フラッシュメモリのfirmware領域に格納されており、
> > Armadillo 起動時に /opt/firmware にmount されます。
> >
> > 以下のコマンドを実行し、/opt/firmware にmount されているか確認してみてください。
> > [armadillo ~]# ls /opt/firmware/
> > acm sgx
> >
> > mountされていない場合は、恐らく起動時のログでfirmware領域の
> > mount できていないエラーメッセージが出力されていると思います。
> > # dmesg |grep firmware
> > 等でメッセージを確認してみてください。
> >
> > 正常な場合は以下のようなメッセージになるかと思います
> >
> > ■ 正常時起動メッセージ例
> > http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man… より抜粋
> > Mounting firmware on /opt/firmware: done
> > Mounting license on /opt/license: done
> > Mounting tmpfs on /tmp, /var/tmp: done
> > Mounting ramfs on /home/ftp/pub: done
> > Creating decoder firmware symlink: done
> > Creating encoder firmware symlink: done
> >
> > ファームウェアのマウントが失敗している場合は、フラッシュメモリのfirmware領域が壊れている可能性があります。
> > 以下のサイトより、"Armadillo-800シリーズ Firmwareパーティション用イメージファイル"
> > をダウンロードし、A810のFlashのfirmware領域をダウンロードしたイメージファイルで書き直してください。
> > https://users.atmark-techno.com/download/armadillo-810
> >
> > ■ フラッシュメモリの書き換え方法
> > http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…
> >
> > 例えば netflashを利用する場合は、ATDE5の /var/www/にfirmwareを配置し、以下のようにコマンドを実行します。
> > (IPアドレスはご使用の環境にあわせて適宜変更してくださいね。)
> > [armadillo ~]# netflash -b -k -n -u -s -r /dev/flash/firmware http://172.16.42.1/squashfs-a800-firmware-v3.00.img
> >
> > 以上です。
> >
> >
> >

at_makoto.harada

2014年7月7日 11時40分

問題の切り分けのため、一度標準イメージファイル(*1)を用いて、NORフラッシュからのブート
でどうなるか試してみてもらえますでしょうか?
同じ現象が発生する場合、ログインプロンプトが表示されるまでのLinux起動時のログを送付して
頂けませんでしょうか?

(*1)
ブートローダー(フラッシュメモリ用) v3.2.4
Linux kernel v1.05
ユーザーランド v1.05

at_makoto.harada

2014年7月7日 11時53分

原田です。

1点、今気づいたことがあります。

> netflash: got "http://atde5.local/squashfs-a800-firmware-v3.00.img", length=614400

ファームウェアイメージのlength=614400はおかしいですね。正しいファイルは2MB程度あるはずです。
再度ご確認してみてください。

[PC ~/]$ ls squashfs-a800-firmware-v3.00.img -l
-rw------- 1 makoto makoto 2068480 7月 7 11:45 squashfs-a800-firmware-v3.00.img

hirao-technoaccell

2014年7月7日 14時42分

原田様

平尾です。ご指摘ありがとうございます。AVコーディックが起動出来ましたのでご連絡いたします。

早速再度Firmwareを書き込んでみました。

root@armadillo810-0 (ttySC2) ~]# netflash -b -k -n -u -s -r /dev/flash/firmware
http://atde5.local/squashfs-a800-firmware-v3.00.img
................................................................................
(省略)
...................................................
netflash: got "http://atde5.local/squashfs-a800-firmware-v3.00.img", length=2068480
netflash: programming FLASH device /dev/flash/firmware

となり、確かに2M以上のファイルを確認できました。
その後、再ブートしたところ

load encoder firmware: g_uvc_acm_ether gadget: high-speed config #1: UVC Composi
te with ACM and RNDIS
Unable to stop video stream: Device or resource busy
acm_h264enc: H.264 Encoder of AV Codec Middleware
acm_aacenc: AAC Encoder of AV Coenc Middleware
acm_jpegenc: JPEG Encoder of AV Codec Middleware
done

と表示されacmも組み込むことが出来ました。
AVコーディックを起動してみたところ

[root@armadillo810-0 (ttySC2) ~]# killall uvc-gadget
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
[root@armadillo810-0 (ttySC2) ~]# g_uvc_acm_ether gadget: high-speed config #1:
UVC Composite with ACM and RNDIS

[root@armadillo810-0 (ttySC2) ~]# gst-launch-1.0 -e v4l2src device=/dev/video1 \
> ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \
> ! acmh264enc ! queue \
> ! qtmux ! filesink location=/mnt/output.mp4
Setting pipeline to PAUSED ...
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
WARNING: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not get
parameters on device '/dev/video1'
Additional debug info:
gstv4l2object.c(2445): gst_v4l2_object_set_format (): /GstPipeline:pipeline0/Gst
V4l2Src:v4l2src0:
system error: Inappropriate ioctl for device
Redistribute latency...
.Caught interrupt -- handling interrupt.
Interrupt: Stopping pipeline ...
EOS on shutdown enabled -- Forcing EOS on the pipeline
Waiting for EOS...
Got EOS from element "pipeline0".
EOS received - stopping pipeline...
Execution ended after 7066281000 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
Freeing pipeline

となりました。/mnt/output.mp4 をVMwaveで再生したところカメラ画像を確認できました。
ありがとうございました。助かりました。
今後共宜しくお願い致します。

以上

> 原田です。
>
> 1点、今気づいたことがあります。
>
> > netflash: got "http://atde5.local/squashfs-a800-firmware-v3.00.img", length=614400
>
> ファームウェアイメージのlength=614400はおかしいですね。正しいファイルは2MB程度あるはずです。
> 再度ご確認してみてください。
>
> [PC ~/]$ ls squashfs-a800-firmware-v3.00.img -l
> -rw------- 1 makoto makoto 2068480 7月 7 11:45 squashfs-a800-firmware-v3.00.img
>
>

hirao-technoaccell

2014年7月4日 17時58分

原田様

平尾です。お世話になっております。五月雨式のお問い合わせで恐縮です。
[root@armadillo810-0 (ttySC2) ~]# echo encoder > /sys/devices/platform/acm.0/cod
ec
を入力すると
[root@armadillo810-0 (ttySC2) ~]# acm acm.0: failed to request firmware
がでる現象について自分なりに調べて気がついた点があります。
SDブートで使っていますが、ブート時のログに

Starting sshd: failed
(sshd: you will be available to use after run '/etc/init.d/sshd keygen')
Running local start script (/etc/config/rc.local).
Starting uvc-gadget: sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver att
ached to camera 0
done
load encoder firmware: acm acm.0: failed to request firmware
g_uvc_acm_ether gadget: high-speed config #1: UVC Composite with ACM and RNDIS
Unable to stop video stream: Device or resource busy
faile

があり、acmのファームウェアの読み込みに失敗していることに気が付きました。何かconfig等の設定でミスをしているような気がしますが如何でしょうか?調査すべき点等あればアドバイス頂けるとありがたいです。

以上

> 原田様
>
> 平尾です。rc.localに関して私の勘違いがありましたので修正いたします。
>
> rc.localの内容ですが
> # for AV Codec Midleware
> # - load firmware
> #
> ACM_CODEC=encoder
> ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
> if [ -e $ACM_CODEC_SYSFS ]; then
> if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
> echo -n "load ${ACM_CODEC} firmware: "
> echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
> for i in 1 2 3 4 5; do
> sleep 1
> grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
> if [ $? -eq 0 ]; then
> break
> else
> false
> fi
> done
> check_status
> fi
> fi
> と正しく入っていました。間違った情報をお送りして申し訳ありませんでした。
> ただ、
> [root@armadillo810-0 (ttySC2) ~]# echo encoder > /sys/devices/platform/acm.0/cod
> ec
> を入力すると
> [root@armadillo810-0 (ttySC2) ~]# acm acm.0: failed to request firmware
> が返って来てACMがencoder modeに設定できていないようです。
>
> 以上
>
> > 原田様
> >
> > 平尾です。アドバイスありがとうございます。
> > 早速
> > [armadillo ~]# flatfsd -w
> > でコンフィグ領域の初期化を行ってみましたが結果は同じでした。
> >
> > [root@armadillo810-0 (ttySC2) ~]# gst-launch-1.0 -e v4l2src device=/dev/video1 \
> > > ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \
> > > ! acmh264enc ! queue \
> > > ! qtmux ! filesink location=/mnt/output.mp4
> > Setting pipeline to PAUSED ...
> > sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
> > sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
> > ERROR: Pipeline doesn't want to pause.
> > ERROR: from element /GstPipeline:pipeline0/GstAcmH264Enc:acmh264enc0: Resource n
> > ot found.
> > Additional debug info:
> > gstacmh264enc.c(585): gst_acm_h264_enc_open (): /GstPipeline:pipeline0/GstAcmH26
> > 4Enc:acmh264enc0:
> > Failed open device (null). (Bad address)
> > Setting pipeline to NULL ...
> > Freeing pipeline ...
> > [root@armadillo810-0 (ttySC2) ~]# g_uvc_acm_ether gadget: high-speed config #1:
> > UVC Composite with ACM and RNDIS
> >
> > アドバイス頂いたrc.localの内容を見てみましたが、メールで貼り付けて頂いたコードの・・・・・then以下が欠落していました。
> > 対策として
> >
> > echo -n "load ${ACM_CODEC} firmware: "
> > echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
> > for i in 1 2 3 4 5; do
> > sleep 1
> > grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
> > if [ $? -eq 0 ]; then
> > break
> > else
> > false
> > fi
> > done
> > check_status
> > fi
> > fi
> >
> > をviエディターでペーストすれば宜しのでしょうか?
> > 初歩的な質問で恐縮ですが、宜しくお願い致します。
> >
> > 以上
> >
> > [root@armadillo810-0 (ttySC2) ~]# vi /etc/config/rc.local
> > (省略)
> > # for AV Codec Midleware
> > # - load firmware
> > #
> > ACM_CODEC=encoder
> > ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
> > if [ -e $ACM_CODEC_SYSFS ]; then
> > if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
> > - /etc/config/rc.local 1/37 2%
> >
> >
> >
> > > 原田です。
> > >
> > > >■ ACM がencoder modeに設定されているかの確認
> > > >[root@armadillo810-0 (ttySC2) ~]# cat /sys/devices/platform/acm.0/codec
> > > >decoder encoder [none]
> > > ACMがencoder modeに設定されていないようですね。
> > >
> > > echo encoder > /sys/devices/platform/acm.0/codec
> > > と実行してみると、ACMがencoder modeで起動し、V4L2デバイスとして認識されるはずです。
> > >
> > > この設定は、Armadillo-810起動時に、rc.local の以下のコードでencoder modeに
> > > 自動設定されるように設計されています。
> > >
> > > ■ /etc/config/rc.local (抜粋)
> > >

> > > #
> > > # for AV Codec Midleware
> > > #   - load firmware
> > > #
> > > ACM_CODEC=encoder
> > > ACM_CODEC_SYSFS=/sys/devices/platform/acm.0/codec
> > > if [ -e $ACM_CODEC_SYSFS ]; then
> > >         if [ "${ACM_CODEC}" = "encoder" -o "${ACM_CODEC}" = "decoder" ]; then
> > >                 echo -n "load ${ACM_CODEC} firmware: "
> > >                 echo "${ACM_CODEC}" > $ACM_CODEC_SYSFS
> > >                 for i in 1 2 3 4 5; do
> > >                         sleep 1
> > >                         grep "\[${ACM_CODEC}\]" $ACM_CODEC_SYSFS > /dev/null
> > >                         if [ $? -eq 0 ]; then
> > >                                 break
> > >                         else
> > >                                 false
> > >                         fi
> > >                 done
> > >                 check_status
> > >         fi
> > > fi
> > > 

> > >
> > > rc.localファイルを含むconfig以下の設定ファイルはフラッシュに書きこまれています。
> > > もし上記コードが場合がない場合は、atmark-dist-20140602.tar.gz を用いて
> > > ビルドしたユーザーランドイメージでArmadillo-810を起動させ、
> > > [armadillo ~]# flatfsd -w
> > > としコンフィグ領域の初期化を実施してください。
> > >
> > > 以降、Armadillo-810が起動すると自動的にencoder modeに設定されるはずです。
> > >
> > > コンフィグ領域の初期化に関しては製品マニュアルの以下も参考にしてみてください。
> > > http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…
> > >