第22章 Howto

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

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

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

Atmark Distには様々なアプリケーションやフォントなどが含まれており、コンフィギュレーションによってそれらをイメージに含めたり、外したりすることができます。また、Linuxカーネルのコンフィギュレーションの変更を行うこともできます。

手順22.1 イメージをカスタマイズ

  1. アーカイブの展開

    各ソースコードアーカイブを展開します。

    [ATDE ~]$ ls
    atmark-dist-[version].tar.gz  linux-3.14-at[version].tar.gz
    awl13-[version].tar.gz
    [ATDE ~]$ tar zxf atmark-dist-[version].tar.gz
    [ATDE ~]$ tar zxf awl13-[version].tar.gz
    [ATDE ~]$ tar zxf linux-3.14-at[version].tar.gz
    [ATDE ~]$ ls
    atmark-dist-[version]         awl13-[version].tar.gz
    atmark-dist-[version].tar.gz  linux-3.14-at[version]
    awl13-[version]               linux-3.14-at[version].tar.gz
  2. シンボリックリンクの作成

    Atmark Distに、AWL13、Linuxカーネルのシンボリックリンクを作成します。

    [ATDE ~]$ cd atmark-dist-[version]
    [ATDE ~/atmark-dist-[version]]$ ln -s ../awl13-[version] awl13
    [ATDE ~/atmark-dist-[version]]$ ln -s ../linux-3.14-at[version] linux-3.x

    以降のコマンド入力例では、各ファイルからバージョンを省略した表記を用います。

  3. コンフィギュレーションの開始

    コンフィギュレーションを開始します。ここでは、menuconfigを利用します。

    [ATDE ~/atmark-dist]$ make menuconfig
     atmark-dist v1.41.0 Configuration
    ------------------------------------------------------------------------
                                    Main Menu
      Arrow keys navigate the menu.  <Enter> selects submenus --->.
      Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes,
      <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help.
      Legend: [*] built-in  [ ] excluded  <M> module  < > module capable
      --------------------------------------------------------------------
                    Vendor/Product Selection  --->
                    Kernel/Library/Defaults Selection  --->
                    ---
                    Load an Alternate Configuration File
                    Save Configuration to an Alternate File
    
    
      --------------------------------------------------------------------
    
                        <Select>    < Exit >    < Help >
  4. ベンダー/プロダクト名の選択

    メニュー項目は、上下キーで移動することができます。下部のSelect/Exit/Helpは左右キーで移動することができます。選択するにはEnterキーを押下します。 "Vendor/Product Selection --->"に移動してEnterキーを押下します。 Vendorには "AtmarkTechno" を選択し、AtmarkTechno Productsには "Armadillo-IoTG-Std" を選択します。

     atmark-dist v1.41.0 Configuration
    ------------------------------------------------------------------------
                            Vendor/Product Selection
      Arrow keys navigate the menu.  <Enter> selects submenus --->.
      Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes,
      <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help.
      Legend: [*] built-in  [ ] excluded  <M> module  < > module capable
      --------------------------------------------------------------------
                    --- Select the Vendor you wish to target
                    (AtmarkTechno) Vendor 1
                    --- Select the Product you wish to target
                    (Armadillo-IoTG-Std) AtmarkTechno Products 2
    
    
      --------------------------------------------------------------------
    
                        <Select>    < Exit >    < Help >

    1

    "AtmarkTechno"を選択します

    2

    "Armadillo-IoTG-Std"を選択します

  5. コンフィギュレーション変更対象の指定

    カーネル、ユーザーランドのそれぞれで、コンフィギュレーションの変更を行うかどうかを指定します。

    カーネルコンフィギュレーションを変更するには、「Customize Kernel Settings」を選択します。ユーザーランドコンフィギュレーションを変更するには「Customize Vendor/User Settings」を選択します。その後、"Exit"を選択して「Do you wish to save your new kernel configuration?」で"Yes"とします。

     atmark-dist v1.41.0 Configuration
    ------------------------------------------------------------------------
                        Kernel/Library/Defaults Selection
      Arrow keys navigate the menu.  <Enter> selects submenus --->.
      Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes,
      <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help.
      Legend: [*] built-in  [ ] excluded  <M> module  < > module capable
      --------------------------------------------------------------------
                 --- Kernel is linux-3.x
                 (default) Cross-dev
                 (None) Libc Version
                 [ ] Default all settings (lose changes)
                 [*] Customize Kernel Settings  1
                 [*] Customize Vendor/User Settings  2
                 [ ] Update Default Vendor Settings
    
      --------------------------------------------------------------------
    
                        <Select>    < Exit >    < Help >

    1

    カーネルコンフィギュレーションを変更する場合に選択します

    2

    ユーザーランドコンフィギュレーションを変更する場合に選択します

  6. カーネルコンフィギュレーションの変更

    「Customize Kernel Settings」を選択した場合は、Linux Kernel Configurationメニューが表示されます。カーネルコンフィギュレーションを変更後、"Exit"を選択して「Do you wish to save your new kernel configuration ? <ESC><ESC> to continue.」で"Yes"とし、カーネルコンフィギュレーションを確定します。

     .config - Linux/arm 3.14-at1 Kernel Configuration
    ------------------------------------------------------------------------
                  Linux/arm 3.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  [ ]
    ------------------------------------------------------------------------
      
         -*- Patch physical to virtual translations at runtime
             General setup  --->
         [*] Enable loadable module support  --->
         [*] Enable the block layer  --->
             System Type  --->
             Bus support  --->
             Kernel Features  --->
             Boot options  --->
             CPU Power Management  --->
             Floating point emulation  --->
    ------------------------------------------------------------------------
           <Select>    < Exit >    < Help >    < Save >    < Load >
    [ティップ]

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

  7. ユーザーランドコンフィギュレーションの変更

    「Customize Vendor/User Settings」を選択した場合は、Userland Configurationメニューが表示されます。アプリケーションのユーザーランドコンフィギュレーションを変更後、"Exit"を選択して「Do you wish to save your new kernel configuration?」で"Yes"とし、ユーザーランドコンフィギュレーションを確定します。

     atmark-dist v1.41.0 Configuration
    ------------------------------------------------------------------------
                            Userland Confgiguration
      Arrow keys navigate the menu.  <Enter> selects submenus --->.
      Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes,
      <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help.
      Legend: [*] built-in  [ ] excluded  <M> module  < > module capable
      --------------------------------------------------------------------
                    Vendor specific  --->
                    Fonts  --->
                    Core Applications  --->
                    Library Configuration  --->
                    Flash Tools  --->
                    Filesystem Applications  --->
                    Network Applications  --->
                    Miscellaneous Applications  --->
                    BusyBox  --->
                    Tinylogin  --->
      --------------------------------------------------------------------
    
                        <Select>    < Exit >    < Help >
  8. ビルド

    コンフィギュレーションの確定後にビルドを行います。ビルドは"make"コマンドを実行します。

    [ATDE ~/atmark-dist]$ make
  9. イメージファイルの生成確認

    ビルドが終了すると、atmark-dist/images/ディレクトリ以下にカスタマイズされたイメージファイルが作成されています。Armadillo-IoT では圧縮済みのイメージ(拡張子が".gz"のもの)を利用します。

    [ATDE ~/atmark-dist]$ ls images/
    linux.bin  linux.bin.gz  romfs.img  romfs.img.gz

22.2. GPIOを制御する

アドオンインターフェースのGPIOを制御する方法を説明します。

[警告]

工場出荷イメージではアドオンインターフェースのGPIO制御を行うことができません。Linux カーネルのコンフィギュレーションの変更し、AIOTG_STD_ADDON_AUTO_DETECTを無効化する必要があります。

Linux カーネルのコンフィギュレーションの変更方法については、「イメージをカスタマイズする」を参照してください。

Armadillo-IoT のGPIOは、generic GPIOとして実装されています。GPIOクラスディレクトリ以下のファイルによってGPIOの制御を行うことができます。

アドオンインターフェース(ベースボード:CON1, ベースボード:CON2)のGPIOと、GPIOクラスディレクトリの対応を次に示します。

表22.1 アドオンインターフェースのGPIOディレクトリ

ピン番号GPIOクラスディレクトリ
CON1 3ピン, CON2 24ピン/sys/class/gpio/CON1_3
CON1 4ピン, CON2 25ピン/sys/class/gpio/CON1_4
CON1 5ピン, CON2 33ピン/sys/class/gpio/CON1_5
CON1 6ピン, CON2 32ピン/sys/class/gpio/CON1_6
CON1 7ピン, CON2 41ピン/sys/class/gpio/CON1_7
CON1 8ピン, CON2 40ピン/sys/class/gpio/CON1_8
CON1 9ピン, CON2 7ピン, CON2 39ピン/sys/class/gpio/CON1_9
CON1 10ピン, CON2 8ピン, CON2 38ピン/sys/class/gpio/CON1_10
CON1 11ピン, CON2 50ピン/sys/class/gpio/CON1_11
CON1 12ピン, CON2 16ピン, CON2 37ピン/sys/class/gpio/CON1_12
CON1 13ピン, CON2 17ピン, CON2 36ピン/sys/class/gpio/CON1_13
CON1 14ピン, CON2 12ピン, CON2 18ピン, CON2 35ピン/sys/class/gpio/CON1_14
CON1 15ピン, CON2 13ピン, CON2 19ピン, CON2 34ピン/sys/class/gpio/CON1_15
CON1 16ピン, CON2 49ピン/sys/class/gpio/CON1_16
CON1 17ピン, CON2 48ピン/sys/class/gpio/CON1_17
CON1 18ピン, CON2 47ピン/sys/class/gpio/CON1_18
CON1 19ピン, CON2 46ピン/sys/class/gpio/CON1_19
CON1 20ピン, CON2 20ピン, CON2 45ピン/sys/class/gpio/CON1_20
CON1 21ピン, CON2 21ピン, CON2 44ピン/sys/class/gpio/CON1_21
CON1 22ピン, CON2 22ピン, CON2 43ピン/sys/class/gpio/CON1_22
CON1 23ピン, CON2 23ピン, CON2 42ピン/sys/class/gpio/CON1_23
CON1 24ピン/sys/class/gpio/CON1_24
CON1 25ピン/sys/class/gpio/CON1_25
CON1 32ピン/sys/class/gpio/CON1_32
CON1 33ピン/sys/class/gpio/CON1_33
CON1 42ピン/sys/class/gpio/CON1_42
CON1 43ピン/sys/class/gpio/CON1_43
CON1 44ピン/sys/class/gpio/CON1_44
CON1 45ピン/sys/class/gpio/CON1_45
CON1 46ピン/sys/class/gpio/CON1_46
CON1 47ピン/sys/class/gpio/CON1_47
CON1 48ピン/sys/class/gpio/CON1_48
CON1 49ピン/sys/class/gpio/CON1_49
CON1 50ピン/sys/class/gpio/CON1_50
CON1 51ピン/sys/class/gpio/CON1_51
CON1 52ピン/sys/class/gpio/CON1_52
CON1 53ピン/sys/class/gpio/CON1_53

以降の説明では、任意のGPIOを示すGPIOクラスディレクトリを"/sys/class/gpio/[GPIO]"のように表記します。

22.2.1. 入出力方向を変更する

GPIOディレクトリ以下のdirectionファイルへ値を書き込むことによって、入出力方向を変更することができます。directionに書き込む有効な値を次に示します。

表22.2 directionの設定

設定説明
high入出力方向をOUTPUTに設定します。出力レベルの取得/設定を行うことができます。出力レベルはHIGHレベルになります。
out入出力方向をOUTPUTに設定します。出力レベルの取得/設定を行うことができます。出力レベルはLOWレベルになります。
lowoutを設定した場合と同じです。
in入出力方向をINPUTに設定します。入力レベルの取得を行うことができますが設定はできません。

[armadillo ~]# echo in > /sys/class/gpio/[GPIO]/direction

図22.1 GPIOの入出力方向を設定する(INPUTに設定)


[armadillo ~]# echo out > /sys/class/gpio/[GPIO]/direction

図22.2 GPIOの入出力方向を設定する(OUTPUTに設定)


22.2.2. 入力レベルを取得する

GPIOディレクトリ以下のvalueファイルから値を読み出すことによって、入力レベルを取得することができます。"0"はLOWレベル、"1"はHIGHレベルを表わします。入力レベルの取得は入出力方向がINPUT, OUTPUTのどちらでも行うことができます。

入出力方向がOUTPUTの時に読み出される値は、GPIOピンの状態です。そのため、valueファイルに書き込んだ値とは異なる場合があります。

[armadillo ~]# cat /sys/class/gpio/[GPIO]/value
0

図22.3 GPIOの入力レベルを取得する


22.2.3. 出力レベルを設定する

GPIOディレクトリ以下のvalueファイルへ値を書き込むことによって、出力レベルを設定することができます。"0"はLOWレベル、"0"以外はHIGHレベルを表わします。出力レベルの設定は入出力方向がOUTPUTでなければ行うことはできません。

[armadillo ~]# echo 1 > /sys/class/gpio/[GPIO]/value

図22.4 GPIOの出力レベルを設定する