DSFでデバイスをシミュレートする


Linuxカーネルのテスト例を作成するのは簡単です.通常は特定の範囲を要求するか、広い範囲を要求するかのどちらかです.ただし、ユーザースペースでテストを行う場合、テストが困難な場合があります.実行されるブランチコード、存在しないデバイス、エラーパスコードなどのテストが困難です.
Device Simulator Framework(DSF)は、カーネル空間からユーザ空間への入出力制御インタフェースを有し、テストケース開発者がカーネルの特定のターゲット領域を実行できるようにする問題を解決することができる.デバイスが存在しない可能性がある場合、DSFは特にデバイスドライバカーネルコードの実行に役立つ.DSFは、実際のデバイステストに取って代わることはできませんが、ドライバコードのデバッグとテストに大きく役立ちます.
DSFはまた、ユーザー/カーネル空間通信用の入出力制御インタフェースを学ぶ必要がないため、テスト例の開発を加速させることができます.
これまでは、最近発表されたLinux 2.5のみがサポートされている.xxから現在の2.6.xx間のカーネルバージョン.
はじめに
まず、DSFコードを含むLinux Test Project(LTP)テストキット全体をダウンロードすることをお勧めします.Linux Test Projectは、IBM Linux Technology Center(LTC)が他の組織と提携しているプロジェクトです(参考資料のリンクを参照).
アーカイブファイルを解凍するとtestcases/kernel/device-drivers/dev_sim_frameworkディレクトリの下に、ユーザー/カーネルテンプレートテストコードが表示されます.LTPテストキットをコンパイルしてインストールし、DSFディレクトリに切り替えます.DSFディレクトリに入るとkernel_が表示されます.スペースディレクトリとuser_スペースディレクトリ.対応するカーネルモジュールとユーザースペースファイルは、それぞれこの2つのディレクトリにあります.この2つのディレクトリに切り替え、makeを実行してテンプレートをコンパイルします.

ioctlリクエスト


ioctl関数は、専用ファイルの最下位デバイスパラメータを処理します.具体的には、端末などの多くの文字専用ファイルの動作属性はioctl要求によって制御することができる.
トップに戻る
テンプレートの使用
テンプレートのコンパイルが完了すると、ユーザースペースコードを実行する前に、insmodまたはmodprobeでカーネルモジュールをロードできます.user_に切り替えspaceディレクトリ、ユーザー空間コードを実行します.テンプレートは登録されたカーネルモジュールと通信して返すだけなので、ユーザーコードは実行され、迅速に結果が返されます.
テンプレートを変更して所望のカーネルコードを実行するのも比較的簡単です.しかし、カーネルプログラミングの知識が必要です.EXPORT_SYMBOLラベルに定義された関数は、すべてのカーネルコードに公開されており、カーネルコードを変更することなくカーネルモジュールで直接呼び出すことができます.また、カーネルソースコードを手動で変更して、新しいカーネルを再コンパイルしてロードした後のテストのための追加の関数をエクスポートすることもできます.
トップに戻る
DSFアプリケーション
次のコードは、デバイスタイプテストをどのように実装するかの例です.
リスト1.仮想デバイスコード
   switch(cmd) {
     case LTP_OPTION1: rc = test_option(); break;
     case PCI_ENABLE:  rc = pci_enable(); break;
     default:
      printk("Mismatching ioctl command
"); break; } . . . /* * pci_enable * enable a pci device so that it may be used in * later testing in the user test program */ static int pci_enable() { int rc = 0; struct pci_dev *dev = ltp_pci.dev; /* check if can enable the device pointer */ if(!dev) { printk("tpci: dev is NULL
"); return 1; } if( pci_enable_device(dev) ) { printk("tpci: failed to enable pci device
"); rc = 1; } else { printk("tpci: enabled pci device
"); rc = 0; } return rc; }

この例では、pciカーネルAPIを呼び出す「仮想」PCIデバイスを有効にします.この仮想デバイスは、他のテストにも使用できます.
トップに戻る
終わりの言葉
Linuxカーネルとデバイスドライバの開発者を経験している場合は、DSFテンプレートを使用すると、さまざまなテストに使用できるため、テスト例をより迅速に開発し、一貫性を確保できます.また、カーネルの特定のターゲット領域を実行することもできます.これにより、典型的なユーザー空間テスト例がカーネルコードを実行するときに、目的がなくなりません.
Linux Test Projectの目標は、デバイスドライバ開発者がデバイスユニットのテストを標準化し、Linuxカーネルにおけるデバイスドライバの安定性を向上させることです.この点を考慮して、ようこそ[email protected]を使用した経験を連絡して共有してください.
参考資料
  • この文書のdeveloperWorksグローバルサイトの英語の原文を参照してください.
  • Linux Test Project(LTP)は、IBM's Linux Technology Centerと一部の業界パートナーとの提携プロジェクトです.
  • IBM Linux Technology Centerは昨年、2.4カーネルに対して極めて厳しい全面的な基準テストを行った.Linuxの信頼性(developerWorks,2003年12月)をテストする文で、彼らの仕事の成果を示した.
  • IBM Linux Technology CenterのPaul Larsonは2.4から2.6カーネル開発における改良(developerWorks,2004年2月)で2.6カーネルの製造過程で使用されたツールとテストを明らかにした.
  • Linux at IBMサイトは、IBM全体のLinuxニュースと情報を報道することを特徴としています.
  • IBM Systems Journalでは、IBMがソフトウェアテストをどのように行うかについて多くの記事を読むことができます.
  • IBMはまた、Performance Management、Testing and Scalability Servicesを提供しています.
  • Linux Kernel ArchivesはLinuxカーネルソースコードの最も主要なサイトである.また、初級から高級までの多くの情報を編集し、リンクしています.
  • developerWorks Linuxセクションでは、Linux開発者のためにより多くの参考資料を見つけることができます.
  • Developer BookstoreのLinuxエリアでは、Linuxに関する多くの本を見つけることができます.

  • 作者について
    Martin RidgewayはIBM Linux Technology CenterのLinux Test Projectのチームリーダーです.昨年、彼が従事したいくつかのプロジェクトにはLinux Test Projectとカーネルコードカバー分析が含まれています.に合格[email protected]彼に連絡する.