heads-up
- USB4BSD now on CURRENT
current - Hans Petter Selasky氏が開発したUSB4BSD USBスタックが、
Alfred Perlstein氏によってFreeBSDへマージされました。USB4BSDの導入によって次の機能や特徴が実現されます。 - 新しいmutexが有効になったUSB APIの提供
- 多くのUSBドライバがGiantロックフリーで動作するようになる
- Linux USBカーネル互換レイヤの提供
- ドライバがロードされないという問題を解決することになる新しいUGENバックエンドとlibusbライブラリの提供
- USB設定を簡単にするusbconfigユーティリティの導入
- スプリットトランザクションのフルサポート
(ハイスピードUSBハブで動作しているUSBオーディオデバイスがフルスピードで動作するようになる) - HS ISOCトランザクションのフルサポート
(HS Webカメラデバイスドライバの開発が可能になる) - キャッシュフラッシュやバッファインバリデートなど、
組み込み環境におけるUSB機能のサポート - USBディスクリプタの安全なパースの実現
- USBデバイスサイドモード
(USBガジェットモード) のサポート - I/
Oベクタに似たUSB転送のサポートでスループットの向上と割り込みの低下
マージされたUSB4BSDはまだデフォルトでは有効になりません。次のように既存のUSBスタックを無効にして新しくマージされたUSB4BSDを有効にするカーネル設定ファイルを作成します。たとえばここでは/sys/
i386/ conf/ CURRENTファイルとして用意したものとします。 リスト1 USB4BSDを有効にするためのカーネル設定ファイルの例: /sys/ i386/ conf/ CURRENT include GENERIC ident CURRENT # disable legacy USB stack nodevice uhci # UHCI PCI->USB interface nodevice ohci # OHCI PCI->USB interface nodevice ehci # EHCI PCI->USB interface (USB 2.
0) nodevice usb # USB Bus (required) nodevice udbp # USB Double Bulk Pipe devices nodevice ugen # Generic nodevice uhid # "Human Interface Devices" nodevice ukbd # Keyboard nodevice ulpt # Printer nodevice umass # Disks/ Mass storage - Requires scbus and da nodevice ums # Mouse nodevice ural # Ralink Technology RT2500USB wireless NICs nodevice rum # Ralink Technology RT2501USB wireless NICs nodevice zyd # ZyDAS zb1211/ zb1211b wireless NICs nodevice urio # Diamond Rio 500 MP3 player nodevice uscanner # Scanners # USB Serial nodevices nodevice ucom # Generic com ttys nodevice u3g # USB-based 3G modems (Option, Huawei, Sierra) nodevice uark # Technologies ARK3116 based serial adapters nodevice ubsa # Belkin F5U103 and compatible serial adapters nodevice uftdi # For FTDI usb serial adapters nodevice uipaq # Some WinCE based devices nodevice uplcom # Prolific PL-2303 serial adapters nodevice uslcom # SI Labs CP2101/ CP2102 serial adapters nodevice uvisor # Visor and Palm devices nodevice uvscom # USB serial support for DDI pocket's PHS # USB Ethernet, requires miibus nodevice aue # ADMtek USB Ethernet nodevice axe # ASIX Electronics USB Ethernet nodevice cdce # Generic USB over Ethernet nodevice cue # CATC USB Ethernet nodevice kue # Kawasaki LSI USB Ethernet nodevice rue # RealTek RTL8150 USB Ethernet nodevice udav # Davicom DM9601E USB # enable USB4BSD USB stack # USB core support device usb2_ core # USB controller support device usb2_ controller device usb2_ controller_ ehci device usb2_ controller_ ohci device usb2_ controller_ uhci # USB mass storage support device usb2_ storage device usb2_ storage_ mass # USB ethernet support, requires miibus device usb2_ ethernet device usb2_ ethernet_ aue device usb2_ ethernet_ axe device usb2_ ethernet_ cdce device usb2_ ethernet_ cue device usb2_ ethernet_ kue device usb2_ ethernet_ rue #device usb2_ ethernet_ dav # USB wireless LAN support device usb2_ wlan device usb2_ wlan_ rum device usb2_ wlan_ ral device usb2_ wlan_ zyd # USB serial device support device usb2_ serial device usb2_ serial_ ark device usb2_ serial_ bsa device usb2_ serial_ bser device usb2_ serial_ chcom device usb2_ serial_ cycom device usb2_ serial_ foma device usb2_ serial_ ftdi device usb2_ serial_ gensa device usb2_ serial_ ipaq device usb2_ serial_ lpt device usb2_ serial_ mct device usb2_ serial_ modem device usb2_ serial_ moscom device usb2_ serial_ plcom device usb2_ serial_ visor device usb2_ serial_ vscom # USB bluetooth support device usb2_ bluetooth #device usb2_ bluetooth_ ng # USB input device support device usb2_ input device usb2_ input_ hid device usb2_ input_ kbd device usb2_ input_ ms # USB sound and MIDI device support #device usb2_ sound コミットログに表示されているUSB4BSDデバイスのうちusb2_
ethernet_ dav、 usb2_ bluetooth_ ng、 usb2_ soundはそのままではビルドできないのでとりあえずはずしておきます。 ベンチマークを実施する場合は、
次のようにデバッグオプションを無効にする設定を追加してからカーネルを再構築してみてください。CURRENTはデフォルトではデバッグ機能が有効になっているため、 ベンチマーク試験を実施する場合にはデバッグ機能を無効化する必要があります。 リスト2 ベンチマークをとる場合はデバッグ機能の無効化設定も追加しておく # disable - Debugging for use in -current nooptions KDB nooptions DDB nooptions GDB nooptions INVARIANTS nooptions INVARIANT_
SUPPORT nooptions WITNESS nooptions WITNESS_ SKIPSPIN USB4BSDを有効にする前とした後のdmesg(8)の出力からUSBに関する部分を抜粋します。USB4BSDではUSBからGiant Lockの表記が解除されていること、
バスの通信速度として 「12Mbps Full Speed USB v1. 0」 と 「480Mbps High Speed USB v2. 0」 が表示されていることに注目してください。 リスト3 FreeBSDの従来のUSBスタック出力 dmesg(8) uhci0: <Intel 82801H (ICH8) USB controller USB-D> port 0x30c0-0x30df irq 16 at device 26.
0 on pci0 uhci0: [GIANT-LOCKED] uhci0: [ITHREAD] usb0: <Intel 82801H (ICH8) USB controller USB-D> on uhci0 usb0: USB revision 1. 0 uhub0: <Intel UHCI root hub, class 9/ 0, rev 1. 00/ 1. 00, addr 1> on usb0 uhub0: 2 ports with 2 removable, self powered ehci0: <Intel 82801H (ICH8) USB 2. 0 controller USB2-B> mem 0x52225c00-0x52225fff irq 18 at device 26. 7 on pci0 ehci0: [GIANT-LOCKED] ehci0: [ITHREAD] リスト4 USB4BSDによる新しいUSBスタック出力 dmesg(8) uhci0: <Intel 82801H (ICH8) USB controller USB-D> port 0x30c0-0x30df irq 16 at device 26.
0 on pci0 uhci0: [ITHREAD] uhci0: LegSup = 0x0f10 usbus0: <Intel 82801H (ICH8) USB controller USB-D> on uhci0 ehci0: <Intel 82801H (ICH8) USB 2. 0 controller USB2-B> mem 0x52225c00-0x52225fff irq 18 at device 26. 7 on pci0 ehci0: [ITHREAD] ugen0. 1: <Intel> at usbus0 ushub0: <Intel UHCI root HUB, class 9/ 0, rev 1. 00/ 1. 00, addr 1> on usbus0 ushub0: 2 ports with 2 removable, self powered usbus1: 12Mbps Full Speed USB v1. 0 ugen1. 1: <Intel> at usbus1 ushub1: <Intel UHCI root HUB, class 9/ 0, rev 1. 00/ 1. 00, addr 1> on usbus1 ushub1: 2 ports with 2 removable, self powered usbus2: 480Mbps High Speed USB v2. 0 iPod nano 第3世代を活線挿抜した場合のコンソールの出力例を次に示します
(iPodは場合によってはシステムパニックを引き起こします。一旦iPodをスリープモードにするか再起動してから接続した方が安全です)。USB4BSDで認識されていることが確認できます。 リスト5 iPod nano 第3世代挿入時コンソール出力 ugen2.
2: <Apple Inc.> at usbus2 umass0: <Apple Inc. iPod, class 0/ 0, rev 2. 00/ 0. 01, addr 2> on usbus2 umass0: SCSI over Bulk-Only; quirks = 0x0000 umass0:10:0:-1: Attached to scbus10 da0 at umass-sim0 bus 0 target 0 lun 0 da0: <Apple iPod 1. 62> Removable Direct Access SCSI-0 device da0: 40. 000MB/ s transfers da0: 7583MB (1941441 4096 byte sectors: 255H 63S/ T 120C) GEOM_ LABEL: Label for provider da0s1 is msdosfs/ IPOD. リスト6 iPod nano 第3世代引抜時コンソール出力 umass0: at ushub2, port 1, addr 2 (disconnected) (da0:umass-sim0:0:0:0): lost device (da0:umass-sim0:0:0:0): removing device entry umass0: detached GEOM_
LABEL: Label msdosfs/ IPOD removed. 今回マージされたUSB4BSDが、
いつ従来のUSBスタックから置き換わるのかは定かではありません。場合によっては再び差し戻される可能性もあるわけですが、 Giant Lockが削除されたうえに高速通信が実現される利点は大きいといえます。今後どのタイミングでデフォルトスタックになるかに注目です。 - NFS gets new RPCSEC_
GSS support current - Doug Rabson氏によってNFSクライアントとサーバの双方に対してRPCSEC_
GSS認証をサポートするための実装が追加されました。この実装によって従来使われていたRPC実装は破棄され、 新しく実装されたRPC実装がNFSロックマネージャに置き換わります (実際にはユーザランドのsunrpcコードが移植されたものです)。今のところ古いコードも新しいコードも両方ありますが、 デフォルトでは新しいコードが使われます。古いコードを使う場合にはNFS_ LEGACYRPCオプションを使ってください。 RPCSEC_
GSSをクライアントとサーバで活用する場合、 KGSSAPIオプションとcryptoデバイスを指定してカーネルをビルドする必要があります。またgssd(8)を動かしていく必要があるため、 最新の/etc/ rc. d/ gssdと/etc/ rc. d/ nfsdをインストールした上で 「gssd_ enable=YES」 の行を/etc/ rc. confに追加しておく必要があります。 現在の実装ではssh経由でログインしてデリゲートされている場合などのように違う場所にチケットファイルが置いてあるケースではマウントはできてもファイルへのアクセスが許可されません。この制限はFreeBSDのみならずSolarisやLinuxにおいても同様です。興味深いのはDoug Rabson氏がこの問題は理論上はVariantシンボリックリンクを使えば解消できると説明しているところにあります。
EuroBSDCon2008でBrooks Davis氏が、
DragonFly BSDのVariantシンボリックリンクをベースに大幅な変更を加えてFreeBSDにVariantシンボリックリンク機能を持ってきた旨を発表しています。Variantシンボリックリンクの導入については必要と考える意見と不要とみなす意見があり、 これまではFreeBSDには導入されていませんでした。しかしながらVariantシンボリックリンクが有効に機能するケースが増えると、 FreeBSD本体にVariantシンボリックリンク機能がマージされる可能性がでてきます。その点でDoug Rabson氏がにVariantシンボリックリンクで理論的には状況を改善できると説明しているのは興味深いところです。 サーバでRPCSEC_
GSSをサポートするにはサーバクレジットを 「nfs/<fqdn>@<REALM>」 のように作成して/etc/ krb5. keytabファイルに記述します。あとは/etc/ exportsに 「-sec=krb5」 オプションを追加してmountd(8)とnfsd(8)の双方を再起動します。同機能を使う場合、 従来はサービススレッドを作成していたところがkthreadsに変更されます。kthreadsがとういった状況にあるのかは 「top -H」 のように'-H'オプションを指定することで確認できます。 この新しいRPCSEC_
GSS認証サポートはIsilon Systemsスポンサーシップのもとで取り組まれました。7-STABLEへは1ヵ月後のマージが予定されています。
ports
- java/
jdk14 JDK 1.
4のportが最新のタイムゾーン情報 (tzupdater 1. 3.9-2008g) を使うようにアップデートされました。