第22章 Howto

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

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

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

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

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

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

    [PC ~]$ ls
    initramfs_x1-[version].cpio.gz linux-6.1-x1-at[version].tar.gz
    [PC ~]$ tar xf linux-6.1-x1-at[version].tar.gz
    [PC ~]$ ls
    initramfs_x1-[version].cpio.gz linux-6.1-x1-at[version]  linux-6.1-x1-at[version].tar.gz
  2. initramfsアーカイブへのシンボリックリンク作成

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

    [PC ~]$ cd linux-6.1-x1-at[version]
    [PC ~/linux-6.1-x1-at[version]]$ ln -s ../initramfs_x1-[version].cpio.gz initramfs_x1.cpio.gz
  3. コンフィギュレーション

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

    [PC ~/linux-6.1-x1-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- x1_defconfig
    [PC ~/linux-6.1-x1-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. カーネルコンフィギュレーションの変更

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

     .config - Linux/arm 6.1-x1-at1 Kernel Configuration
    ------------------------------------------------------------------------
                  Linux/arm 6.1-x1-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"を選択すると、部分一致するシンボル名を持つカーネルコンフィギュレーションの情報が一覧されます。

  5. ビルド

    ビルドするには、次のようにコマンドを実行します。

    [PC ~/linux-6.1-x1-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
    [PC ~/linux-6.1-x1-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage
  6. イメージファイルの生成確認

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

    [PC ~/linux-6.1-x1-at[version]]$ ls arch/arm/boot/uImage
    uImage
    [PC ~/linux-6.1-x1-at[version]]$ ls arch/arm/boot/dts/armadillo_iotg_g3_m1.dtb
    armadillo_iotg_g3_m1.dtb
    [PC ~/linux-6.1-x1-at[version]]$ ls arch/arm/boot/dts/armadillo_iotg_g3.dtb
    armadillo_iotg_g3.dtb

22.2. dumprootfs を用いた Debian GNU/Linux ルートファイルシステムアーカイブの構築

dumprootfsを使うと、量産やバックアップのために、すでに動作しているArmadilloに加えた変更を別のArmadilloで再現するためのアーカイブをつくることができます。

実行するとDebian/Linuxルートファイルシステムから自動的にデータを抽出するため、不要なファイルが含まれる可能性があります。 コピー対象から外したいファイルは、以下の説明にあります「ルートファイルシステムアーカイブにコピーしないファイルの指定」を参照し設定を行ってください。

dumprootfs コマンドを実行するには、 USBメモリ(またはSDカード)が必要となります。 コマンド実行時、 USBメモリ(またはSDカード)のデータはすべて削除されますので、予めデータを退避させてください。

手順22.2 dumprootfs を用いた Debian GNU/Linux ルートファイルシステムアーカイブの構築

  1. dumprootfs パッケージのインストール

    apt コマンドで dumprootfs パッケージを Armadillo にインストールします。

    [armadillo ~]# apt update
    [armadillo ~]# apt install dumprootfs
  2. 設定ファイル dumprootfs.conf の編集

    /etc/dumprootfs/dumprootfs.conf を必要に応じて編集し、dumprootfsの設定を行います。

    # Destination of dump rootfs
    dstdev=/dev/sda1
    
    # Blink a led while dumping
    #led=/sys/class/leds/green
    #  or
    #led=/sys/class/leds/led1
    
    # Debug information
    #debug
    
    # Format dstdev
    # "yes": exec fdisk and mkfs.vfat before mount dstdev.(default)
    # otherwise: just mount dstdev.
    force_format=yes
  3. ルートファイルシステムアーカイブにコピーしないファイルの指定

    /etc/dumprootfs/excludes.list に ルートファイルシステムアーカイブにコピーしないファイルの指定をすることができます。

    /excludes.list
    /boot/*
    /root/.bashhistory
    /home/*/.bashhistory
    /var/log/*
  4. dumprootfs の実行

    各種設定ファイル記載後、dumprootfs コマンドを実行します。 dumprootfs の実行は rootユーザーで実行してください。

    dumprootfs コマンドは、 設定ファイルを / にコピーした後、reboot コマンドを実行して Armadillo を再起動させます。

    [armadillo ~]# dumprootfs
    now reboot to dump the rootfs. after reboot, dump logs can be seen at
    "/run/initramfs/dump_rootfs.log".
    :
    : (省略)
    :
    [ 1617.782324] reboot: System halted
    :
    : (省略)

    再起動の途中でルートファイルシステムの作成が始まります。 ルートファイルシステムの規模にもよりますが、20分から30分程度かかります。 ルートファイルシステムの作成が終わると Armadillo にログインできるようになります。

    :
    : (省略)
    :
    Starting kernel ...
    :
    : (省略)
    :
    real    24m 37.04s
    user    23m 43.62s
    sys     0m 24.92s
    
    dump_rootfs has succeeded.
    :
    : (省略)
    :

    "dump_rootfs has succeeded." が表示されると、 USBメモリ(またはSDカード)の第1パーティションのトップディレクトリに dump_rootfs.tar.gzdump_rootfs.tar.gz.md5が作成されています。

    dump_rootfs.tar.gzは、11章イメージファイルの書き換え方法のルートファイルシステムとして使用することができます。

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

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

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

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

22.3.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-IoT G3を保守モードで起動し、次のようにコマンドを実行してください。

=> setenv optargs overlay
=> saveenv

22.3.2. 保護機能の無効化方法

eMMC への書き込み保護を無効化するには、「保護機能の使用方法」 にて設定したkernelの起動オプションの"overlay"パラメータを削除します。

kernelの起動オプションは次にように確認することができます。パラメータが設定されている場合は"optargs=overlay"と表示されます。

=> env print optargs
optargs=overlay

パラメータの削除を行うには、次にようにコマンドを実行してください。

=> env delete optargs
=> saveenv

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

[警告]

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

[警告]

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

[警告]

ec25-utils に実装されている、 Armadillo 起動時前回と SIM カードが挿し替わってっていた場合に LTE モジュールの初期化を実施する機能 (ec25-reset-config.service) は、 eMMC への書き込み保護機能を有効にしていると動作しないようになっております。

eMMC への書き込み保護機能を有効にしている状態で、SIM カードを挿し替えて 3G/LTE が接続出来なくなった場合は、図6.24「3G/LTE モジュールの初期化手順」記載のコマンドを手動で実行してください。

22.4. GPIOを制御する

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

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

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

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

ピン番号GPIOクラスディレクトリ
CON1_3ピン, CON2_41ピン/sys/class/gpio/gpio64
CON1_4ピン, CON2_40ピン/sys/class/gpio/gpio65
CON1_5ピン, CON2_39ピン/sys/class/gpio/gpio66
CON1_6ピン, CON2_38ピン/sys/class/gpio/gpio67
CON1_7ピン, CON2_32ピン/sys/class/gpio/gpio98
CON1_8ピン, CON2_34ピン/sys/class/gpio/gpio99
CON1_9ピン, CON2_36ピン/sys/class/gpio/gpio100
CON1_10ピン, CON2_37ピン/sys/class/gpio/gpio101
CON1_11ピン, CON2_35ピン/sys/class/gpio/gpio102
CON1_12ピン, CON2_50ピン/sys/class/gpio/gpio103
CON1_13ピン, CON2_24ピン/sys/class/gpio/gpio106
CON1_14ピン, CON2_25ピン/sys/class/gpio/gpio107
CON1_15ピン, CON2_33ピン/sys/class/gpio/gpio139
CON1_16ピン, CON2_46ピン/sys/class/gpio/gpio179
CON1_17ピン, CON2_47ピン/sys/class/gpio/gpio180
CON1_18ピン, CON2_49ピン/sys/class/gpio/gpio182
CON1_19ピン, CON2_48ピン/sys/class/gpio/gpio181
CON1_22ピン, CON2_42ピン/sys/class/gpio/gpio108
CON1_23ピン, CON2_43ピン/sys/class/gpio/gpio109
CON1_24ピン/sys/class/gpio/gpio89
CON1_25ピン/sys/class/gpio/gpio90
CON1_32ピン/sys/class/gpio/gpio204
CON1_33ピン/sys/class/gpio/gpio205
CON1_34ピン/sys/class/gpio/gpio199
CON1_35ピン/sys/class/gpio/gpio194
CON1_36ピン/sys/class/gpio/gpio200
CON1_37ピン/sys/class/gpio/gpio195
CON1_38ピン/sys/class/gpio/gpio192
CON1_39ピン/sys/class/gpio/gpio193
CON1_40ピン/sys/class/gpio/gpio97
CON1_41ピン/sys/class/gpio/gpio96
CON1_42ピン/sys/class/gpio/gpio196
CON1_43ピン/sys/class/gpio/gpio197
CON1_44ピン/sys/class/gpio/gpio198
CON1_45ピン/sys/class/gpio/gpio202
CON1_46ピン/sys/class/gpio/gpio203
CON1_47ピン/sys/class/gpio/gpio140
CON1_48ピン/sys/class/gpio/gpio141
CON1_49ピン/sys/class/gpio/gpio142
CON1_50ピン/sys/class/gpio/gpio201
CON1_51ピン/sys/class/gpio/gpio143
CON1_52ピン/sys/class/gpio/gpio144
CON1_53ピン/sys/class/gpio/gpio145

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

22.4.1. GPIOクラスディレクトリを作成する

/sys/class/gpio/exportにGPIO番号を書き込むことによって、GPIOクラスディレクトリを作成することができます。

アドオンインターフェース(CON1) 3ピンに対応するGPIOクラスディレクトリを作成する例を次に示します。

[armadillo ~]# echo 64 > /sys/class/gpio/export
[armadillo ~]# ls /sys/class/gpio/gpio64/
active_low  device@  direction  edge  power/  subsystem@  uevent  value

図22.1 GPIOクラスディレクトリを作成する


[ティップ]

作成済みのGPIOクラスディレクトリを削除するには、/sys/class/gpio/unexportにGPIO番号を書き込みます。

[armadillo ~]# echo 64 > /sys/class/gpio/unexport
[armadillo ~]# ls /sys/class/gpio/gpio64/
ls: /sys/class/gpio/gpio64/: No such file or directory
[警告]

工場出荷イメージでは、Linux カーネルのコンフィギュレーションにてAIOTG_ADDON_AUTO_DETECTが有効化されています。

AIOTG_ADDON_AUTO_DETECTが有効化されていると、アドオンモジュールの自動認識機能が動作し、必要に応じてピンマルチプレクス設定などを行います。自動認識機能にて既に設定が行われているピンはGPIOクラスディレクトリの作成を行うことができません。

既に設定が行われているピンのGPIOクラスディレクトリを作成したい場合は、Linux カーネルのコンフィギュレーションにてAIOTG_ADDON_AUTO_DETECTを無効化してください。

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

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

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

表22.2 directionの設定

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

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

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


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

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


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

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

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

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

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


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

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

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

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


22.5. AR9462モジュールを使って2.4GHz帯で通信する使用例

2つの機器をサンプルにAR9462モジュールを使って2.4GHz帯で通信するときの使い方について説明します。

22.5.1. 「BVMCN1101AA」の信号を受信する

Braveridge社製のビーコン「BVMCN1101AA」を例にビーコン信号を受信する方法を説明します。

「BVMCN1101AA」のアドバタイジング・パケットを受信するためには、bluetoothctlコマンドを使います。 [bluetooth]のプロンプトが表示されたら、scan onで信号を受信できます。 ご利用の環境によっては、ほかの機器からの信号も受信されます。

[armadillo ~]# bluetoothctl
[NEW] Controller [AA:AA:AA:AA:AA:AA] armadillo-iotg [default]
[bluetooth]# scan on
Discovery started
[CHG] Controller [AA:AA:AA:AA:AA:AA] Discovering: yes
[NEW] Device [BB:BB:BB:BB:BB:BB] BBAAEdit
[CHG] Device [BB:BB:BB:BB:BB:BB] RSSI: -67
[CHG] Device [BB:BB:BB:BB:BB:BB] RSSI: -72

スキャンを中止するには、scan offを実行します。

[bluetooth]# scan off
Discovery stopped
[CHG] Controller [AA:AA:AA:AA:AA:AA] Discovering: no

bluetoothctlを終了するには、exitを実行します。

[bluetooth]# exit

22.5.2. 「CC2650」を操作する

外部のセンサーからデータを取得する例として、TEXAS INSTRUMENTS社製のセンサータグ「CC2650」を例にセンサータグをgatttoolで操作する方法を説明します。

手順22.3 「CC2650」の操作手順

  1. hcitool lescanを実行して、「CC2650」のMACアドレスを確認します。 ご利用の環境によっては、他の機器も検出されます。

    [armadillo ~]# hcitool lescan
    LE Scan ...
    [CC:CC:CC:CC:CC:CC] (unknown)
    [CC:CC:CC:CC:CC:CC] CC2650 SensorTag # <- このMACアドレスを確認します。
  2. 「CC2650」に接続します。切断するには、Ctrl+c を入力してください。

    [armadillo ~]# gatttool -b [CC:CC:CC:CC:CC:CC] -I
    [[CC:CC:CC:CC:CC:CC]][LE]> connect
    Attempting to connect to [CC:CC:CC:CC:CC:CC]
    Connection successful
  3. プライマリサービスを確認するには、primaryを実行します。

    [[CC:CC:CC:CC:CC:CC]][LE]> primary
    attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb
    attr handle: 0x0008, end grp handle: 0x000b uuid: 00001801-0000-1000-8000-00805f9b34fb
    attr handle: 0x000c, end grp handle: 0x001e uuid: 0000180a-0000-1000-8000-00805f9b34fb
    attr handle: 0x001f, end grp handle: 0x0026 uuid: f000aa00-0451-4000-b000-000000000000
    attr handle: 0x0027, end grp handle: 0x002e uuid: f000aa20-0451-4000-b000-000000000000
    attr handle: 0x002f, end grp handle: 0x0036 uuid: f000aa40-0451-4000-b000-000000000000
    attr handle: 0x0037, end grp handle: 0x003e uuid: f000aa80-0451-4000-b000-000000000000
    attr handle: 0x003f, end grp handle: 0x0046 uuid: f000aa70-0451-4000-b000-000000000000
    attr handle: 0x0047, end grp handle: 0x004b uuid: 0000ffe0-0000-1000-8000-00805f9b34fb
    attr handle: 0x004c, end grp handle: 0x0050 uuid: f000aa64-0451-4000-b000-000000000000  # <- ここを詳しく調べます
    attr handle: 0x0051, end grp handle: 0x0058 uuid: f000ac00-0451-4000-b000-000000000000
    attr handle: 0x0059, end grp handle: 0x0060 uuid: f000ccc0-0451-4000-b000-000000000000
    attr handle: 0x0061, end grp handle: 0xffff uuid: f000ffc0-0451-4000-b000-000000000000
  4. 0x004c~0x0050でハンドルされているプロファイルのUUIDを確認するには、char-descを実行します。

    [[CC:CC:CC:CC:CC:CC]][LE]> char-desc 4c 50
    handle: 0x004c, uuid: 00002800-0000-1000-8000-00805f9b34fb
    handle: 0x004d, uuid: 00002803-0000-1000-8000-00805f9b34fb
    handle: 0x004e, uuid: f000aa65-0451-4000-b000-000000000000
    handle: 0x004f, uuid: 00002803-0000-1000-8000-00805f9b34fb
    handle: 0x0050, uuid: f000aa66-0451-4000-b000-000000000000
  5. プロファイルの情報を読み取るには、char-read-hndを実行します。

    [[CC:CC:CC:CC:CC:CC]][LE]> char-read-hnd 50
    Characteristic value/descriptor: 00
  6. プロファイルの情報を設定するには、char-write-cmdを実行します。

    [[CC:CC:CC:CC:CC:CC]][LE]> char-write-cmd 50 01 # <- 「CC2650」のブザーが鳴り、LEDが光ります
    [[CC:CC:CC:CC:CC:CC]][LE]> char-write-cmd 50 01 # <- 「CC2650」のブザーが止まり、LEDが消えます
  7. 操作を終了するには、exitを実行します。

    [[CC:CC:CC:CC:CC:CC]][LE]> exit

22.6. sshでArmadillo-IoT G3に接続する

  1. ssh-serverをインストールする

    [armadillo ~]# apt-get update
    [armadillo ~]# apt-get install -y ssh
  2. sshでrootのログインを禁止する

    /etc/ssh/sshd_config内のPermitRootLogin をnoに設定します。

    [armadillo ~]# vi /etc/ssh/sshd_config
    ...
    # Authentication:
    LoginGraceTime 120
    PermitRootLogin without-password  # -> no に変更
    StrictModes yes
    ...

22.7. クローズドネットワークを使用する場合の再接続サービス設定変更

Armadillo-IoT G3の初期出荷設定では、再接続サービスが定期的に8.8.8.8へpingを実行し、疎通確認が取れない場合に3G/LTEの切断・再接続を試みます。 クローズドネットワークの場合、8.8.8.8と通信できないため3G/LTEの切断・再接続を試み続けてしまいます。

そのため、クローズドネットワークでは再接続サービスを停止するか、pingの送付先を疎通可能なアドレスに切り替える必要があります。

22.7.1. 再接続サービスの停止

再接続サービスの停止は、図22.6「再接続サービスの停止」に示すコマンドで可能です。

[armadillo ~]# service connection-recover stop
[armadillo ~]# systemctl disable connection-recover.service

図22.6 再接続サービスの停止


22.7.2. 再接続サービスのping送付先変更

再接続サービスのping送付先変更は、図22.6「再接続サービスの停止」に示すコマンドで可能です。 ネットワークデバイス名[wwan]は、表6.4「通信モジュールのネットワークデバイス」を参照し、搭載されている通信モジュールに合わせて置き換えてください。

[armadillo ~]# vi /etc/connection-recover/gsm-[wwan]_connection-recover.conf

#!/bin/bash

PRODUCT_NAME="Armadillo-IoT Gateway G3 M1 Board","Armadillo-IoT Gateway G3 W2 Board"
PING_DEST_IP=8.8.8.8 #この行を任意のIPアドレスに変更する。
DEVICE=ttyUSB2
TYPE=gsm
NETWORK_IF=ppp0
FORCE_REBOOT=FALSE

図22.7 再接続サービスのping送付先変更


22.8. 3G/LTE のネットワークデバイス名に ttyUSB2 を利用する

通信モジュール Quectel製 EC25-J 搭載の Armadillo にて、USBコネクタにセンサーなどを接続した状態で起動すると、ネットワークデバイス名が ttyUSB2 から変化することがあるため、Debian GNU/Linux 12(コードネーム bookworm) では、デフォルトの 3G/LTE ネットワークデバイス名を ttyCommModem としております。

Debian GNU/Linux 10(コードネーム buster) 以前から移植されて ttyUSB2 として使用する必要がある場合、以下の手順で 3G/LTE のネットワークデバイスを ttyUSB2 に設定できます。

[注記]

既に ttyCommModem のコネクション設定が存在する場合、事前にコネクション設定を削除してください。

[armadillo ~]# nmcli connection delete gsm-ttyCommModem

手順22.4 ttyUSB2 の利用

  1. /etc/ModemManager/symlink.conf の変更

    /etc/ModemManager/symlink.conf を以下のように変更します。quectel-ec25-symlink をコメントアウトします。

    # quectel-ec25-symlink
  2. 関連するサービスの再起動

    ModemManager サービスと再接続サービスを、以下のように再起動させます。

    [armadillo ~]# service connection-recover restart
    [armadillo ~]# service ModemManager restart
  3. ttyUSB2 のコネクション作成

    ネットワークデバイス名に ttyUSB2 を指定します。

    [armadillo ~]# nmcli connection add type gsm \
    ifname ttyUSB2 apn [apn] user [user] password [password]

    作成したコネクション設定で 3G/LTEのデータ通信が行われれば確認完了です。

[注記]

利用するネットワークデバイスを ttyUSB2 から ttyCommModem に変更する場合、/etc/ModemManager/symlink.conf の quectel-ec25-symlink の行を以下のように有効化してください。

quectel-ec25-symlink
[警告]

ttyCommModem を使用する場合、この行には quectel-ec25-symlink のみを記載してください。同じ行にタブ・スペースを含めたこれ以外の文字・記号が存在しますと、本機能が有効になりません。

22.9. 無線 LAN をアンテナ 1 本 (SISO) で動作させる

Armadillo-IoT ゲートウェイ G3 の無線 LAN は、アンテナ 2 本 (MIMO) での動作を標準としております。

ソフトウェアの設定を変更することでアンテナ 1 本 (SISO) での動作が可能となります。

[警告]

使用する無線 LAN モジュールによって、設定方法と使用するコネクタ(ch0, ch1)が変わります。

22.9.1. AEH-AR9462 の設定方法

無線 LAN モジュール AEH-AR9462 を使用する際の設定方法を記載します。

[警告]

アンテナ 1 本で動作させる際は、WLAN インタフェースの ch0 のみにアンテナを接続し、 ch1 は未接続にしてください。ch0 と ch1 の位置は、「インターフェースレイアウト」 を参照ください。

Armadillo にファイル /etc/udev/rules.d/99-wlan.rules を作成し、図22.8「/etc/udev/rules.d/99-wlan.rules に書き込む内容」の内容を記載し保存した後、Armadillo を再起動することで適用されます。

ACTION=="add", SUBSYSTEM=="ieee80211", KERNEL=="phy0", \
    RUN+="/usr/sbin/ip link set dev wlan0 down", \
    RUN+="/usr/sbin/iw phy phy0 set antenna 1 1", \
    RUN+="/usr/sbin/ip link set dev wlan0 up"
      

図22.8 /etc/udev/rules.d/99-wlan.rules に書き込む内容


現在の設定を確認するには、図22.9「無線 LAN AEH-AR9462 のアンテナ設定確認コマンド」 に示すコマンドを入力します。コマンドの結果が、図22.10「無線 LAN AEH-AR9462 のアンテナ設定確認 (SISO)」 の場合 SISO、図22.11「無線 LAN AEH-AR9462 のアンテナ設定確認 (MIMO)」 の場合 MIMO の設定となっております。

  [armadillo ~]# iw phy phy0 info | grep "Configured Antennas"
      

図22.9 無線 LAN AEH-AR9462 のアンテナ設定確認コマンド


  [armadillo ~]# iw phy phy0 info | grep "Configured Antennas"
  Configured Antennas: TX 0x1 RX 0x1
      

図22.10 無線 LAN AEH-AR9462 のアンテナ設定確認 (SISO)


  [armadillo ~]# iw phy phy0 info | grep "Configured Antennas"
  Configured Antennas: TX 0x3 RX 0x3
      

図22.11 無線 LAN AEH-AR9462 のアンテナ設定確認 (MIMO)


22.9.2. WPEB-265AXI(BT) [B33] の設定方法

無線 LAN モジュール WPEB-265AXI(BT) [B33] を使用する際の設定方法を記載します。

[警告]

アンテナ 1 本で動作させる際は、WLAN インタフェースの ch1 のみにアンテナを接続し、 ch0 は未接続にしてください。ch0 と ch1 の位置は、「インターフェースレイアウト」 を参照ください。

図22.12「firmware-bcmdhd-siso インストールコマンド」に示すコマンドで、パッケージ firmware-bcmdhd-siso をインストールすることで適用されます。

[armadillo ~]# apt install firmware-bcmdhd-siso
      

図22.12 firmware-bcmdhd-siso インストールコマンド


現在の設定を確認するには、図22.13「無線 LAN WPEB-265AXI(BT) [B33] のアンテナ設定確認コマンド」 に示すコマンドを入力します。コマンドの結果が、図22.14「無線 LAN WPEB-265AXI(BT) [B33] のアンテナ設定確認 (SISO)」 の場合 SISO、図22.15「無線 LAN WPEB-265AXI(BT) [B33] のアンテナ設定確認 (MIMO)」 の場合 MIMO の設定となっております。

  [armadillo ~]# cat /lib/firmware/bcmdhd/nvram_ap6275p_mp.txt | grep txchain
      

図22.13 無線 LAN WPEB-265AXI(BT) [B33] のアンテナ設定確認コマンド


  [armadillo ~]# cat /lib/firmware/bcmdhd/nvram_ap6275p_mp.txt | grep txchain
  txchain=1
      

図22.14 無線 LAN WPEB-265AXI(BT) [B33] のアンテナ設定確認 (SISO)


  [armadillo ~]# cat /lib/firmware/bcmdhd/nvram_ap6275p_mp.txt | grep txchain
  txchain=3
      

図22.15 無線 LAN WPEB-265AXI(BT) [B33] のアンテナ設定確認 (MIMO)