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 公式マニュアル
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 も認識されました。