第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

I2C3

armadillo4x0_i2c2

armadillo400_i2c3_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 の場合、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. LED

Linux 3.14へのアップデートにより LED クラスの delay_ondelay_off を両方 0 にする場合の挙動が変更になりました。Linux 3.14 では、両方に 0 をセットすると、LEDドライバーでデフォルト値の 500 (ミリ秒)に設定されます。そのため 1 Hz で点滅します。

Linux 2.6.26 では、delay_ondelay_off0 にセットすると、点滅ではなく点灯します。

LED Class の sysfs ディレクトリは /sys/class/leds/{red,green,yellow}/ です。

4.3.6. MTD

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

4.3.7. halt および shutdown

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

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

4.3.8. usbfs

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

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

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

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

4.3.10. GPIO

Linux 3.14 では、CON9_14, 18, 24をGPIOとして使う場合、他のGPIOポートと同様に、ヒステリシスが設定されないようになりました。Linux 2.6.26 ではこれらのGPIOにヒステリシスが設定されています。

4.3.11. Sound

4.3.11.1. 音量の初期設定

Linux 3.14へのアップデートにより、ドライバーによる音量の初期設定がおこなわれなくなりました。そのため、LCD拡張ボードに搭載されているオーディオコーデックの音量の初期設定方法を変更しています。Linux 3.14では、起動スクリプト /etc/rc.d/S81alsa で 音量を初期設定しています。初期設定後の音量は Linux 2.6.26 と同等です。

4.3.11.2. マイク音量のコントロール名

Linux 3.14へのアップデートにより、マイクの音量のコントロール名が Mic から Input PGAに変更になりました。

例:マイクの音量を75%に設定する

[armadillo ~]# amixer -D hw:0 sset 'Input PGA' 75%

4.3.12. Ethernet

Linux 3.14へのアップデートにより、ifdown などで Ethernet のインターフェイスを down した場合に、Ethernet PHYが停止し Link が切れた状態になります。これに伴い Link LED と Activity LEDが消灯するようになりました。Linux 2.6.26 では、Link LED が点灯したままの状態です。

4.3.13. 廃止機能

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 以降のプロダクトディレクトリ (例 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による時刻設定

「Armadillo 起動直後のシステム時刻」が 「flatfsdの ビルドタイム」より以前の場合、システム時刻には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 時点のユーザーランドにはまだ iproute2 組み込まれていません。必要な場合は menuconfigの 「Userland Configuration」→「Network Applications」→「iproute2」 で必要なコマンドを設定の上、ユーザランドを再ビルドしてください。

[注記]

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

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

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

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

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

4.4.10. X サーバー (Xfbdev) を v1.12.4 にアップデート

Armadillo-440のユーザーランドに標準で組込まれる KDrive X サーバー を X.Org v1.4.2 から v1.12.4 にアップデートしています。従来の v1.4.2 は ATDE5 ではビルドすることができません。

また、X.Org v1.12.4 の実行に必要な xkbcomp と xkb-data も追加しています。 xkbcomp と xkb-data のビルド選択は、menuconfigの 「Userland Configuration」→ 「X Window System」→ 「X.Org KDrive」 が選択された状態で、「X.Org version」に1.12.4が設定されている場合に可能です。必要があれば選択してください。

Armadillo-440 で Linux 3.14-at が選択された場合、Xfbdev や xkbcomp、xkb-data はデフォルトでビルドされます。

4.4.11. GTK+ の更新による、イベント処理の挙動の変化

ATDE5 では、GTK+ v2.24.10 が組込まれます。このバージョンの GTK+ を使って ATDE3 で開発したアプリケーションの実装を変えずに、タッチスクリーンに触れた状態を検知し続けるには、環境変数 GDK_NATIVE_WINDOWS に true を設定してください。GTK+ v2.24.10 では GDK_POINTER_MOTION_MASK だけではタッチスクリーンに触れる度に1回しかイベントのコールバック関数が呼ばれません。

Armadillo-440 のデフォルトユーザーランドイメージで起動後に自動的に液晶パネルに表示されるファンクションテストアプリケーション (/usr/bin/functester) は、起動スクリプト (/etc/config/rc.local) で GDK_NATIVE_WINDOWS=true を設定して起動するようになりました。

4.5. Debian ユーザーランド

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

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