イマドキBSD I/O 2012

2012年11月07日(金) KOF2012 BSDなひととき

むとうたけし@K*BUG <mutoh@openedu.org>

*BSDとI/O

  • むとうには、あまりHardなことは言えません(_O_)
    • ◯お気軽に、ヒカリやVR(input)で、LED光らせたりサーボ動かしたり (output)
    • ×インストール前にADM3202ANで電圧レベル変換してシリアルコンソールを出す
  • USB使ってPhysical ComputingとBSDといった内容
    • Squeak / Scratch も使いたいですよね?
  • 歴史: 「Serial知りはる?知ってはる?

本当にレガシーなインタフェース

イマドキはついているように思えても、USBの先に居たりする。

  • RS-232C
  • パラレルポート (IEEE1284)
  • PS/2
  • FDD
  • ...

レガシーなインタフェース

fuji_io.png
ppc0: <Standard parallel printer port> at port 0x378-0x37f irq 7 pnpid PNP0400 on isa0
ppc0: Generic chipset (EPP/NIBBLE) in COMPATIBLE modef
ppbus0: <Parallel port bus> on ppc0
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
uart0: <16550 or compatible> at port 0x3f8-0x3ff irq 4 pnpid PNP0501 on isa0

USB, USB, USB!!

  • USBだけアレば大丈夫!?
  • 待て!! portingはシリアルを確保してからだ!!
  • 今回は主にUSBデバイスとして見えるお気楽I/Oデバイスについて

USBシリアル3兄弟+1; USBシリアル

  • USBシリアル: ucom (/dev/{ttyU,cuaU}?)
    • uftdi: FTDI
    • uplcom: Prolific
    • umodem: USB Communication Device Class (CDC)
  • USB Mass Storage: umass:(/dev/{sd,da,...}?)
    • USBメモリUSB HDDとか色々
    • 最近はコンパイルした実行ファイルをディスクに見える所に入れるデバイスも

USBシリアルのdmesg; USBシリアル

  • uftdi: Gainer
uftdi0 at uhub2 port 1
uftdi0: FTDI FT232R USB UART, rev 2.00/6.00, addr 2
ucom0 at uftdi0 portno 1
  • uplcom: なのぼ〜ど
uplcom0 at uhub1 port 1 "Prolific Technology Inc. USB-Serial Controller" rev 1.10/3.00 addr 2
ucom0 at uplcom0
  • umodem: Design Wave Magazine 2008/05基板
uhub4 at uhub0 port 1 "Genesys Logic USB2.0 Hub" rev 2.00/32.98 addr 4
umodem0 at uhub4 port 4 configuration 1 interface 0 "vendor 0x09b9 product 0x0000" rev 2.00/0.00 addr 5
umodem0: data interface 1, has no CM over data, has no break
umodem0: status change notification available
ucom0 at umodem0

デバイス使用上の注意; USBシリアル

デバイスのパーミッションに注意

  • OpenBSD 5.2R
vaio-p:~ [12-11-04T7:49] % ls -l /dev/ttyU0 
crw-rw----  1 uucp  dialer   66,   0 Nov  4 07:49 /dev/ttyU0
  • NetBSD 6.0R ておくれ
teokure-% ls -l /dev/ttyU0
crw-------  1 uucp  wheel  66, 0 Oct 17 23:55 /dev/ttyU0
  • FreeBSD (devfd, devd無し)
insp700m [ ~ ] % ls -l /dev/ttyU0
crw-------  1 root  wheel  0x6f 11月  7 11:46 /dev/ttyU0

シリアルパーミッションの解決方法; デバイス使用上の注意

  • × Use root or sudo.
  • chmod a+rw /dev/ttyU0
  • chown mutoh /dev/ttyU0
  • /etc/group でグループ調整
vaio-p:~ [12-11-04T7:51] % egrep dial /etc/group
dialer:*:117:mutoh
teokure-% egrep wheel /etc/group 
wheel:*:0:root,mikutter
  • FreeBSD: 動的にデバイスが生える
    • /etc/devfs.conf
    • /etc/devd.conf

FreeBSDの場合; シリアルパーミッションの解決方法

  • 例1: /etc/devfs.conf
kohjin:~ [12-11-05T13:51] % egrep tty /etc/devfs.conf
own     ttyU*   operator:operator
perm    ttyU*   0660
  • 例2: /etc/devd.conf
attach 10 {
       device-name             "umodem[0-9]+";
       action                  "chmod 666 /dev/ttyU*";
       action                  "chmod 666 /dev/cuaU*";
};
attach 10 {
       device-name             "uplcom[0-9]+";
       action                  "chmod 666 /dev/ttyU*";
       action                  "chmod 666 /dev/cuaU*";
};
attach 10 {
       device-name             "uftdi[0-9]+";
       action                  "chmod 666 /dev/ttyU*";
       action                  "chmod 666 /dev/cuaU*";
};

おまけ; 謎USBデバイス

  • uipaq, uvisor, urio; 何に使うんだ?
    • uipaq
ugen0.3: <vendor 0x049f> at usbus0
uipaq0: <vendor 0x049f product 0x0003, rev 1.00/0.00, addr 3> on usbus0
ums0: <EndPoint1 Interrupt Pipe> on usbus0
ums0: error reading report description
device_attach: ums0 attach returned 12
  • urio; Rio600 & Rio800
ugen2.2: <Diamond Multimedia> at usbus2
urio0: <Diamond Multimedia Diamond Multimedia  Digital Audio Player, class 0/0, rev 1.00/1.00, addr 2> on usbus2
ugen2.2: <Diamond Multimedia> at usbus2
urio0: <Diamond Multimedia Diamond Multimedia  Digital Audio Player, class 0/0, rev 1.00/1.00, addr 2> on usbus2

Physical Computingとは?; Physical Computing

  • 美術系大学生でも簡単に電子工作!!
    • 電子工作を教えている時間なし
    • 作品作るのには場合によっては必要
      • センサー: スイッチとか光センサーとか音とかの値とりだして…
      • アクチュエータ: LED光らせたり、サーボ動かしたり
  • オープンハードウエアで公開、自由に互換機が出る
    • ⇒ 価格が安くなる

Physical Computing 3兄弟

Gainer; Physical Computing 3兄弟

Arduino; Physical Computing 3兄弟

  • ハードウエア
    • ちびでぃ〜の2 1000円
    • 大人の科学Vol.27付録 Japanino (POV付き) 3360円
    • GR-SAKURA (umass+Cloud IDE) 3500円程度
    • 星の数ほどの互換機
      • Boarduino; ブレッドボード用
      • LilyPad; 手芸用, ...
    • 星の数ほどのシールドと呼ばれる拡張基板
      • センサ系: CLCD-BOOSTER, タッチパッド, GPS, ...
      • アクチュエータ系: LED, LCD, (サーボ)モータ,
      • 通信系: Ethernet, XBee, ...
  • ソフトウエア: Arduino IDE: Processing (Java (rxtx), avr-libc, avrdude, ...)

Sensor Board; Physical Computing 3兄弟

  • そもそも プログラミング教育系言語 Scratch で利用するために作られた
  • Inputのみ
    • Outputとしては、WeDo用のものがある
  • ハードウエア
  • ソフトウエア
    • Scratch (Squeakプラグインとして組込済)
    • Etoys(Squeak)用のライブラリもあり

Scratch / Squeak TIPS

  • Squeak 4.10.2以降でScratchプラグインが標準で入る
    • FreeBSDだと大丈夫!!
    • Linux4Video, Sensor Board, ...
  • package版SqueakVMでUSBシリアルを使う
    • バイナリエディタ(bviなど)で/dev/ttyS0をttyU0に
  (snip)
00080050  5D 08 83 FE 09 C7 03 2F 64 65 76 C7 43 04 2F 74 ⇒
 ⇒ ]....../dev.C./t
00080060  74 79 66 C7 43 08 55 30 C6 43 0A 00 7F 0F 89 1C ⇒
 ⇒ tyf.C.U0.C......
  (snip)

付録基板の世界

  • 付録がついたモノって好きですよね?
    • 小学?年生とか、仮面ライダースナックとか
    • 書店にあふれた付録付きの本
boards.jpeg

付録基板を選ぶには…

  • とりあえず、落ち着いて回路図を見る
    • 追加で必要なパーツ類に注意!!
  • やっぱりセンサーが最初からある方が遊びやすいです
  • 拡張基板は便利ですが、高いことが多いです

Future works

  • FreeBSDでgainerm-libが動かないのをなんとかする
    • 作者には連絡済
  • Squeak / Scratch
    • WeDo Pluginがコンパイルできるように
    • Sendor BoardプロトコルをCなどの軽いので実装
      • ちっちゃいものクラブでデモ
  • Design Wave Magazine 2008/05基板
    • もう少しGainerコマンドを実装
    • 基板上のLEDぐらいはh*, l*で光らせたい
      • 以前ちょっと作業した

*BSDで、一緒に遊びませんか!!

Last modified: 2012-11-09
Post-it: New Post-it (help)

Text color: [_][_][_][_]

Background: [_][_][_][_][_][_]

Draw Line:

x: y: