Armadillo 製品アップデートのお知らせ (2014年7月/Armadillo-800シリーズ対象)

Armadillo各製品のソフトウェアのアップデートを行いました。以下の製品が対象になります。

  • Armadillo-810
  • Armadillo-840

Armadillo 製品アップデートのお知らせ (2014年6月/Armadillo-800シリーズ対象)で通知したように、linux-3.4-at7ではAV コーデックミドルウェアを使用しない場合でも起動時に stack traceが 出力される事がありました。本製品アップデートでは、本問題の改善を行なっています。

尚、AV コーデックミドルウェアを使用した場合に発生すると報告されている以下の問題については、現在調査中です。

  • 数週間程度H.264形式のデータをデコードすると、デコード処理が停止することがある
  • 繰り返しデコードを行うとデコード処理が停止する事がある

カーネル(linux-3.4-at8)

Armadillo-810/840

  • 起動時にカーネルがstack traceを出力する問題の改善
    • CMA (Contiguous Memory Allocator) のサイズを最適化
    • 連続した大きなメモリ領域を確保するために設定していたFORCE_MAX_ZONEORDERの値を、デフォルトの11に戻した (CMAを採用したために、デフォルトの値で問題なくなった)
  • HDMIを無効化する事ができないバグを修正
  • Cirrus Logic製オーディオコーデック CS4270に対応
  • オーディオ出力チャンネル数が間違っていたバグを修正
  • オーディオ出力チャンネルの左右が反転していたバグを修正

標準イメージファイル

カーネルの変更に伴い、標準イメージが変更となります。

Armadillo-840

Armadillo-810

カーネル linux-3.4-at8使用時の制限事項

Armadillo-810およびArmadillo-840は、2014年7月11日時点で以下の仕様制限があります。

  • H.264 EncoderとHDMI出力を同時に使用する事ができない (Armadillo-840)
  • 大きなユーザーランドを使用した場合、起動時にメモリが枯渇しstack traceが出る (Armadillo-810およびArmadillo-840)

尚、本制限事項は、今後の製品アップデートにて対策される予定です。

H.264 Encoder使用時のカーネルコンフィギュレーション

今回リリースしたカーネルイメージでは、H.264 Encoder と HDMI出力を同時に使用する事ができません。Armadillo-810はHDMI出力機能がありませんので、H.264 Encoderを使う場合でも本設定を行う必要はありません。

Armadillo-840でH.264 Encoderを使用する場合には、カーネルコンフィギュレーションで a) HDMI出力を無効化し、b) CMAの空間サイズを 96 MB に設定してください。

Kernel Configuration
   Device Drivers  --->
      Graphics support  --->
         <*> Support for frame buffer devices  --->
            <*>   SuperH Mobile LCDC framebuffer support
            < >     SuperH Mobile HDMI controller support   (a)チェックを外す

Kernel Configuration
   Device Driver --->
      Generic Driver Options --->
         [*] Contiguous Memory Allocator (EXPERIMENTAL)
         (96) Size in Mega Bytes                            (b)設定値を96に変更

Technical Detail

Armadillo-840では、AV コーデックミドルウェアが使用するメモリ領域を CMA (Contiguous Memory Allocator)という機能を使って実現しています。linux-3.4-at6では、CMAが確保しているメモリ領域が大きいために、カーネルがメモリを必要とした時に十分なメモリ量を確保できない現象が発生していました。起動時に stack trace が表示されたのは、カーネルがユーザーランド(ルートファイルシステム)をコピーする時にメモリが枯渇してしまったためです。

以下に示すようなログが出力された場合は、ユーザーランドを小さくするか、CMAの設定値を小さくしてください。CMAの設定値によっては、AVコーデックミドルウェアや HDMIなどが正しく動作しない場合があります。

RAMDISK: ext2 filesystem found at block 0
RAMDISK: Loading 105282KiB [1 disk] into ram disk... \
swapper: page allocation failure: order:0, mode:0x20
Backtrace:
[<c0011108>] (dump_backtrace+0x0/0x110) from [<c03ecddc>] (dump_stack+0x18/0x1c)
 r6:00000000 r5:00000020 r4:00000002 r3:c056a640
[<c03ecdc4>] (dump_stack+0x0/0x1c) from [<c0083358>] (warn_alloc_failed+0x100/0x120)
[<c0083258>] (warn_alloc_failed+0x0/0x120) from [<c0085628>] (__alloc_pages_nodemask+0x578/0x5fc)
 r3:d183799c r2:00000000
 r7:00000000 r6:d1836000 r5:d1836000 r4:00000020
[<c00850b0>] (__alloc_pages_nodemask+0x0/0x5fc) from [<c03ee08c>] (cache_alloc_refill+0x2d4/0x5a8)
[<c03eddb8>] (cache_alloc_refill+0x0/0x5a8) from [<c00ace20>] (kmem_cache_alloc+0x64/0xac)
[<c00acdbc>] (kmem_cache_alloc+0x0/0xac) from [<c00d8f4c>] (__bdi_start_writeback+0x2c/0x74)
(省略)
done.
VFS: Mounted root (ext2 filesystem) on device 1:0.

今回のリリースでは、大きなメモリ領域を必要とする H.264 EncoderとHDMIの同時使用を一時的に禁止し、CMAとして割り当てるメモリサイズを小さくすることで、問題の対策を行なっています。今後 AV コーデックミドルウェア自体のメモリ使用量を改善し、H.264 Encoder と HDMI の同時使用を可能にする予定です。

今回のカーネルでも、Armadillo-840のユーザーランドイメージファイルを小さくできる場合は、H.264 Encoder と HDMI を同時に両方を使うことが可能です。試す場合は、CMAのサイズを 128 MB に設定してください。