技術書典6で自作NICドライバ本「ぼくらのイーサネットフレーム!」出します!

4/14(日)に 池袋サンシャインシティ2F 展示ホールD(文化会館ビル2F) で開催される
技術書典6」に「へにゃぺんて(配置:う37)」で出展します!

f:id:cupnes:20190331105303p:plain:h350

新刊については後述(「続きを読む」から)

低レイヤブースまとめ

前回の技術書典5同様、 id:uchan_nos さんが技術書典6で出典している低レイヤブースをまとめて下さっています。

f:id:cupnes:20190331105259p:plain

また、サークル配置図上の各サークルの場所は以下の通りです。

f:id:cupnes:20190331105255p:plain

■ サークル紹介ページへのリンクまとめ(敬称略)

少しでも気になる内容があれば、この機会にぜひお立ち寄り下さい!

新刊について

今回の新刊では、ついに、NICドライバを作ります!

NICPCIで接続されているので、PCIからNICを制御するための情報を取得します。
そして、取得した情報を使用してNICからデータの受信と送信を試します。

本書ではあくまでNICのドライバとして
独自のバイナリ列をオレオレイーサネットフレームとして送信する方法を紹介します。

目次

  • はじめに
    • 本書の構成
    • 開発環境・動作確認環境
    • 本書の PDF 版 /HTML 版やソースコードの公開場所について
  • 第1章 PCI から NIC の情報を取得する
    • 1.1 この章でやること
    • 1.2 lspci コマンドで NIC を確認
    • 1.3 PCI コンフィグレーション空間のアクセス方法
    • 1.4 PCI コンフィグレーション空間から NIC のベンダー ID ・デバイス IDを読んでみる
      • 1.4.1 io_read32()/io_write32() を追加する
      • 1.4.2 定数を定義する
      • 1.4.3 読み出す処理を実装する
      • 1.4.4 実行してみる
      • 1.4.5 関数化しておく
    • 1.5 コマンドレジスタ・ステータスレジスタを確認してみる
      • 1.5.1 PCI コンフィグレーション空間内のレジスタ配置について
      • 1.5.2 コマンド・ステータスレジスタをダンプしてみる
      • 1.5.3 PCI コンフィグレーション空間の割り込み無効ビットをセット してみる
    • 1.6 NIC の BAR をダンプしてみる
      • 1.6.1 PCI コンフィグレーション空間内の位置と BAR の構成を確認
      • 1.6.2 BAR ダンプ処理を作る
      • 1.6.3 BAR からベースアドレスを取得する処理を関数化しておく
  • 第2章 NIC を制御してイーサネットフレームを送受信する
    • 2.1 NICレジスタの操作方法
      • 2.1.1 NICレジスタ値を取得してみる
      • 2.1.2 NICレジスタ値を設定してみる
      • 2.1.3 NIC 関連の割り込み無効化処理を関数化する
    • 2.2 フレームを受信する
      • 2.2.1 NIC のフレーム受信の流れ
      • 2.2.2 各種の定義の用意とバッファの確保
      • 2.2.3 受信の初期化処理を実装する
      • 2.2.4 受信処理を実装する
      • 2.2.5 動作確認
    • 2.3 オレオレフレームを送信する
      • 2.3.1 NIC のフレーム送信の流れ
      • 2.3.2 各種の定義の用意とバッファの確保
      • 2.3.3 送信の初期化処理を実装する
      • 2.3.4 送信処理を実装する
      • 2.3.5 動作確認
  • 付録 A MAC アドレスを取得する
    • A.1 EEPROM へのアクセスを試す
      • A.1.1 EERD の使い方
      • A.1.2 EEPROM へのアクセスを実装してみる
      • A.1.3 動作確認
      • A.1.4 補足 : EEPROM アクセスができた場合の MAC アドレス取得方法
    • A.2 受信アドレスレジスタから取得する
      • A.2.1 動作確認
  • おわりに
  • 参考情報
    • 参考にさせてもらった情報
    • 開発リポジトリ
    • 本シリーズの過去の著作