ドライバ - みる会図書館


検索対象: BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える
23件見つかりました。

1. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

FreeBSD USB プロジェクト 今回までに新しく加わったデバイスドライバは、 装されたことによるものです。 ん。これは各 BSD において必要最低限の機能がほとんど実 最近の各 BSD の USB に関して目新しい動きはありませ uscannar ドライ′ヾ uscanner ドライバのみです。 ん。 目の修正なので、 USB としての機能には影響はありませ したが、 ANSI スタイルのものに変更されています。見た P が使われていま 以前は関数のプロトタイプ宣言に、 コーディングスタイルの変更 いでください。 ていません。 SanDisk ImageMate 同様、 umass で利用しな うことがわかっています。これについては、原因がわかっ シュで利用した場合も、デバイスそのものを破壊してしま また、 IBM Microdrives を一部の USB コンパクトフラッ は利用しないようにしてください。 ん。決して、 umass と SanDisk ImageMate の組み合わせで 装は行われていないので、根本的な解決策はまだありませ いることによるものです。現時点でこのコマンド体系の実 1mageMate が独自のコマンド体系で動作するようになって 壊してしまうことがわかっています。これは s anDisk と、ただ動かないだけでなく、ハードウェアそのものを破 SanDisk lmagemate を umass ドライバで利用しようとする USB マスストレージデバイスドライバによる障害 ションを使用することが多いようです。 USB スキャナの利用には、 SANE と呼ばれるアプリケー 要な機能を削除したものと考えてよいものです。 提供されているだけであり、本質的には ugen ( 4 ) から不必 ザーランドから USB スキャナへのインターフェイスとして uscanner ドライバは単独で動作するわけではなく、ユー フロジェクト短信 前川将秀 / MAE M gehenna@jp.FreeBSD.org のであるのかを、もう一度考え直してみる時期になったの きません。もうずいぶん普及した今、 USB はどういったも 言及をする場合には、その規格を知っていなくては到底で で、そこを読むだけでもよいでしよう。 USB 規格について 部分に何を目的に策定されているのかが書かれていますの 英語も非常に平易です。また、ほとんどの資料には、冒頭 握するだけであれば、その大半を読む必要はありませんし、 さえあきらめてしまうかもしれません。しかし、概要を把 かるでしよう。あるいは、読みたくない、と手に取ること で書かれているので、すべてを理解するまでには時間はか じつに膨大な量となります。しかも、そのほとんどが英語 も多数存在します。メーカー独自仕様の資料も含めると、 USB はたしかに大規模な仕様であり、デバイスの仕様書 などを多く目にするようになってきました。 いううれしいこともあるのですが、一方で、誤解、間違い * BSD での USB の利用力昿がるにつれ、開発者の増加と 啓蒙活動の必要性 用の機能の充実などです。 スの改善や、より高機能なドライバへの再設計、デバッグ それ以外に現在行われているのは、主に、パフォーマン 常に難しいので、なかなか対応は進んでいません。 因カめない症状などです。こうした障害は原因追求が非 マシンでは動かない、といった、一見しただけでは全然原 デバイスを利用しているのに、 A のマシンでは動き、 B の のであることが多いようです。同じチップセットで、同じ 現在報告される障害の多くは、利用環境に依存したも ています。 各 *BSD とも USB としての基本的な機能の実装は完了し 全体的な動き かもしれません。 2000 No. 6 BSD magazine 205

2. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

C リミデースドライ フログラミング USB-MATCH 関数で USBDAQ の検出を行うが、今回の それぞれが独立にアクセスできる必要があるからである。 FreeBSD の場合は、 DEVFS の関係上 ( それだけではな ドライバは USBDAQ 専用であるので、べンダ ID / プロダク ト ID が一致するかどうかを調べている。 USBDAQ が検出 いが ) USB_ATTACH の最後でデバイスノードを作成して された場合、べンダ ID / プロダクト ID が一致しているので、 おく。 UMATCH_VENDOR_PRODUCT を返している ( 103 行め USB_DETACH 関数はほ ltujoy と同様の記述でよい。 から 119 行め ) 。 USB-MATCH 関数の戻り値は、検出状況 usbdaq の場合は、確保しておいた転送用パッフアの開放も に応じて適切な値を返すべきである。理由は割愛するが、 行う必要がある。 たくさん呼び出される match 関数を適切に処理するための NetBSD 、 OpenBSD の場合は、 usbdaq_activate を用意す おまじないと思えばよいだろう。それぞれの値は sys / dev / る必要があるが、可。 y とまったく同じで、この関数で処理 usb ん sbdi. h で定義されているので、一度見ておくとよいだ すべきことはほとんどない。 usbdaq では usbdaq-reset という特別な関数をひとつ用意 している。この関数は USBDAQ のエラー状態を解除する 次に、 USB_ATTACH 関数でデバイス / デバイスドライバ の初期化を行う。 USBDAQ には端点が三つだけ存在する ためのものである。この関数を用意したのは、ドライバの ので、 bNumEndp 。 ints を参照せずにあらかじめソースの最 基本設計に関係している。 usbdaq ドライバの場合は、ドラ 初で USBDAQ ー NEP を 3 と定義しておき、以降はこのマク イバ本体ではコマンドの発行などをせすに、ユーザーラン 口を使うことにしている ( 32 行め ) 。また、デバイス上の ドから送られて来るコマンドあるいはデータをデバイスに 転送する、あるいはその逆を行うだけにしようと考えた。 端点アドレスは、 sc ー epaddr [ 0 ] で出力用パルク端点が、 sc-epaddr[l] で主入力用パルク端点が、 sc-epaddr[2] で副入 しかし、ユーザーランドアプリケーションが常に適切な処 理を行っている保証はどこにもないので、デバイスドライ カ用パルク端点が参照できるように格納している。格納場 バの意図せぬデータ列が送られて来た場合は、デバイスが 所を数字で判断するのは可読性を損なうので、あらかじめ、 USBDAQ_(BULKOUTIBULKINIALT_BULKIN) というマク 動作不能になってしまう可能性がある。たとえこういう状 口を定義し、それを利用することにしている ( 34 行めから 況になったとしても、ほとんどデバイスの場合は、すぐさ まユーザーランドアプリケーションが適切な処理を行えば 36 行め ) 。今回のソースでは、端点アドレスについての情 まったく問題はないのだが、すでにエラーを発生するよう 報をいちいち調べているが、 USBDAQ では、どの端点アド レスがどの機能を提供するかは明確に規定されているの なデータ列が送られてきた以上、正しくエラーが処理され るかどうかは非常に怪しいので、エラーからの復帰だけは、 で、いくぶん冗長となっている ( 理山は特に無く、使い回 ドライパ内で特別に処理するようにしている。こうするこ しができるようにしただけである ( ^ ^ ; ) 。 とで、より安全にデバイスが利用可能になる。ドライバの 次に、パイプの作成を行っている。今回のドライバは 設計方針にもよるが、いずれの場合もエラー処理を適切に USB_ATTACH 内でパイプを作成しているが、ドライバの 己述し、実行されなければならないだろう。 ( 筆者はよく 利用形態を考えるとデバイスノードを叩 en ( 2 ) した場合に これをサポるので、この手のバグにえんえん悩まされるこ 作成するのでも一向に構わない。今回は、 USB_ATTACH とがある。 ) 内で用意してしまうことにする。パイプの作成は 最後に、 cdevsw の準備をしなくてはならない。今回の usbdaq—open—pipe で一括して行い、削除は usbdaq—close usbdaq は可0Y と違い、ひとつの usbdaq に二つのデバイスノ pipe で一括して行う。 ードが存在する。わかりやすくするために、それぞれのデ そして、転送用パッフアも USB ATTACH 時にあからじ バイスノードに番号を付けて、 め作成しておく。転送を行うたびに作成してもよいのだが、 たとえ短いとはいえ、バッフアの作成には時間がかかるの /dev/usbdaq くユニット番号 >. 0 で、データ転送を頻繁に行うようなデバイスの場合はあら /dev/usbdaq くユニット番号 >. 1 かじめ作成しておき、何度も再利用することで高速化が図 れる。ストレージデバイスやネットワークアダブタの場合 の二つを利用することにした。 は、こちらの方が有利だろうと思う。転送用パッフアは各 0 番のほうでデバイスの操作をし、 1 番のほうはサンプリ 入力用パルク端点毎に用意しておいた。並列処理するには、 ング用に用意している。 0 番のほうだけでも、すべての機 2000 No. 6 BSD magazine 165 一三ロ

3. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

作成する c 。 c 。 a アプリケーションはそうした WebObjects で そこで MacOS X では IOK1t というデバイスドライパフレ 開発されている。 ームワークを用意し、 API を整えクラスライプラリをもつ 次期リリースである WebObjects 5 では、 web アプリケー ことの恩恵を継承すると共に、ドライバのアンロードなど ションの動作に必要なライプラリはすべて PureJava 化され、 の機構を追加している。 PureJava のアプリケーションとして WebObjects の Web アプ また、 IOKit での開発は Objective-C ではなく Embedded c + + という、「機能に制限をおいた c + + 」での開発となる。 リケーションを利用できることがアナウンスされている。 もちろん従来の WebObjects でも Java 対応しており、 Java で 制限される " 機能 " とは多重継承などの機能であり、制 の開発をサポートしていたが、ライプラリが Objective-C で 限により c + + の複雑さを回避する一方、 IOKit の提供する 己述されていたため、 WebObjects そのものが移植された環 マクロにより、どちらかというと Objective - c に近い使い勝 境 (Windows NT 、 MacOS X server 、 solaris 、 HP-UX) で 手を実現している。さらに c + + は Objective-C とは違いコン しか動作しなかった。しかし webOb. 」 ects 5 からは、 Java2 さ パイル時にメソッドのバインディングを行うのがデフォル えあればどこでも (Linux でも *BSD でも ) 動くようになる トであるため、実行時の効率も Objective - c に比べて良好 のだ。 である。 残念ながらまだ Apple は MacOS x 上で動作する web Objects を公表していないが、これまでの経緯と J 。 bs の Java2 に関する発言を考えると WebObjects の主要な開発 / 運 用環境の 1 っとして MacOS x が使われることは間違いな 一三ロ 実際の開発 では、実際の開発がどうであるかをみていくために BSD 環境にて伝統的な hell 。 . c の開発と、そして MacOS x のもっとも中心的な開発環境である c 。 c 。 a 環境にて GUI ア プリケーションの開発を実際に行ってみる。 IOKit Embeded C + + これまでは主にアプリケーションの開発についての環境 であったが、もちろんアプリケーション以外にも開発すべ BSD での開発の実例 : hello. c きソフトウェアは存在する。その中でも大きいものとして ますはウォーミングアップに、 BSD 環境での開発を試し に行ってみる。 デバイスドライバがあげられる。 MacOS でのデバイスドライバの開発は混迷を究めてお TerminaI を起動すれば、そこはみなれたコマンドライン り、たとえば USB では、機器接続時に動的にドライバを口 の世界である。 ードし、ドライバがなければネットワークからダウンロー いつものようにⅵを起動注 7 してリスト 1 にあるソースコ ドを試みるという優れた機構を持ち合わせている一方、 ードを hello. c というファイル名で作成し、以下のコマンド 般的には OS によるまともなプロテクション機構がないため を Termina1 から実行する。 に低レベルルーチンにまで介入してくるアプリケーション におびえつつのプログラミングを余儀無くされている。 > cc ー 0 he110 he110. c NeXTSTEP では DriverKit というオプジェクト指向の優れ たデバイスドライバの開発環境があり、「各ドライバの親 クラスからサプクラスを作って、初期化などの最低限のメ ソッドを実装するだけ」という非常に効率的な開発手法が 取られていたが、これは実装に Objective - c という言語を用 いていたため効率の面に問題があり、また仕様上の問題で ドライバのアンロードができないという弱点も抱えていた。 マリスト 1 hello. c #include く stdio . h> char *argv ロ ) int main( int argc , (again) *n" ) ; printf ( " he110. 注 5 WebObjects の残りのサポート環境である solaris 、 HP - UX では残念ながら Applica ⅱ。 nK1t が提供されていない注 6 ため、 GUI をもったアプリケーションは 開発できない。 注 6 sun はかって、 NeXT と共同で SolarisOPENSTEP という solaris の上で動く OpenStep 環境を構築しており、このときに ApplicationKit を自社の DPS を搭載 した x の上に移植したはずである。 sun は Java への傾倒とともに s 。 IarisOPENSTEP を自ら封印してしまったのだが、なんとも惜しい話である。 注 7 人によっては Emacs ( 標準で 20.7.1 というバージョンのものが付属している ) かもしれないが、普通、ⅵですよね ? : - ) 110 BSD magazine 2000 NO. 6

4. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

フロジェクト短信 PAO Report 20001021 がリリースされました。最新の PAO に対応した多 FreeBSD 3.5.1- RELEASE に正式に対応した、 PA03- PA03-20001021 for 3.5 -RELEASE ランチの話題も少々加えてみました。 今回は PA03 と STABLE プランチに加えて CURRENT プ 国語インストーラも公開されています。 このリリースでの、 3.5. ト RELEASE に対応した以外の変 更点は ースになるでしよう。 などです。おそらく、 ・ od-driver マージ ・ IOMEGA Clik のサポート ・ ncv 、 stg 、 nsp の更新 これが、 PA03 としては最後のリリ のだまさひで / M NODA mac@clave.gr.jp.mac@jp.FreeBSD.org pc カードドライバを割り当てる際に、自動的に空きリ 空きリソースの推定 するようになりました。 ったいくっかのアプリケーション (wmpccard など ) が動作 が stable でもサポートされました。 PAO でしか動作しなか PAO が持っている機能、 pccardd の unix ドメインソケット pccardd の unix ドメインソケットサホート FreeBSD 4.2-RELEASE stable プランチは 4.1.1- RELEASE が 9 月下旬にリリースさ れ、この原稿の執筆中には 4.2-RELEASE へ向けた BETA の 段階 (4.2-BETA) となっています。おそらく、もう、大 きな変更はなく、 11 月初旬にはリリースされると思われま す。そこで、 4.1- RELEASE からの変更点などをかいつまん で紹介します。すべてを網羅することはできないので、 fe ドライバの newbus 化 了承ください。 ったと思われます。 るが、 FreeBSD では利用できないカードはほとんどなくな 系 ) のドライバがマージされました。これで、 PA03 で使え ncv ( nCr53C500 系 ) 、 stg ( tmc18c30 系 ) 、 nsp (NinjaSCSI-3 ncv 、 stg 、 nsp ドライ′ヾのマージ 4.1. ト RELEASE にも含まれています。 の OEM) が利用できるようになりました。この変更は 必要とする pc カード ( 富士通製の pc カード NIC およびそ の newbus 化が行われました。これによって、 fe ドライバを 4.1- RELEASE ではまだ行われていなかった、 fe ドライバ ソースを探すようになりました。以前は、 pccard. conf に記 述していたリソース値は無条件に利用可能と想定していた ので、 pccard. conf のエントリを修正しないと動かないカー ドなどがありましたが、この修正によって、 pccard. conf に 記述されていてもすでに使用されているリソースは利用し なくなりました。 pccard ether の改良 pccard ether が改良され、 pc カード NIC を抜いたときの 規定の動作が実装されました。 PA03 では、 pccard_ether 、 pccard-ether-remove として実装されていましたが、 FreeBSD では、 start/stop という引数を設定することでそれ ぞれの動作をさせることになりました。 GENER ℃カーネルでの PC ℃動作モード GENERIC カーネルでの PCIC 動作モードのデフォルトが polling mode になりました。貴重な IRQ を消費しなくなり、 また、インストールに利用可能な PCIC の種類が増加した と思われます。 5-CURRENT NEWCARD 機構による CardBus カードの扱いが実装され つつあるようです。結局、 NetBSD の実装とは少々離れた 実装としてやっていくことに決めたようです。筆者の環境 (PCIC : TI PCI -1410 、カード : FMV-184) では、まだ動 作させるまでにはいたっていませんが、動作報告などもあ るようです。 まだまだ、実験段階というのもあり、 CardBus カードし か動かない ( 16bit カードは動かない ) 、サスペンド / レジュ ームができないなど、未実装な部分も多いですが、ちゃく ちゃくと進歩しているようです。 204 BSD magazine 2000 NO. 6

5. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

ペセキュリティと 暗号技術を考える モードとなっている。 [ 安全なモード ] セキュリティレベル 1 きない procfs で init (PID=O) ヘアタッチで OpenBSD きない procfs で init (PID=O) 、アタッチで NetBSD ・不変 (immutable) フラグや追加の み (append-only) フラグを変更する ことができない。マウントされたフ ァイルシステムの RAW ディスクへの 書き込みができない。 ・ユーザーランドプログラムが /dev/ mem や /dev/kmem を使用してメモリ へのダイレクトアクセスを行ったり、 10 ポートを直接操作したりするよう なハードウェア資源を直接扱うよう な行為が禁じられる。 ・ LKM モジュールの Load/Unload がで きない。 ・通常マルチューザーのときはこのモ ードとなっている。 OpenBSD 、 BSD/ OS ではインストール直後のマルチュ ーザーモードでこのレベルになる。 NetBSD IP-based KerneI Debugger がイ更用でき ない (see man ipkdb) 。 init プロセスのトレース / デバッグがで きない。 procfs で init プロセスを操作すること Aperture ドライバとセキュリティレベルについて 本来ハードウェアの操作はすべてカーネルに依頼し イスドライバが実際の操作を行うのが正しい動作であ・ / OS による保護機能を生かすためには、たとえ r001 権限、って いようともユーザーランドのアプリケーションがハドウェア を直接操作することは認めるべきではない。そ . 、に関て は X サーバー等もその例外ではないが、特に i38 アキテ チャにおいてはさまざまな仕様のビデオチ、 いるためにテパイスドライバを OS 側、意きてしを、とし う事情もあり、 x サーバー側で直ハードウェの作を っているのが状である。 デバイスドライバを経由せずに実メモリ等ハト を直接操作するためには、セキュッーイレルで資源 された状態では不可能である。そのためはリー による保護を無効にしたり、 Aperture ドイバによって穴 け道を作ったりして対応している。セキリテレベルによ る保護を無効にするよりは、 Aperture ドライを使用するこ とで次のような点でのメリットがあ ・セキュリティレベルを上げることによっ得られる保護機 能の多くを利用することができる。 ・ Aperture ドライバを経由して実メモ直接アをスでき るプログラムは一つだけに制限 のため - またセキュリティという点ではないが、番外として次のメ えは既に X サーバーが利用しているのあ ラムは実メモリへの直接アクセスは、きなよる 注 3 というよりも、その方が一般的かもしれない。 グ 丿、、トもある ( これは FreeBSD のコードより移植されたもの る ) 。 近の A p e rt u re ドライバであれば、 K 6 系や P 6 系 entiumPro 、 PentiumII 等 ) 以降等の CPU のライトコン で バを使用するとしても、程度の差はあるがセキュリティ面を 状ではセキュリティレベルを落すとしても Aperture ドライ , らような問題はなくなっていく筈である。しかしながら、 を行ラーヾイスドライバが実装される等の状況の変化があれ - な状冫である。今後、 OS 側に各種ビデオチップへの操作 が、デスクップ用途等では今や X 環境は必須とも言えるよ られるサ / ・用途等では X サーバーは不要なことが多い注 3 少まう。特にセュリティが重視されるようなケースが考え X サーバー ) の利用ができなくなって i386 等は XFree8 用しないとう法をとることになる。しかしその状態では 丿ティレベルにる保護を有効にし、 Aperture ドライバも使 、い。現状でセキュリティ面を重視するのならば、セキュ ゞ減る / セキュリィ的な穴が小さくなるというレベルに過ぎ なかというそういうわけではない。あくまでも問題点 Ape 「 e ドイバを利用すれば、セキュリティ的な問題は ーング機能を利用できる。 2000 NO. 6 BSD magazine 犠牲にしていることは理解しておかなければならない。 047

6. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

フロジェクト短信 BSD/OS の近況 BSDI Japan もありますが、再掲すると、以下の通りです。 の新機能は、前回の BSD magazine の Usenix の BOF 報告に バージョン 4.2 のべータ版が一部配布されています。 4.2 BSD/OS 4.2 (beta) に注目したいと思います。 に何か報告できることがあれば、と思います。今後の展開 では、記事にできる材料を持ち合わせていないので、次回 BSDI Japan が発足したようです。残念ながら、現時点 ・ VLAN ・ IPsec/IPv6 は、 kame のスタックに ・ IPFW の機能強化 ・デバイスドライバの強化 FAT32 (OpenBSD) 、 vfork()/sfork() 、 ・ LAP は RedHat 6.2 べースに ・ Java 2 SDK ( 1.2 ) 、 JRE 、 JDK ・ gcc 2.95.2 ・ LPRng の導入 ・ SPARC 版の同時リリース iProf 手元に、 SPARC 版も来ています。今 SPARC 版を試す時 間がないのですが、なかなか調子良く動いているようで す。 i386 版を当社で c 。 mpaq ML370 にインストール試験して います。快調に動作しています。 おそらく、 BSD magazine の次号の出版前には、リリー スされているでしよう。 鈴木茂哉 / s 衂 & に浦 shigeya@foretune. CO. JP んが、近々出荷されることになるでしよう。 す。国内での配布の時期については、まだハッキリしませ 11 月 29 日に、 BSD/OS 4.2 が出荷開始になったようで 速報 : BSD/OS 4.2 出荷開始 pchar コマンドの setuide•ットを削除 ty を修正。 bugf ⅱ er のセキュリティ上の問題を修正。 、 /etc/securl 大きなファイルをより効果的に扱えるように ・ M410-035 compaq SmartRAID ドライバのいくつかの問題を修正 ・ M410-034 ( サポート契約が必要 ) テルの InBusiness カードのサポート 認識できない問題を修正。 82559ER 、 82562 およびイン PHY ドライバ ac101p を追加。 3C359 の MAC アドレスを ネットワークカード SMC9432TX をサポートするための ・ M410-033 ( サポート契約が必要 ) を排除 compaq smart RAID ドライバが原因でハングする可能性 ・ M410-032 ( サポート契約が必要 ) を排除 busy page at termination" でカーネルか panic する可能性 ・ M410-031 ( サポート契約が必要 ) screen のセキュリティ上の弱点を修正 ・ M410-030 き出してみます。 開されています。 M410-030 以降の修正内容について、書 2000 年 11 月 13 日の時点で、 M410-035 までのパッチが公 ′、ツチ 220 BSD magazine 2000 No. 6

7. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

かないのか、を追求するまえに動く環境を整備しなければ 話がはじまらないので、新しいマシンを調達することにし 筆者の手元の環境は AT 仕様の 440FX を使ったマザーボ ードに CPU として PentiumPro をのせていた。メモリは EDO である。ところが、 440BX のマザーボードは ATX 仕様で CPU は Celeron か Pentium で、メモリはたいてい SD ー RAM で ある。すなわち、マシンの基本部分はほとんど総入れ替え になってしまう。 Darwin 以外にさしたる必要があったわけ でもなく躊躇したものの、「これも潮時」と思い直して一 式あらたに調達することにした。 Darwin は新しい環境で何の問題もなく起動した。チッ プセットが同じでも微妙な違いで動かない可能性も考えら れたのだが、ひとますは安心である。 Ethernet pc で起動するようになったので、つぎは Ethernet である。 Darwin がサポートしているなかで使いやすいのは lntel の EthernetExpress シリーズだろう。このシリーズはずいぶん 前から生産がつづけられており、製品は数種類にわかれて いる。 動作を確認したのは「 IntelPro / 100 + マネージメント・ア ダブタ」という製品名で売られているもので、 Ethernet コ ントローラとして 82559 を搭載している。メーリングリス トに流れた情報によると、これ以前の世代にあたる 82558 や 82557 といったコントローラを搭載したカードも動作す るとのことだった。しかし、筆者の手持ちの 82557 を試し たところうまく動かなかった。メーリングリストに報告し たところバグと確認されたので、いすれ修正されるだろ つ。 ドライバはカーネルのプロジェクトである xnu の iokit/ Drivers/network/drvInte182557 にソースがあるほか、プロジ ェクト IOKitExampIes にも ExampleInte182558 という別のコ ードによるサンプルドライバがある。 pc 用としては AppIe が本格的に対応の姿勢をみせている唯一のネットワークイ ンターフェイスである。 他のネットワークインターフェイスについてもサポート したいという動きはあるのだが、 I/O Kit というこれまでに なかった枠組みでドライバを開発するのは手間暇がかか る。土台が異なるとはいえ、フリー UN Ⅸの各種ドライバ が参考になることはまちがいないので、ドライバ開発の初 心者にとってちょうどいい腕試しかもしれない。我と思わ ん読者はせひ参加されたい。 180 BSD magazine 2000 NO. 6 App 厄の対応 これまでみた Darwin on lntel の作業は実質でみるとほん のちょっとしかない。いわば、 AppIe がつけておいた筋道 をあとからさがしだしてたどっただけである。 特に、コンソールのパラメータを指定しておく話などは、 App1e 内の開発者がひとこと情報をつたえてくれれば、何 か月も前に解決していたはすである。 チップセットにより振る舞いが違うことに気がついた筆 者は、開発者のメーリングリストに、 Darwin onlntel はど ういった構成を参照すべきか質問した。しかし、繰り返し ても Apple 内から積極的な回答はなかった。 Apple 内にあるはすの情報が開発者になかなかとどかな い現状では、ふたたび社外の開発者が無駄な労力をそそぐ はめにおちいる可能性は非常に大きい。これがはたして本 当に Apple の標榜する「オープンソースプロジェクト」の 名にふさわしいのか、筆者は開発者のひとりとして疑問に 感じざるをえない。 以前も指摘したように AppIe 内部では Darwin カーネル は、新製品に対応するコードや、供給元との契約上外部 に公開できないデバイスドライバなどをふくめて作業が進 められている。社外の開発者が参照できるのは非公開部分 をとりのぞいて再構成したものである。このような構図が あると Apple 社内と社外とでカーネルにとりくむ人々の作 業が協調しにくいのは必然といえる。なお、こういった事 情のからまない他の大部分のプロジェクトでは話はもっと ずっと円滑に進んでいるようだ。 Darwin on lntel についてはその後、 CD-ROM から boot で きるインストーラを作成しよう、という話がばちばちでて いた程度で、現在は停滞している。 Apple から組織的な協 力の得られない現状では残念ながらしかたのないところだ ろう。 Apple への働きかけもふくめ、こういった状況を打 破するパワーをもった人材の登場を期待したいところであ る。 この結果から、 Darwin のシステム側に問題があることが ぐり、 XFree86 側の処理には問題ないところまで確認した。 するとうまくいかない。そこでどこに障壁があるのかをさ なっていた。ところが、実際に XFree86 から利用しようと をみてみると、設計上は 2 ボタンのマウスを扱えるように スが利用できなかった。当時の Darwin のイベントシステム 前回紹介した Darwin 用 XFree86 では、複数ボタンのマウ

8. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

FreeBSD(98) プロジェクト 40R - Re 01 ERRATA 用になっているほかは、サイズの関係でⅵ工デイタのかわ ズのⅱ xit. Ⅱ p が添付されるようになりました。 fdisk が PC98 きないマシン向けに FreeBSD ( 98 ) 用の 1.2MB (2HC) サイ 1.44MB (2HD) サイズのフロッピーディスクを利用で していただけると助かります。 叩 m を利用してみようという方はパッチを当てて動作報告 しようとすると現状の FreeBSD(98)4. x では panic します。 以下に置かています。パッチを当てない状態で叩 m を利用 unofficial なパッチとして叩 m ドライバのパッチが tools98 コン等へのインストールに活用してください。 インストーラが PC ー card をサポートしました。ノートパソ をお持ちの方、もうしばらくお待ちください。 Rev01 からのサポートとなる予定です。該当するデバイス にも入っていません。次にリリースが予定されている 4.2R - もと書きましたが、結局入りませんでした。 4.1. IR - Rev01 りません。前回記事で snc ドライバが 4. IR - Rev01 に入るか 今回のリリースでは新たにサポートされたデバイスはあ す。 に 4. IR を組み合わせたりすることはしないようお願いしま で、 4. IR - Rev01 に 4.1. IR を組み合わせたり、 4.1. IR - Rev01 3.5. IR の場合と違って 4.1. IR と 4. IR の違いは大きいの announce—jp/575 http ://home.jp.FreeBSD.org/cgi-bin/showmail/ ウンスは以下の URL で見ることができます。 10 月 26 日に 4.1. IR - Rev01 がリリースされています。アナ 4 れ 1 R-RevO 1 Rev01 以降に移行するとよいでしよう。 で 4. OR - RevOI を利用している人は、すみやかに 4.1. IR - リリースである、 4. IR ー Rev()1 や 4.1. IR - Rev()1 が出ているの 用できないという問題が記述されています。すでに新しい bs ドライバのバグとインストール時に adv ドライバを利 4 .0—RELEASE/98readme/Errata98. txt ftp: //daemon.jp.freebsd.org/pub/FreeBSD-PC98/dists/ す。以下の URL から取得することができます。 8 月 23 日に 4. OR - Rev01 ERRATA r01 が公開されていま フロジェクト短信 下保敏和 / K 勧。ん kaho@elam.kais.kyoto-u.ac.jp 中身がありませんが、これから大きく育てていきましよう。 て見やすくしたものがメインになっています。まだあまり 現時点では FreeBSD ( 98 ) 付属のドキュメントを html 化し でくださいね。 録してくれるはすです。 majordomo のコマンドは送らない いう内容のメールを送ってください。管理人さんが手動登 doc@jp.freebsd.org/ に、「わたしを登録してください」と に参加する場合はメーリングリスト本体であるく feebsd98- freebsd98-doc メーリングリストが開設されています。これ またこの公式ページの維持管理のために新たに http://www ・ jp.freebsd.org/pc98/ ージが誕生しました。 以下の URL で FreeBSD(98) プロジェクトとしての公式ペ FreeBSD(98) プロジェクト公式サイト うな初心者の方はご遠慮ください。 う場所なので、ソースへのパッチの当て方もわからないよ 的な質問をする場所ではなく開発に関係する話題を取り扱 し、このメーリングリストはインストールの仕方等の一般 <Majordomo@jp.freebsd.org/ 宛てに送ってください。ただ 「 subscribe FreeBSD98-testers 」とだけ書いたメールを FreeBSD98-testers ML へ参加する場合は、本文に で興味のある方はメーリングリストへ参加してください。 testers メーリングリストでテスト中だろうと思われますの ースされることはないと思われます。ちょうど FreeBSD98- FreeBSD(98)4.2R-Rev01 は本書が出版されるより前にリリ 本家ではすでに 4.2R がリリースされていますが、 1.44MB サイズのディスクに書き込んでください。 サイズのプートディスクを使う場合は、 mfsroot. flp も イズになっています。たとえば kern144. flp のような 1.44MB (2HC) サイズで他のイメージはすべて 1.44MB (2HD) サ ましたが、今回から kern. flp 、 mfsroot. flp のみが 1.2MB ています。従来は 1.2MB (2HC) サイズのみ提供されてい プート用フロッピーディスクイメージの種類が変更され 行 xit. flp を利用してもかまいません。 イズを扱うことができるマシンでは、従来通り pc - AT 用の りに ee 、 ed 工デイタが入っています。 1.44MB (2HD) サ 2000 NO. 6 BSD magazine 203

9. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

この結果から、 USBDAQ は入力用パルク端点をふたっ、 と同様、 usbd_close—pipe で行う。 出力用パルク端点をひとつ持っていることがわかる。デバ バルク転送方式ではパイプを作成しただけでは意味がな イスに付属している資料によれば、 USBDAQ は端点 3 から く、実際にバルク転送を行うための関数を用意しなければ コマンドおよびデータを送信、端点 4 からデータおよびコ ならない。 usbd-bulk-transfer というサンプル実装が マンドの実行結果を受信する仕組みになっている。端点 2 sys/dev/usb/usbdi-util. c に用意されているが、今回はあえて はバックグラウンドでサンプリングを行うときに利用する。 usbdaq-bulk-xfer という関数を作成した。 こうすることで、サンプリングしながら、デバイスの制御 この関数では、まず転送用パッフアに、転送データ列お もする、といった作業の並列化がデバイスレベルで行える よびそのバイト長、タイムアウトまでの時間、転送完了時 ようになっている ( サンプリング中は実行できるコマンド の後処理関数などを格納する。次に、予期せぬデータ列 に一部制約がっく ) 。 へのアクセスによるデータ列の破壊を防ぐために割り込み クラス、サプクラス、プロトコルがすべてゼロであった をいったん止め、データの転送を開始する。データが転送 り、端点 3 から送信されるコマンド群は、 USBDAQ 固有の 中であれば、データの転送が終わるまで待つようにし、デ ものであったりするが物、デバイスに詳細な解説書が付い ータ転送が完了するか、もしくはエラーが発生したら、止 ているので、デバイスドライバを作成するにあたってなん めていた割り込みを元に戻し、今回のデータ転送の状態を ら問題はない。資料によれば、 USBDAQ のコマンド群は、 取得して返す。万が一工ラーが発生した場合は、パイプが UDCP (USBDAQ control ProtocoI) と呼ばれ、基本的に つまっている可能性があるので、パイプの状態をクリアし コマンドの送信、実行結果の受信、がセットになっている。 ておく。また、タイムアウトまでの時間であるが、 USB コマンドの解説は、必要なものをそのときに説明するだけ DAQ の場合かなり短くてもよいが、今回は安全のために長 にとどめる。各コマンドは詳細は、デバイス付属の資料を めの 3 秒と設定しておいた。 参照していただきたい。 次に、転送完了時の後処理関数 usbdaq-bulk-xfer_cb で では、さっそくデバイスドライバを作成していくことに あるが、 USBDAQ の場合、転送完了時には何もすること しよう。 がないので、転送終了を待っている場所まで戻るだけでよ い。必要があればここに適切な処理を記述すればよい。た とえば、 umass の場合、 umass-bulk-state という関数で転送 後の処理を行っている。 umass は USBDAQ とは違い、状態 遷移を事細かに制御しなくてはならないため、非常に複雑 で一見しただけでは何が何だか全然わからない。詳細は次 回以降で解説する予定である。 さて、これだけあれば USBDAQ 用ドライバはもう書けた も同然であるので、一気に仕上げてしまうとしよう。 れつつ、ぶろぐらみ バルク転送を行うために必要な作業は、 1. バルク転送パイプの作成 2. 転送データ列の構築および送信用関数の用意 3. 転送終了時の後処理関数の用意 の三つである。 バルク転送パイプの作成は usbd_open_pipe で行う。バル ク転送パイプの場合は、割り込み転送パイプとは違い、パ USBDAQ 用デバイス名は、 usbdaq とする。リスト 1 が今 イプを作成しただけでは何もデータは流れない ( バルク転 回作成した usbdaq ドライバであるが、前回までに紹介した 送の定義から当然であるが ) 。 usbd-open_pipe には端点ア ujoy ドライバと基本構成は同じであるので、必要な部分だ ドレスとパイプの利用形態などを指定する。パイプの利用 けを解説する。紙面の都合上、読みにくい部分もあるが、 形態には、排他利用するかどうか、などが指定できる。 添付の CD に今回のソースが収録されているので、そちら 不要になったバルク転送パイプは、割り込み転送パイプ を見るのもよいだろう。 注 1 これらは一般的に、開発者の間では非常に嫌われる傾向にある。デバイスに関する情報が何も得られないからである。目新しいデバイスを見付けて は購入し、 udesc-dump にかけてガッカリ、を日夜繰り返している開発者がいるとかいないとカ 。世の中には、何もわからなくてもコマンド体系 を推測する奥義があるとかないとカ 164 BSD magazine 2000 NO. 6 u B ロ AQ 専用デバイス朽イバ

10. BSD magazine No.6 BSDを組み込め! ; セキュリティと暗号技術を考える

フロジェクト短信 NetBSD-current JNUG/ インターネット総合研究所 Updates 許先明 / 〃 eo SeonMeyong seirios@jp.netbsd.org 前号で NetBSD-I. 5 release のプランチが切られたと報告 えられました。 しましたが、ようやっと ReIease されました。また、その lsu は logical storage unit の略で、 ca は Compaq Array disk 専用デバイスドライバでしたが今後この種類のデバイス 直前でしたが NetBSD -1.4.3 も release されました。 は lsu に統合されていくのではないかと思われます。 主な変更内容 ・ EISA および PCI の最新の Compaq Disk Array コントロー ラが cac でサポートされました。 カーネル ・ psude-device である pty の数が sysctl で制御できるように ・ 3ware Escalade family の RAID controller がサポートされ ました。 なりました。 ・ Symbios Logic/NCR 53c8xx SCSI driver (siop) の低レベ これまでは kernel の設定ファイルで数を指定していまし たが、 kern. maxptys に利用する pty の最大数を定義するこ ル割り込みおよび PCII 。 ad に対して修正がなされました。 また、タグ付きコマンドのキューイングがサポートされ とで pty 数を自由に増やしたり減らしたりできます。ま た、この作業とともに、 pty のリソースがオンデマンドで割 ました。 ・ FreeBSD から bktr ドライバ (Brooktree 848 互換の TV り付けられるようになりました。 card ドライバ ) が取り込まれました。 ・ , 。。、 0 ー , 0 = ~ 、一 0 ー 0 ~ 0 、加 0 りまし : 。 ・さまざまな Laptop コンピュータに組み込まれている これは、 NFS client から NFS v3 や NQNFS に関する部分 を取り除くためのオプションです。 NeoMagic 256 AC ' 97 オーディオドライバがサポートさ ・ b 。。 t 時の flag に " - v " と " - q " が追加されました。 れました。 ライブラリ "-v" は bootverbose の意味で、 b 。。 t 時に今までよりも細か い情報が出るようになりました。 "-q" は bootquiet の意味 libintl ・ Citrus project の xpg4dl から libintl が取り込まれました。 で、逆に情報が出ないようになります。 この libintl は、 GNU プロジェクトの GNU gettext に含まれ マシン依存系 る libintl と完全な互換性がある、 BSD ライセンスでの実 i386 po は 装です。なお、 gettext ( 1 ) などのツールはまだ実装されて ・ bootblock が RAIDI で mirror されている場合にその mirror されている Disk から b 。。 t できるようになりました。しか いません。 し、現在のところまだ installboot はできません。 UserIand Program ほか システム系 mvme68k po ・ m 。 unt において、引数にデバイス名とマウントボイント ・ MVME162-LX 200 / 300 シリーズのポードカサポートされ が指定された場合、 disklabel にある fstype の確認をする ました。 ようになりました。 newsmips po ・ pppd のバージョンが 2.4.0 になりました。 gpl code のクリ ・ N 田一 5852A 100Base-TX Ethernet カードカサポートされ ーンアップや新しい tty の概念の追加、 multilink に関する ました。 API のサポート ( NetBSD には実装されていませんが ) が ネットワーク関連 なされています。 ・ 802. IQ virtual LAN (VLAN) がサポートされました。 ・ Ethernet で「 promiscuous mode 力、つ unicast かつ自分宛で ・ dhcpd が version 3 beta 2 パッチレベル 9 になりました。 ・ sendma ⅱが 8.11.1 になりました。 はない」バケットに対するチェックコードが ether-input に移りました。これによって、 Ethernet ドライノヾは受信 その他 ・ watchdog タイマーのフレームワークが追加されました。 したフレームを常に ether ー input に渡すことになりました。 デバイスドライバ PC-Weasel シリアルコンソールポードの watchdog タイマ ーがサポートされています。 ・ compaq の Array Disk コントローラが lsu から ca に置き換 214 BSD magazine 2000 NO. 6