第4章 ソフトウェア仕様変更点

4.1. ATDE

Linux 3.14 を利用する場合は、ATDE5 が必要です。ATDE5 は、Debian GNU/Linux 7 (“wheezy”)をベースにした開発環境です。従来の ATDE3 ではコンパイルできません。

4.1.1. パッケージバージョン

ATDE3 のべースになっている Debian Lenny は 2009年に、ATDE5 のベースになっている Debian Wheezy は 2013 に最初にリリースされました。そのため、含まれるパッケージのバージョンが異なります。下記の表に主なパケージのバージョンをリストアップします。

パッケージATDE5ATDE3
gcc4.64.3
libc62.132.7
libssl1.0.1e0.9.8g
libjpeg8d6b
glib2.32.42.16.6

4.2. ブートローダ差分

フラッシュメモリのメモリマップの変更に伴い、ブートローダを変更しました。Armadillo-400シリーズ Linux 3.14では Hermit-At v3.8.0 以降で動作します。ブートローダーの動作仕様には変更ありません。

[注記]

Hermit-At v3.8.0は、使用するカーネルサイズに制限があります。展開後のカーネルイメージが 8MB以下になるようにしてください。

本制限は今後の製品アップデートにて改善する予定です。

4.3. Linux カーネル

4.3.1. I2C仕様変更

Linux 3.14へのアップデートにより、I2Cに関する構造体の名前が変更になりました。差分については以下の通りです。

ハードウェアLinux 3.14Linux 2.6.26

I2C2

armadillo4x0_i2c1

armadillo400_i2c2_board_info

I2Cにスレーブデバイスを接続し使用する場合には、本差分を加味し、linux/arch/arm/mach-imx/armadillo4x0_extif.cを記載する必要があります。

4.3.2. SPI

Linux 3.14へのアップデートにより、SPIのバス番号が変更になりました。2.6.26 では 1 始まりだったバス番号が、3.14 では 0 始まりに変更されています。また、変数名も変更されています。

 Linux 3.14Linux 2.6.26
CSPI101
CSPI323
 Linux 3.14Linux 2.6.26
CSPI1armadillo4x0_spi0_board_infoarmadillo400_spi1_board_info
CSPI3armadillo4x0_spi2_board_infoarmadillo400_spi3_board_info

SPIにスレーブデバイスを接続し使用する場合には、本差分を加味し、linux/arch/arm/mach-imx/armadillo4x0_extif.cや、アプリケーションのデバイスファイル名などを記載する必要があります。

4.3.3. PWM

Linux 3.14へのアップデートにより、PWM 機能が Linux PWM Frameworkの実装に変更となりました。Linux 2.6.26のPWMドライバは独自実装となっていました。

仕様差分は以下の通りです

  • PWMを使用する前に、exportする必要がある
  • sysfsのパス、ファイル名が異なる
  • sysfsのファイル(polarity)にセットする値が異なる

PWMを利用する場合は、利用するコントローラーが持つ "チャンネル" を "export" する必要があります。export したいチャンネル番号を /sys/class/pwm/pwmchip[N]/export に書込みます。

/sys/class/pwm/pwmchip[N]/exportN は、カーネルが PWM を認識した順に連番の値が設定されます。ハードウェアとの対応の確認方法については、Armadillo-400シリーズソフトウェアマニュアルを参照してください。

チャンネルは、0 番からの番号が割り振られています。exportすると /sys/class/pwm/pwmchip[N]/pwm[M]/ が生成されます。この時Mがチャンネル番号です。Armadillo-420 の場合、1つのコントローラーに1つのチャンネルしかありませんので、exportには 0 を書いてください。

[armadillo ~]# echo 0 > /sys/class/pwm/pwmchip0/export

/sys/class/pwm/pwmchip[N]/pwm[M]/内には、以下のプロパティが生成されます。

period

PWM信号の周期

duty_cycle

PWM信号のアクティブ時間

polarity

PWM信号のポラリティ

enable

PWMの有効/無効

sysfsのパスの差分は以下の通りです。

Linux 3.14パスLinux 2.6.26パス
/sys/class/pwm/pwmchip[N]/pwm0/sys/class/mxc_pwm/[PWM_NAME]

sysfsのプロパティファイルの対応は以下の通りです。設定値の詳細については、Armadillo-400シリーズ ソフトウェアマニュアル、または linux/Documentation/pwm.txtを参照してください。

Linux 3.14Linux 2.6.26
enableenable
period_nsperiod
duty_nsduty_cycle
invertpolarity

設定する値の範囲や PWMの分解能に、差分はありません。

4.3.4. CAN

Linux 3.14 へのアップデートにより、CAN機能が SocketCAN に準拠した実装へ変更になりました。Linux 2.6.26は、以下の機能が SocketCAN に準拠しておらず、独自実装となっています。

 3.142.6.26
ドライバーの実装SocketCAN 準拠独自実装
CAN通信速度の設定ipコマンドで設定sysfsで設定

CANの通信速度の設定

Linux 3.14 の SocketCAN は、iproute2 に含まれる ip コマンドを利用して通信速度の設定を行います。Linux 2.6.26 では SocketCAN に未対応のため、sysfs を使って設定を行う必要がありました。

現在デフォルトで組み込まれている ip は、iproute2 版ではなく Busybox 版です。BusyBox 版は、CANの通信速度設定をサポートしていません。そのため、CAN を利用する場合は、Atmark Distのユーザーランドコンフィギュレーションであらかじめ iproute2 を組み込む必要があります。

設定は menuconfig の「Userland Configuration」→「Network Applications」で iproute2 と iproute2 の ip にチェックを入れます。

次の例ではipコマンドを使用し、通信速度を125bpsに設定しています。

[armadillo ~]# ip link set can0 type can bitrate 125000 loopback off

リモートフレーム受信時の応答

Linux 2.6.26のi.MXのCANドライバは、リモートフレーム受信を示すフラグ(RTR)に対応していません。そのため、アプリケーションレイヤーにリモートフレーム受信を伝えることができませんでした。そのワークアラウンドとして、CANドライバにリモートフレームの応答を委任する実装となっており、この設定を sysfs で行っていました。

開発している製品が、リモートフレームを受信した時、応答を返す必要がある場合には、アプリケーションにリモートフレームに受信時の処理を追加してください。アプリケーションでの対応方法については、以下のドキュメントを参照してください。

linux/Documentation/networking/can.txt

4.3.5. MTD

echo 0 > /sys/class/mtd/mtd0/ro を実行する事で、Linux動作中にフラッシュメモリの bootloader リージョンに書き込み可能となりました。これにより、netflash コマンドで bootloaderリージョンの書き換えが可能になりました。

4.3.6. halt および shutdown

Linux の halt 時の挙動が変更されています。Linux は、halt 時にカーネル内のすべての割り込みを停止する仕様に変更になりました。この変更により、割り込みでキックしていたハードウェアウォッチドッグタイマのクリア処理が、halt時に停止します。本来であれば halt は、reboot などせずに停止状態となるべきですが、一度スタートさせると停止できないという i.MX25 のウォッチドッグタイマーの仕様のため、Armadillo-420 は reboot してしまいます。動作中のタイムアウト時間はデフォルトで10秒に設定されていいますが、halt 時には最大値の 128 秒に設定します。

そのため halt コマンドを発行した後 128 秒後にウォッチドッグタイマがタイムアウトし、システムがリブートします。

4.3.7. usbfs

Linux 3.14へのアップデートにより、/proc/bus/usb/ に mount されていた usbfs が廃止になりました。usbデバイスの情報は /sys/bus/usb/devices 以下から取得することが出来ます。

4.3.8. デフォルトコンフィギュレーションのファイルの名称変更

デフォルトコンフィギュレーション ファイルの名称を、armadillo400_defconfig から armadillo4x0_defconfig に変更しました。

コマンドライン でコンフィグレーションの初期化を行う場合はご注意ください。 menuconfig で初期化を行う場合(「Default all settings」をチェックする場合)は影響ありません。

4.3.9. 未対応機能

Linux 2.6.26で対応していた以下の機能については、2015年10月時点でサポートしていません。今後の製品アップデートで対応する予定です。

  • オーディオ機能
  • パワーマネジメント機能
  • シリアルポート(CON3) のDTR/DSR制御機能
  • i.MX25のSDMA (Smart Direct Memory Access)機能

4.3.10. 廃止機能

Linux 2.6.26で対応していた以下の機能については、Linux 3.14ではサポートされません。

  • Armadillo-200シリーズ互換 GPIOドライバー
  • Armadillo-200 シリーズ互換 LED ドライバー

GPIO/LEDは sysfs から制御してください。

4.4. Atmark Dist

4.4.1. カーネルバージョンに依存するファイル

Atmark Dist v20151026 以降の Armadillo-420 プロダクトディレクトリ (vendor/AtmarkTechno/Armadillo-420/) では、特定のカーネルバージョン専用のファイルを認識できるようになりました。プロダクトディレクトリ内のファイルで、romfs にインストールされるファイルのうち -3.x-2.6.x のようなサフィックスが付いたファイルが、カーネルバージョンに依存するファイルです。

Linux 2.6.26 と Linux 3.14 で差分があるファイルは次の通りです。

./config.vendor-3.x
./etc/init.d/udevd-3.x
./etc/udev/rules.d/z10_mjpg-streamer.rules-3.x

現在の実装は、プロダクトディレクトリ内の Makefileにあります。

4.4.2. udev を v175 にアップデート

カーネルの Linux 3.14へのアップデートに伴い、udevのバージョンを 105 から 175 へアップデートしています。Linux 3.14 の動作自体には、udev本体のアップデートは必須ではありません。しかしカーネルのアップデートによって /sys/devices/ 以下のパス名が変更になっているため、udevルールの更新は必須です。デバイスファイルの変更は、各デバイスの項で説明します。

また、udev 146 から、文字列置換に使われる名前の大文字と小文字が厳格に[1]なりました。そのため、いままで使えていた $KERNEL$DEVPATHという文字列が使えなくなりました。代わりに $kernel%k、または $devpath%p を使用してください。

ルールの記載方法については、udev(7) manページ、または以下のドキュメントを参照してください。https://www.kernel.org/pub/linux/utils/kernel/hotplug/udev/udev.html

udev 175は、 RUN で実行するスクリプトのタイムアウト時間が60秒に設定されています。タイムアウト時間に達すると udevは そのプロセスをkillします。udev は長い時間プログラムを実行し続けるためのデーモンではないため、このような仕様になっています。もし完了に60秒以上かかる長いプロセスを実行する場合は、udev からは daemon の起動スクリプトのみを実行するなど、別の方法を検討してください。

また、このバージョン変更に伴い、udevマネジメントツールが udevadm に統合されています。udevイベントを確認する場合など、udevマネジメントツールを使う際は udevadm を使用してください。

Linux 3.14Linux 2.6.26
udevadm controludevcontrol
udevadm infoudevinfo
udevadm monitorudevmonitor
udevadm settleudevsettle
udevadm triggerudevtrigger

現在、Linux 3.14 を選択した場合、udev 175 が使われることが想定されており、Linux 3.14 と udev 105 の組み合わせではインストールする起動スクリプトや udev ルールが正しく判断判断されません。

4.4.3. flatfsd を v3.0.2 にアップデート

flatfsdのバージョンをv3.0.1からv3.0.2にアップデートしています。Linux 3.14 の動作自体には、flatfsd v3.0.2 のアップデートは必須ではありません。

このアップデートより、保存するファイルやディレクトリの属性情報として、タイムスタンプも保存できるようになりました。

互換性

v3.0.1とv3.0.2間の互換性に関しては下記の通りです。

  • v3.0.1で作成されたデータは、v3.0.2で読み込み可能です。
  • v3.0.2で作成されたデータは、v3.0.1で読めません。v3.0.1で読み出しを試みると、config リージョンが初期化されます。

バージョン差異による configリージョンの初期化

v3.0.2で作成された config リージョンv3.0.1で読み出しを試みると、以下のように、config領域のデータが上書きされます。

flatfsd: invalid header magic version
flatfsd: Nonexistent or bad flatfs (0), creating new one...
flatfsd: saving fs to partition 0, tstamp=4117
flatfsd: Wrote 3102 bytes to flash in 2 seconds
flatfsd: Created 9 configuration files (1729 bytes)

起動時に flatfsd が config リージョンのバージョン差異を見付けた場合、以下の警告メッセージが起動ログに表示されます。

Checking config region.
WARNING: flatfsd check failed. Will be reinitialized ...

flatfsdによる時刻設定

以下の条件に適合する場合、システム時刻にはflatfsdのビルドタイムが自動的に設定されます。

「Armadillo-420 起動直後のシステム時刻」が 「flatfsdの ビルドタイム」より以前の場合カーネルのRTC機能を利用したり、NTPを利用する場合は、上記条件を満たさないため、システム時刻設定が変更されることはありません。これは、flatfsd 3.0.2の仕様によるものです。

ATDE5のシステム時刻が正確でなかったり、RTCに正確な時刻が設定されていない場合は、上記条件を満たしてしまうことがあります。

v3.0.1の選択方法

なんらかの理由で flatfsd v3.0.2 から v3.0.1に戻す場合は、ユーザーランドコンフィギュレーションを実施します。

menuconfig の 「Userland Configuration」→ 「Filesystem Applications」→ 「flatfsd」 のメニューで Versionを 3.0.1 に設定してください。

    4.4.4. iptables を v1.4.14 にアップデート

    標準でユーザランドに組込まれる iptables を v1.3.6 から v1.4.1 にアップデートしています。

    iptables v1.3.6 では、カーネルの Netfilter の設定に合せ、iptables のモジュールが自動的に選択されていました。しかし v1.4.1 に自動選択の機能はなく、手動で必要なモジュールを設定する必要があります。iptablesのモジュールを変更する場合は注意して下さい。設定は menuconfig の 「Userland Configuration」→ 「Network Applications」→ 「iptables」 で行います。

    v1.4.1では、v1.3.6 で組み込まれていたモジュールに加え、DNAT、MASQUERADE、SNAT、conntrack、v6REJECT、v6 icmp が標準で組み込まれています。

    4.4.5. OpenSSH をv6.0p1 にアップデート

    標準でユーザランドに組込まれる OpenSSH を v4.3p2 から v6.0p1 にアップデートしています。

    4.4.6. cURL v7.26.0 の組み込み

    wgetのライセンスがGPLv3に変更されことにより、wgetのアップデートを停止しています。wgetの代替として、同様の機能を持つcurlを標準で組み込みました。

    4.4.7. BusyBox を v1.20.2 にアップデート

    標準でユーザランドに組込まれる BusyBox を v1.00 から v1.20.2 にアップデートしています。v1.20.2 では length コマンドが削除されていますので、御注意下さい。

    [ティップ]

    lengthコマンドは、 のスクリプトファイルを作成することで代用可能です。

    #!/bin/sh
    echo -n $1 | wc -c

    4.4.8. iproute2 に対応

    iproute2 v3.16.0 が利用出来るようになりました。ただし、Atmark Dist v20151026 時点の Armadillo-420 のユーザーランドにはまだ iproute2 組み込まれていません。必要な場合は menuconfigの 「Userland Configuration」→「Network Applications」→「iproute2」 で必要なコマンドを設定の上、ユーザランドを再ビルドしてください。

    [注記]

    ifconfig を含む net-tools は、すでに開発が終了しています。多くの Linux ディストリビューションが net-tools から iproute2 へ移行しています。 Armadillo も将来的に iproute2 へ移行します。

    4.4.9. 追加されたコンフィグオプション

    Armadillo-420のユーザーランドコンフィギュレーションに以下の機能が追加になりました。

    • ルートパスワードの変更機能
    • AWL13の ランタイムでのアクセスポイント、ステーション設定機能

      ユーザーランドイメージに、アクセスポイントとステーションの両方のドライバ、ファームウェアを格納しておく事ができます。但し、機能を切り換えるためには、Armadilloの再起動が必要です。

    4.5. Debian ユーザーランド

    Linux 2.6.26では、開発環境(ATDE3)に合わせ、Debian 5.0 (lenny)のユーザーランドを提供していました。Linux 3.14では Debian 7 (wheezy)ベースのユーザーランドを提供しています。

    Debianユーザーランドの使用方法については、Armadillo-400シリーズ ソフトウェアマニュアルをご参照ください。