Howto

目次

20.1. Device Treeとは
20.2. イメージをカスタマイズする
20.2.1. イメージをカスタマイズ
20.3. Device Treeをカスタマイズする
20.3.1. at-dtwebのインストール
20.3.2. at-dtwebの起動
20.3.3. Device Treeをカスタマイズ
20.3.3.1. 機能の選択
20.3.3.2. 信号名の確認
20.3.3.3. プロパティの設定
20.3.3.4. 機能の削除
20.3.3.5. DTS/DTBの生成
20.4. ルートファイルシステムへの書き込みと電源断からの保護機能
20.4.1. 保護機能の使用方法
20.4.2. 保護機能を使用する上での注意事項
20.5. eMMC の GPP(General Purpose Partition) を利用する
20.5.1. squashfs イメージを作成する
20.5.2. squashfs イメージを書き込む
20.5.3. GPP への書き込みを制限する
20.5.4. 起動時に squashfs イメージをマウントされるようにする
20.6. Armadillo-610 拡張ボードのSD インターフェースを利用する
20.7. Armadillo-610 拡張ボードのLCD インターフェースを利用する
20.8. wxWidgets を利用して GUI アプリケーションを開発する
20.8.1. wxWidgets を直接利用して GUI アプリケーションを開発する
20.8.1.1. wxWidgets のインストール
20.8.1.2. サンプルアプリケーションのダウンロード
20.8.1.3. サンプルアプリケーションのビルドと起動
20.8.1.4. ソースファイル構成
20.8.2. wxPython を利用して GUI アプリケーションを開発する
20.8.2.1. Python と wxPython のインストール
20.8.2.2. サンプルアプリケーションのダウンロード
20.8.2.3. サンプルアプリケーションのビルドと起動
20.8.2.4. ソースファイル構成

本章では、Armadillo-610 のソフトウェアをカスタマイズする方法などについて説明します。

20.1. Device Treeとは

Device Treeとは、ハードウェア情報を記述したデータ構造体です。ハードウェアの差分をDevice Treeに記述することによって、1つのLinuxカーネルイメージを複数のハードウェアで利用することができるようになります。

Device Treeに対応しているメリットの1つは、ハードウェアの変更に対するソフトウェアの変更が容易になることです。例えば、拡張インターフェース(Armadillo-610: CON2)に接続する拡張基板を作成した場合、主にC言語で記述されたLinuxカーネルのソースコードを変更する必要はなく、やりたいことをより直感的に記述できるDTS(Device Tree Source)の変更で対応できます。

ただし、Device Treeは「データ構造体」であるため、ハードウェアの制御方法などの「処理」を記述することができない点に注意してください。Device Treeには、CPUアーキテクチャ、RAMの容量、各種デバイスのベースアドレスや割り込み番号などのハードウェアの構成情報のみが記述されます。

Device Treeのより詳細な情報については、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/devicetree/)、devicetree.orgで公開されている「Device Tree Specification」を参照してください。

Linuxカーネルのソースコードに含まれている初期出荷状態でのDTS、及び関連するファイルを次に示します。

初期出荷状態でのDTS、及び関連するファイル
  • arch/arm/boot/dts/armadillo-610-extboard-eva-lcd.dts
  • arch/arm/boot/dts/armadillo-610-extboard-eva-grove.dts
  • arch/arm/boot/dts/armadillo-610-extboard-eva-common.dtsi
  • arch/arm/boot/dts/armadillo-610.dtsi
  • arch/arm/boot/dts/imx6ull.dtsi
  • arch/arm/boot/dts/imx6ul.dtsi

20.2. イメージをカスタマイズする

コンフィギュレーションを変更してLinuxカーネルイメージをカスタマイズする方法を説明します。

20.2.1. イメージをカスタマイズ

  1. Linuxカーネルアーカイブの展開

    Linuxカーネルのソースコードアーカイブを準備し、Linuxカーネルのソースコードアーカイブを展開します。

    [ATDE ~]$ ls
    initramfs_a600-[version].cpio.gz linux-v4.14-at[version].tar.gz
    [ATDE ~]$ tar xf linux-v4.14-at[version].tar.gz
    [ATDE ~]$ ls
    initramfs_a600-[version].cpio.gz linux-v4.14-at[version]  linux-v4.14-at[version].tar.gz
  2. initramfs アーカイブへのシンボリックリンク作成

    Linux カーネルディレクトリに移動して、initramfs アーカイブへのシンボリックリンクを作成します。

    [ATDE ~]$ cd linux-v4.14-at[version]
    [ATDE ~/linux-v4.14-at[version]]$ ln -s ../initramfs_a600-[version].cpio.gz initramfs_a600.cpio.gz
  3. コンフィギュレーション

    コンフィギュレーションをします。

    [ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm armadillo-640_defconfig
    [ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm menuconfig
  4. カーネルコンフィギュレーションの変更

    カーネルコンフィギュレーションを変更後、"Exit"を選択して「Do you wish to save your new kernel configuration ? <ESC><ESC> to continue.」で"Yes"とし、カーネルコンフィギュレーションを確定します。

     .config - Linux/arm 4.14-at1 Kernel Configuration
     ------------------------------------------------------------------------------
      ----------------- Linux/arm 4.14-at1 Kernel Configuration -----------------
         Arrow keys navigate the menu.  <Enter> selects submenus ---> (or empty
         submenus ----).  Highlighted letters are hotkeys.  Pressing <Y>
         includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to
         exit, <?> for Help, </> for Search.  Legend: [*] built-in  [ ]
        -----------------------------------------------------------------------
                 General setup  --->
             [ ] Enable loadable module support  ----
             [*] Enable the block layer  --->
                 System Type  --->
                 Bus support  --->
                 Kernel Features  --->
                 Boot options  --->
                 CPU Power Management  --->
                 Floating point emulation  --->
                 Userspace binary formats  --->
                 Power management options  --->
             [*] Networking support  --->
                 Device Drivers  --->
                 Firmware Drivers  --->
                 File systems  --->
                 Kernel hacking  --->
                 Security options  --->
             -*- Cryptographic API  --->
                 Library routines  --->
             [ ] Virtualization  ----
    
    
    
        -----------------------------------------------------------------------
      ---------------------------------------------------------------------------
               <Select>    < Exit >    < Help >    < Save >    < Load >
[ティップ]

Linux Kernel Configurationメニューで"/"キーを押下すると、カーネルコンフィギュレーションの検索を行うことができます。カーネルコンフィギュレーションのシンボル名(の一部)を入力して"Ok"を選択すると、部分一致するシンボル名を持つカーネルコンフィギュレーションの情報が一覧されます。

  1. ビルド

    [ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage
    [ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  2. イメージファイルの生成確認

    ビルドが終了すると、arch/arm/boot/ディレクトリと、arch/arm/boot/dts/以下にイメージファイル(LinuxカーネルとDTB)が作成されています。

    [ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/uImage
    arch/arm/boot/uImage
    [ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-610-extboard-eva-lcd.dtb
    arch/arm/boot/dts/armadillo-610-extboard-eva-lcd.dtb
    [ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-610-extboard-eva-grove.dtb
    arch/arm/boot/dts/armadillo-610-extboard-eva-grove.dtb

20.3. Device Treeをカスタマイズする

at-dtwebを利用してDevice Treeをカスタマイズする方法を説明します。at-dtwebでは、Webブラウザ上のマウス操作でDTSおよびDTBを生成することができます。

Armadillo-610 のカスタマイズの対象は拡張インターフェース(Armadillo-610: CON2)です。

20.3.1. at-dtwebのインストール

ATDE7 に at-dtweb パッケージをインストールします。

[ATDE ~]$ sudo apt-get update
[ATDE ~]$ sudo apt-get install at-dtweb

インストール済みの場合は、以下のコマンドを実行し最新版への更新を行ってください。

[ATDE ~]$ sudo apt-get update
[ATDE ~]$ sudo apt-get upgrade

20.3.2. at-dtwebの起動

  1. at-dtwebの起動開始

    at-dtwebの起動を開始するには、デスクトップ左上のアクティビティから「at-dtweb」と入力し、at-dtwebのアイコンをクリックしてください。

    images/common-images/atde7/at-dtweb-activity.png

    図20.1 at-dtwebの起動開始


  2. ボードの選択

    ボードを選択します。Armadillo-610を選択して、「OK」をクリックします。

    images/at-dtweb-board-select.png

    図20.2 ボード選択画面


  3. Linuxカーネルディレクトリの選択

    Linuxカーネルディレクトリを選択します。コンフィギュレーション済みのLinuxカーネルディレクトリを選択して、「OK」をクリックします。

    images/at-dtweb-kernel-select.png

    図20.3 Linuxカーネルディレクトリ選択画面


  4. at-dtwebの起動完了

    at-dtwebが起動し、次のように画面が表示されます。

    images/at-dtweb-main.png

    図20.4 at-dtweb起動画面


[ティップ]

Linuxカーネルは、事前にコンフィギュレーションされている必要があります。コンフィギュレーションの手順については「手順:Linuxカーネルをビルド」を参照してください。

20.3.3. Device Treeをカスタマイズ

20.3.3.1. 機能の選択

機能の選択は、ドラッグ&ドロップで行います。画面左上の「Available features」から有効にしたい機能をドラッグし、画面右側の「Armadillo-610」の白色に変化したピンにドロップします。例としてCON2 83/85ピンをUART1(RXD/TXD)に設定します。

[ティップ]

何も機能が選択されていないピンには GPIO の機能が割り当てられます。

images/at-dtweb-enable-feature1.png

図20.5 UART1(RXD/TXD)のドラッグ


images/at-dtweb-enable-feature2.png

図20.6 CON2 83/85ピンへのドロップ


20.3.3.2. 信号名の確認

画面右側の「Armadillo-610」にドロップして設定したピンを左クリックすると信号名が表示されます。 どのピンがどの信号に対応しているのかを確認することができます。

例として UART1(RXD/TXD) の信号名を確認します。

images/at-dtweb-show-signal-name.png

図20.7 信号名の確認


[ティップ]

再度ピンを左クリックすると機能名の表示に戻ります。

20.3.3.3. プロパティの設定

いくつかの機能にプロパティを設定することができます。画面右側の「Armadillo-610」に選択した機能を左クリックすると、画面左下の「Properties」からプロパティを選択することができます。

例としてCON2 88/89ピンのI2C4(SCL/SDA)のclock-frequencyプロパティを設定します。

images/at-dtweb-set-property.png

図20.8 プロパティの設定


設定したプロパティを確定させるには「Apply」をクリックします。

images/at-dtweb-apply-property.png

図20.9 プロパティの保存


20.3.3.4. 機能の削除

全ての機能を削除する場合は、画面右上の「Reset configuration」をクリックします。機能ごとに削除する場合は、画面右側の「Armadillo-610」のピンを右クリックして「Remove」をクリックします。

images/at-dtweb-reset-configuration.png

図20.10 全ての機能の削除


images/at-dtweb-remove-configuration.png

図20.11 UART1(RXD/TXD)の削除


20.3.3.5. DTS/DTBの生成

DTSおよびDTBを生成するには、画面右上の「Save」をクリックします。

images/at-dtweb-save-configuration.png

図20.12 DTS/DTBの生成


「Device tree built!」と表示されると、DTSおよびDTBの生成は完了です。

images/at-dtweb-save-complete.png

図20.13 DTS/DTBの生成完了


ビルドが終了すると、arch/arm/boot/dts/以下にDTS/DTBが作成されています。

[ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-610-expansion-interface.dtsi
arch/arm/boot/dts/armadillo-610-expansion-interface.dtsi
[ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-610-at-dtweb.dtb
arch/arm/boot/dts/armadillo-610-at-dtweb.dtb

20.4. ルートファイルシステムへの書き込みと電源断からの保護機能

Armadillo-610のルートファイルシステムは、標準でeMMCに配置されます。 Linuxが稼働している間は、ログや、設定ファイル、各種アプリケーションによるファイルへの書き込みが発生します。もし、停電等で終了処理を実行できずに電源を遮断した場合は、RAM上に残ったキャッシュがeMMCに書き込まれずに、ファイルシステムの破綻やファイルの内容が古いままになる状況が発生します。

また、eMMC内部のNAND Flash Memoryには消去回数に上限があるため、書き込み回数を制限することを検討する必要がある場合もあります。

そこで、Armadillo-610 では、overlayfsを利用して、eMMCへの書き込み保護を行う機能を提供しています。

20.4.1. 保護機能の使用方法

eMMCへの書き込み保護を行うには、kernelの起動オプションに"overlay=50%"("=50%"は省略可、"overlay"のみ書くとRAMを256MByte使用)というパラメータを追加するだけです。

パラメータを追加すると、debianの起動前にinitramfsよってルートファイルシステムがupper=RAMディスク(tmpfs)、lower=eMMC(ext4)としたoverlayfsに切り替えられて、Debianが起動します。

overlayfsの機能によって、起動後のルートファイルシステムに対する差分は、全てRAMディスク(/overlay/ramdiskにマウント)に記録されるようになります。そのため、起動後の情報は保存されませんが、電源を遮断した場合でも、eMMCは起動前と変わらない状態のまま維持されています。

kernelの起動オプションの指定を行うにはArmadillo-610を保守モードで起動し、次のようにコマンドを実行してください。

=> setenv optargs overlay
=> saveenv

また、オプションの指定を解除するには次のようにコマンドを実行してください。

=> setenv optargs
=> saveenv

20.4.2. 保護機能を使用する上での注意事項

[警告]

overlayfs は差分を ファイル単位で管理するため、予想以上にRAMディスクを消費する場合があります。 単に、新しいファイルやディレクトリを作れば、その分RAMディスクが消費されるのは想像に難くないと思います。

しかし、「lower=eMMC に既に存在していたファイルの書き換え」をする場合は、upper=RAMディスク に対象のファイル全体をコピーして書き換え」ます。

具体的に、問題になりそうな例を紹介します。 例えば、sqlite はDB毎に1つのファイルでデータ格納します。ここで、1GBのDBを作ってeMMCに保存した後、 overlayfsによる保護を有効にして起動した後に、たった10バイトのレコードを 追加しただけでRAMディスクは 1GB + 10バイト 消費されます。実際には、 Armadilloに1GBもRAMは無いので、追記を開始した時点でRAMディスクが不足します。

[警告]

overlayfsによる、eMMCへの書き込み保護を行う場合、 必ず実際の運用状態でのテストを行い、RAMディスクが不足しないか確認してください。 動作中に書き込むファイルを必要最小限に留めると共に、追記を行う大きなファイルを作らない実装の検討を行ってください。

[警告]

Armadillo-610のeMMCの記録方式は出荷時にSLCに設定しており、MLC方式のeMMCよりも消去回数の上限が高くなっています。そのため、開発するシステムの構成によってはeMMCへの書き込み保護機能を必要としない可能性があります。

[警告]

eMMCへの書き込み保護機能を有効にすると、eMMCを安全に使用できるというメリットがありますが、その分、使用できるRAMサイズが減る、システム構成が複雑になる、デメリットもあります。 開発・運用したいシステムの構成、eMMCへの書き込み保護機能のメリット・デメリットを十分に考慮・評価したうえで、保護機能を使用する、しないの判断を行ってください。

20.5. eMMC の GPP(General Purpose Partition) を利用する

GPP に squashfs イメージを書き込み、Armadillo の起動時に自動的にマウントする方法を紹介します。

20.5.1. squashfs イメージを作成する

この作業は ATDE7 上で行います。

squashfs-tools パッケージに含まれている mksquashfs コマンドを使用して squashfs イメージを作成します。

[ATDE]$ mkdir sample
[ATDE]$ echo "complete mounting squashfs on eMMC(GPP)" > sample/README
[ATDE]$ mksquashfs sample squashfs.img

図20.14 squashfs イメージの作成


20.5.2. squashfs イメージを書き込む

以降の作業は Armadillo 上で行います。

「squashfs イメージを作成する」で作成した squashfs イメージを、USB メモリ利用するなどして Armadillo-610 にコピーし、GPP に書き込みます。

[警告]

ユーザー領域として使用可能なGPPは /dev/mmcblk0gp2 および /dev/mmcblk0gp3 です。

GPPへの書き込みを行う際は、誤って /dev/mmcblk0gp0 や /dev/mmcblk0gp1 に書き込みを行わないよう、十分に注意してください。

[armadillo]# mount /dev/sda1 /mnt
[armadillo]# dd if=/mnt/squashfs.img of=/dev/mmcblk0gp2 conv=fsync
[armadillo]# umount /mnt

20.5.3. GPP への書き込みを制限する

GPP の全ブロックに対して Temporary Write Protection をかけることにより、GPP への書き込みを制限することができます。 Temporary Write Protection は電源を切断しても解除されません。

Temporary Write Protection をかけるには、mmc-utils パッケージに含まれている mmc コマンドを使用します。

[armadillo]# apt-get install mmc-utils

図20.15 mmc-utilsのインストール


GPP の全ブロックに対して Temporary Write Protection をかけるには、次のようにコマンドを実行します。

[armadillo]# mmc writeprotect user get /dev/mmcblk0gp2  1
Write Protect Group size in blocks/bytes: 16384/8388608
Write Protect Groups 0-0 (Blocks 0-16383), No Write Protection
[armadillo]# mmc writeprotect user set temp 0 16384 /dev/mmcblk0gp2  2

図20.16 eMMC の GPP に Temporary Write Protection をかける


1

/dev/mmcblk0gp2 のブロック数を確認します。コマンドの出力を見ると /dev/mmcblk0gp2 が 16384 ブロックあることがわかります。

2

/dev/mmcblk0gp2 の全ブロックに Temporary Write Protection をかけます。

[ティップ]

Temporary Write Protection を解除するには、次のコマンド実行します。

[armadillo]# mmc writeprotect user set none 0 16384 /dev/mmcblk0gp2

20.5.4. 起動時に squashfs イメージをマウントされるようにする

/etc/fstab を変更し、起動時に squashfs イメージがマウントされるようにします。

[armadillo]# mkdir -p /opt/sample  1
[armadillo]# vi /etc/fstab
:
:(省略)
:
/dev/mmcblk0gp2 /opt/sample squashfs defaults,nofail 0 0  2

1

squashfs イメージをマウントするディレクトリを作成します

2

最終行にこの行を追加します。これで、/dev/mmcblk0gp2/opt/sample にマウントされるようになります。

Armadillo の再起動後、 /opt/sample/README の内容が正しければ完了です。

[armadillo]# reboot
:
: (省略)
:
Debian GNU/Linux 9 armadillo ttymxc0

armadillo login:
[armadillo]# ls /opt/sample
README
[armadillo]# cat /opt/sample/README
complete mounting squashfs on eMMC(GPP)

20.6. Armadillo-610 拡張ボードのSD インターフェースを利用する

Armadillo-610 拡張ボードのSD インターフェース(Armadillo-610 拡張ボード: CON1)を利用する方法を紹介します。

Armadillo-610 開発セットの標準状態では、SD インターフェース(Armadillo-610: CON1)が有効になっています。そのため、SD インターフェース(Armadillo-610 拡張ボード: CON1)を利用するためにはDevice Tree をカスタマイズする必要があります。Device Treeをカスタマイズする方法については、まず「Device Treeをカスタマイズする」 を参照してください。

  1. コンソールの選択

    コンソールとして、UART1(RXD/TXD)をシリアルインターフェース(Armadillo-610 拡張ボード: CON3)に該当する83,85ピンに割り当てます。

    images/at-dtweb-enable-sd1.png

    図20.17 コンソールの選択


  2. uSDHC2の選択

    USDHC2をSD インターフェース(Armadillo-610 拡張ボード: CON1)に該当する70〜74,76,91,92ピンに割り当てます。

    images/at-dtweb-enable-sd2.png

    図20.18 uSDHC2の選択


  3. レギュレータの選択

    レギュレータをArmadillo-610 拡張ボードに搭載されたパワースイッチに該当する86ピンに割り当てます。

    images/at-dtweb-enable-sd3.png

    図20.19 レギュレータの選択


  4. レギュレータの割り当て

    uSDHC2のレギュレータを割り当てます。「vmcc-supply」にreg_86と入力した後、「Apply」をクリックします。

    images/at-dtweb-enable-sd4.png

    図20.20 レギュレータの割り当て


生成したDTB(arch/arm/boot/dts/armadillo-610-at-dtweb.dtb)をArmadillo-610に書き込むと、Armadillo-610 拡張ボードのSD インターフェースが利用可能になります。

20.7. Armadillo-610 拡張ボードのLCD インターフェースを利用する

Armadillo-610 拡張ボードのLCD インターフェース(Armadillo-610 拡張ボード: CON11)を利用する方法を紹介します。ここでは例として「LCDオプションセット(7インチタッチパネルWVGA液晶)」を利用します。

「DTBの書き換え」を参照して、DTBを armadillo-610-extboard-eva-lcd-v4.14-at[version].dtb に書き換えてください。

[ティップ]

Device Tree Blob(LCD 用)は、 「アットマークテクノ Armadilloサイト」からダウンロード可能です。

再起動後、LCDが利用可能になります。

[ティップ]

「Armadillo-400シリーズLCDオプションセット」を利用する場合は、「Device Treeをカスタマイズする」を参照して DTB を作成してください。

20.8. wxWidgets を利用して GUI アプリケーションを開発する

wxWidgets は C++で開発されているクロスプラットフォームの GUIツールキットです。Python、Perl、Ruby などの スクリプト言語のラッパーも用意されており、これらを使って開発することも可能です。

ここでは wxWidgets で開発したサンプルアプリケーションと、Python ラッパーである wxPython で開発したサンプルアプリケーションを紹介します。

事前に「Armadillo-610 拡張ボードのLCD インターフェースを利用する」を参照して LCD を利用可能にする必要があります。

[警告]

GUIアプリケーションの動作を確認するためには、LCDオプションセット(7インチタッチパネルWVGA液晶)が必要です。

20.8.1. wxWidgets を直接利用して GUI アプリケーションを開発する

ラッパーを利用せず、wxWidgets を直接利用して開発したサンプルアプリケーションを紹介します。

20.8.1.1. wxWidgets のインストール

開発に必要なパッケージをインストールします。

[armadillo ~]# apt-get update
[armadillo ~]# apt-get install build-essential xorg libwxgtk3.0-dev

20.8.1.2. サンプルアプリケーションのダウンロード

次に示すコマンドでサンプルアプリケーションをダウンロードします。

[armadillo ~]# wget https://download.atmark-techno.com/sample/a600-wxwidgets-howto/wxwidgets_led-v1.1.tar.gz
[armadillo ~]# tar zxf wxwidgets_led.tar.gz

20.8.1.3. サンプルアプリケーションのビルドと起動

ダウンロードしたサンプルアプリケーションのディレクトリへ移動しビルドを実行します。

[armadillo ~]# cd wxwidgets_led
[armadillo ~/wxwidgets_led]# make
[armadillo ~/wxwidgets_led]# ls
Makefile  led.h               led_controller.h  main_frame.h
led       led.o               led_controller.o  main_frame.o
led.cpp   led_controller.cpp  main_frame.cpp    resources

次に示すコマンドでサンプルアプリケーションを起動します。LCDオプションセット(7インチタッチパネルWVGA液晶)が接続済みであるとします。

[armadillo ~/wxwidgets_led]# export DISPLAY=:0
[armadillo ~/wxwidgets_led]# X -retro -r &
[armadillo ~/wxwidgets_led]# ./led

サンプルアプリケーション上の YELLOW ボタンを押すと、Armadillo-610 上の LED5 が点灯・消灯します。

images/wxwidgets_led_a610.png

図20.21 wxWidgets サンプルアプリケーション


20.8.1.4. ソースファイル構成

[armadillo ~/wxwidgets_led]# ls
Makefile  led.h               led_controller.h  main_frame.h
led.cpp 1   led_controller.cpp 2  main_frame.cpp 3   resources

1

アプリケーション本体です。

2

Armadillo-610 上の LED を操作するための処理を実装しているソースです。

3

UIに関する処理を実装しているソースです。

[ティップ]

wxWidgets には公式に多くのサンプルアプリケーションがあり、それらを参考にしながら開発することもできます。 サンプルアプリケーションを取得するには、次のコマンドを実行します。

[armadillo ~]# apt-get install wx3.0-examples
[armadillo ~]# cd /usr/share/doc/wx3.0-examples/examples
[armadillo /usr/share/doc/wx3.0-examples/examples]# ./unpack_examples.sh samples/ ~/wx3.0-examples
[armadillo /usr/share/doc/wx3.0-examples/examples]# cd ~/wx3.0-examples/samples
[armadillo ~/wx3.0-examples/samples]#

上記のディレクトリに多種多様なサンプルアプリケーションが入っており、 ビルド後に起動して動作を確認することができます。

20.8.2. wxPython を利用して GUI アプリケーションを開発する

先に説明したとおり wxWidgets には Python 向けラッパーがあり、それが wxPython です。スクリプト言語という特性を活かして、 wxWidgets を直接利用するよりも素早く GUIアプリケーションの開発ができます。 さらに、 C言語と組み合わせることにより、ハードウェアの制御も可能となります。

ここでは wxPython で開発したサンプルアプリケーションを紹介します。(アプリケーションの内容は「サンプルアプリケーションのビルドと起動」で説明したものと同じです。)

20.8.2.1. Python と wxPython のインストール

開発に必要なパッケージをインストールします。

[armadillo ~]# apt-get update
[armadillo ~]# apt-get install build-essential xorg python-dev python-wxgtk3.0-dev

20.8.2.2. サンプルアプリケーションのダウンロード

次に示すコマンドでサンプルアプリケーションをダウンロードします。

[armadillo ~]# wget https://download.atmark-techno.com/sample/a600-wxwidgets-howto/wxpython_led-v1.1.tar.gz
[armadillo ~]# tar zxf wxpython_led.tar.gz

20.8.2.3. サンプルアプリケーションのビルドと起動

ダウンロードしたサンプルアプリケーションのディレクトリへ移動し、必要なモジュールをビルドします。ここでビルドするモジュールとは C言語で記述された Python から ハードウェアを制御するためのプログラムです。

[armadillo ~]# cd wxpython_led
[armadillo ~/wxpython_led]# make
[armadillo ~/wxpython_led]# ls
Makefile  led.o   led_wrapper.c  ledmodule.so
led.c     led.py  led_wrapper.o  resources

次に示すコマンドでサンプルアプリケーションを起動します。LCDオプションセット(7インチタッチパネルWVGA液晶)が接続済みであるとします。

[armadillo ~/wxpython_led]# export DISPLAY=:0
[armadillo ~/wxpython_led]# X -retro -r &
[armadillo ~/wxpython_led]# python led.py

サンプルアプリケーション上の YELLOW ボタンを押すと、Armadillo-610 上の LED5 が点灯・消灯します。

images/wxwidgets_led_a610.png

図20.22 wxPython サンプルアプリケーション


20.8.2.4. ソースファイル構成

ハードウェア(LED5)を制御する部分を C言語で実装しているため、C言語のソースファイルも含んでいます。

[armadillo ~/wxpython_led]# ls
Makefile led.c 1  led.py 2  led_wrapper.c 3 resources

1

Armadillo-610 上の LED を操作するための処理を実装している C言語プログラムです

2

Python で記述されたアプリケーション本体です

3

led.c で実装している処理を Python 側から呼び出すためのブリッジとなる処理を実装している C言語プログラムです

[ティップ]

wxPython パッケージには多くのサンプルアプリケーションが含まれており、それらを参考にしながら開発することもできます。 サンプルアプリケーションを取得するには、次のコマンドを実行します。

[armadillo ~]# apt-get source python-wxgtk3.0
[armadillo ~]# cd wxpython3.0-3.0.2.0+dfsg/wxPython/
[armadillo ~/wxpython3.0-3.0.2.0+dfsg/wxPython]#

上記のディレクトリ内にある demosamples ディレクトリに多種多様なサンプルアプリケーションが入っており、 起動して動作を確認することができます。