Armadillo-640でUSBを使う – ATDEでカーネルをビルドする

Armadillo-640 kernel 4.14-at2 がUSBシリアルデバイスを認識しなかったので、カーネルを4.14-at11に上げたら/dev/ttyUSB0として認識しました。

もしかすると4.14-at11ではカーネルコンフィグレーションの変更しなくても標準でUSBシリアルもサポートされているかもしれません。将来デバイスドライバを追加する際にはカーネルコンフィグレーションの変更が必定なので、ATDEを使用したカーネルのビルド方法とおよびmenuconfigの手順をメモします。

Armadillo-640

手元のArmadillo-640はDebian stretchですが、カーネルが kernel 4.14-at2 と少し古いままでした。

USB-シリアルアダプタを接続してもusbを認識しません。/dev/ttyUSB0 がありません。
ラズパイなんかだとUSBケーブルを接続すると /dev/ttyUSB0 として認識されます。

root@armadillo:/home/atmark# ls /dev/tty*
/dev/tty    /dev/tty19  /dev/tty3   /dev/tty40  /dev/tty51  /dev/tty62
/dev/tty0   /dev/tty2   /dev/tty30  /dev/tty41  /dev/tty52  /dev/tty63
/dev/tty1   /dev/tty20  /dev/tty31  /dev/tty42  /dev/tty53  /dev/tty7
/dev/tty10  /dev/tty21  /dev/tty32  /dev/tty43  /dev/tty54  /dev/tty8
/dev/tty11  /dev/tty22  /dev/tty33  /dev/tty44  /dev/tty55  /dev/tty9
/dev/tty12  /dev/tty23  /dev/tty34  /dev/tty45  /dev/tty56  /dev/ttymxc0
/dev/tty13  /dev/tty24  /dev/tty35  /dev/tty46  /dev/tty57  /dev/ttymxc2
/dev/tty14  /dev/tty25  /dev/tty36  /dev/tty47  /dev/tty58
/dev/tty15  /dev/tty26  /dev/tty37  /dev/tty48  /dev/tty59
/dev/tty16  /dev/tty27  /dev/tty38  /dev/tty49  /dev/tty6
/dev/tty17  /dev/tty28  /dev/tty39  /dev/tty5   /dev/tty60
/dev/tty18  /dev/tty29  /dev/tty4   /dev/tty50  /dev/tty61

RS-232Cを使用したいのであればarmadillo-640にはDB9のシリアルポートが /dev/ttymxc2 で使用できます。
ここでは/dev/ttyUSB0からのUSB-シリアルを使うのが目的です。

カーネルビルド

2019-04-26時点の最新版 4.14-at11 を使用します。

ATDEの準備

作業用PCにV開発環境ATDEを準備しておきます。手順は以下の公式マニュアルにあります。VMware Playerの仮想環境でATDE7を起動します。
4.2.1. ATDEのセットアップ

ATDE7はこちらから。
Armadilloシリーズ専用の開発環境(Debian GNU/Linux 9 (“stretch”) ベース) 2018/06/29

カーネルイメージのカスタマイズとビルド

armadillo-640 公式マニュアル

こちらの手順にあるように、ATDE上でカーネルイメージをカスタマイズしてビルドします。
20.2. イメージをカスタマイズする

カーネルソースのダウンロード

Armadillo-640 製品ソフトウェア
ページからソースファイルをATDEへダウンロード

linuxカーネル: linux-v4.14-at11.tar.gz
initramfs アーカイブ: initramfs_a600-1.0.0.cpio.gz

ソースファイルの展開とリンクの作成

atmark@atde7:~/$ tar xzf linux-v4.14-at11.tar.gz
atmark@atde7:~/$ cd linux-v4.14-at11
atmark@atde7:~/linux-v4.14-at11$ ln -s ../initramfs_a600-1.0.0.cpio.gz initramfs_a600.cpio.gz 

コンフィグレーション

atmark@atde7:~/linux-v4.14-at11$ make ARCH=arm armadillo-640_defconfig
atmark@atde7:~/linux-v4.14-at11$ make ARCH=arm menuconfig

インタラクティブなmenuconfigが起動するので、その中からUSB supportのFTDI DriverをEnableにして保存します。

 .config - Linux/arm 4.14-at11 Kernel Configuration
 ------------------------------------------------------------------------------
  ----------------- Linux/arm 4.14-at11 Kernel Configuration -----------------
     Arrow keys navigate the menu.   selects submenus ---> (or empty
     submenus ----).  Highlighted letters are hotkeys.  Pressing 
     includes,  excludes,  modularizes features.  Press  to
     exit,  for Help,  for Search.  Legend: [*] built-in  [ ]
    -----------------------------------------------------------------------
             General setup  --->
 
 ....
 
   -> Device Drivers
       -> USB support
          -> [*] USB Serial Converter support
             ->  [*]   USB FTDI Single Port Serial Driver

カーネルイメージ uImage のビルド

atmark@atde7:~/linux-v4.14-at11$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage

atmark@atde7:~/linux-v4.14-at11$ ls -lrt arch/arm/boot/uImage
-rw-r--r-- 1 atmark atmark  6105312  4月 26 12:55 uImage

uImageファイルがビルドされました。

DTBのビルド

atmark@atde7:~/linux-v4.14-at11$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

atmark@atde7:~/linux-v4.14-at11$ ls -l arch/arm/boot/dts/armadillo-640.dtb
armadillo-640.dtb

armadillo-640.dtb ファイルがビルドされました。

armadilloのイメージファイルを書き換える

作成した uImage と armadillo-640.dtb をarmadilloにコピーしてイメージファイルを書き換えます。

armadillo-640 公式マニュアル

11.2. 特定のイメージファイルだけを書き換える

ATDEからarmadilloへイメージファイルをcopy

scpか何かでuImage と armadillo-640.dtb をATDEからarmadilloへコピーします。

カーネルイメージとDTBの書き換え

ここからArmadillo上での作業です。
rootユーザで作業します。

root@armadillo:/home/atmark# mount /dev/mmcblk0p2 /mnt
root@armadillo:/home/atmark# cp uImage /mnt/boot/uImage

root@armadillo:/home/atmark# cp armadillo-640.dtb /mnt/boot/armadillo-640.dtb
root@armadillo:/home/atmark# umount /mnt

リブート

リブートして確認してみます。

atmark@armadillo:~$ uname -a
Linux armadillo 4.14-at11 #1 Fri Apr 26 12:55:42 JST 2019 armv7l GNU/Linux

atmark@armadillo:~$ ls /dev/tty*
/dev/tty    /dev/tty19  /dev/tty3   /dev/tty40  /dev/tty51  /dev/tty62
/dev/tty0   /dev/tty2   /dev/tty30  /dev/tty41  /dev/tty52  /dev/tty63
/dev/tty1   /dev/tty20  /dev/tty31  /dev/tty42  /dev/tty53  /dev/tty7
/dev/tty10  /dev/tty21  /dev/tty32  /dev/tty43  /dev/tty54  /dev/tty8
/dev/tty11  /dev/tty22  /dev/tty33  /dev/tty44  /dev/tty55  /dev/tty9
/dev/tty12  /dev/tty23  /dev/tty34  /dev/tty45  /dev/tty56  /dev/ttyUSB0
/dev/tty13  /dev/tty24  /dev/tty35  /dev/tty46  /dev/tty57  /dev/ttymxc0
/dev/tty14  /dev/tty25  /dev/tty36  /dev/tty47  /dev/tty58  /dev/ttymxc2
/dev/tty15  /dev/tty26  /dev/tty37  /dev/tty48  /dev/tty59  /dev/ttymxc4
/dev/tty16  /dev/tty27  /dev/tty38  /dev/tty49  /dev/tty6
/dev/tty17  /dev/tty28  /dev/tty39  /dev/tty5   /dev/tty60
/dev/tty18  /dev/tty29  /dev/tty4   /dev/tty50  /dev/tty61

無事カーネル 4.14-at11 になりました。
/dev/ttyUSB0 も認識されました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です