ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 10 8/11 Information Library (日本語) |
パート I Solaris プラットフォーム用デバイスドライバの設計
21. ドライバのコンパイル、ロード、パッケージ化、およびテスト
22. デバイスドライバのデバッグ、テスト、およびチューニング
コンソールフレームバッファードライバでの視覚的な入出力インタフェースの実装
コンソールフレームバッファードライバでのポーリングされた入出力の実装
アクティブなシステム上でのコンソールフレームバッファードライバのデバッグでは、問題が発生する場合があります。
システムブートの早い段階で検出されたエラーでは、コアダンプが生成されません。
エラーまたは通知メッセージが、画面上に正しく表示されない可能性があります。
USB キーボードの入力が失敗する可能性があります。
この節では、コンソールフレームバッファードライバの開発、テスト、およびデバッグに役立ついくつかの提案を示します。
ioctl コマンドをテストするには、ユーザーアプリケーションから呼び出し可能な追加の ioctl エントリポイントを作成します。引数を適切にコピーする必要があります。ユーザーのアドレス空間との間でデータを転送するには、ddi_copyin(9F) ルーチンと ddi_copyout(9F) ルーチンを使用します。次に、描画、スクロール、およびカーソル動作を検証するためのアプリケーションを記述します。これによって、これらの ioctl コマンドの開発またはテスト中にコンソールが影響を受けることはなくなります。
ioctl コマンドが正しく機能することを確認するには、システムをブートしてログインします。prstat(1M)、ls(1)、vi(1)、man(1) などのコマンドを実行したときに予期した動作が得られるかどうかをチェックします。
ANSI カラーが正しく機能することを検証するには、次のスクリプトを実行します。
#!/bin/bash printf "\n\n\n\e[37;40m Color List \e[m\n\n" printf "\e[30m Color 30 black\e[m\n" printf "\e[31m Color 31 red\e[m\n" printf "\e[32m Color 32 green\e[m\n" printf "\e[33m Color 33 yellow\e[m\n" printf "\e[34m Color 34 blue\e[m\n" printf "\e[35m Color 35 purple\e[m\n" printf "\e[36m Color 36 cyan\e[m\n" printf "\e[37m Color 37 white\e[m\n\n" printf "\e[40m Backlight 40 black \e[m\n" printf "\e[41m Backlight 41 red \e[m\n" printf "\e[34;42m Backlight 42 green \e[m\n" printf "\e[43m Backlight 43 yellow\e[m\n" printf "\e[37;44m Backlight 44 blue \e[m\n" printf "\e[45m Backlight 45 purple\e[m\n" printf "\e[30;46m Backlight 46 cyan \e[m\n" printf "\e[30;47m Backlight 47 white \e[m\n\n"
ポーリングされた入出力インタフェースは、次の状況でのみ使用できます。
L1+A のキーストロークシーケンスを使用して OpenBoot PROM に入る場合
kmdb(1) などのスタンドアロンデバッガを使用してシステムをブートする場合
システムがパニック状態になった場合
ポーリングされた入出力インタフェースは、ブートプロセス内の特定の時点でのみ使用可能になります。システムが稼働する前に OpenBoot PROM から発行され、ポーリングされた入出力要求は描画されません。同様に、コンソールが設定される前に発行された kmdb プロンプトは描画されません。
ポーリングされた入出力インタフェースをテストするには、L1+A のキーストロークシーケンスを使用して OpenBoot PROM に入ります。ポーリングされた入出力インタフェースが使用されていることを検証するには、OpenBoot PROM の ok プロンプトで次のコマンドを入力します。
ok 1b emit ." [32m This is a test" 1b emit ." [m"
次の文章の内容が当てはまる場合、ポーリングされた入出力インタフェースは正しく機能しています。
上のコマンドを実行すると、This is a test というフレーズが緑色で表示される。
OpenBoot PROM が引き続き正しく機能している。
スクロールが予期したとおりに実行される。
カーソルが正しく表示される。
システムに繰り返し入って続行できる。
ビデオモード変更コールバック関数が正しく機能するかどうかを判定するには、システムにログインし、fbconfig(1M) を使用して解像度とフレームバッファーの深さを複数回変更します。コンソールにテキストが引き続き正しく表示される場合、ビデオモード変更コールバック関数は正しく機能しています。異なる画面サイズに対応するためにカーネル端末エミュレータがフォントサイズを調整する可能性がありますが、それはコンソールフレームバッファードライバにとって重大な問題ではありません。
X Window System とコンソールフレームバッファードライバが相互に正しく作用しているかどうかを判定するには、X Window System のビデオ解像度とコマンド行の解像度を異なる方法で変更しているときに、X Window System とコマンド行を複数回切り換えます。X Window System が終了したときにコンソール文字が正しく表示されない場合は、X Window System がドライバのコンソールコードにビデオモードが変更されたことを通知しなかったか、またはドライバがカーネル端末エミュレータのビデオモード変更コールバック関数を呼び出さなかったかのどちらかです。
ブート中に、システムがカーネル端末エミュレータと互換性があるフレームバッファードライバを見つけられないか、または正常にロードできなかった場合、システムは /var/adm/messages にメッセージを送信します。これらのメッセージを監視するには、別のウィンドウで次のコマンドを入力します。
% tail -f /var/adm/messages
ドライバをデバッグしているときの USB に関する問題を回避するには、EEPROM の input-device NVRAM 構成パラメータが、キーボードの代わりにシリアルポートを使用するように変更します。このパラメータの詳細については、eeprom(1M) のマニュアルページを参照してください。