エンジョイAsobi

スマホとWindowsとLinuxを遊ぶ。

Linux Ubuntu

カーネルモジュールのビルド

投稿日:2014年12月20日 更新日:

前回、OOM Killerの発動を検知するテスト用のカーネルモジュールをビルドしたと書きました。前回は長くなるのを避けてビルド手順を端折ったので、改めて記録しておきます。ここを見ながらビルドしました。

  1. カーネルソースのダウンロード
    ~/kernel>$ apt-get source linux-image-$(uname -r)
    パッケージリストを読み込んでいます... 完了
    依存関係ツリーを作成しています
    状態情報を読み取っています... 完了
    :
     linux-3.13.0/virt/kvm/iommu.c
     linux-3.13.0/virt/kvm/kvm_main.c
    ~/kernel>$

    テストに使ったUbuntuのカーネルソースコードのダウンロードです。~/kernelにダウンロードしました。

    以前カーネルをビルドしたときは、gitで最新のソースをとってきました。今回は今Ubuntu上で動いているカーネルバージョンのソースが必要です。

     

  2. コンフィグファイルのコピー
    ~/kernel>$ cd linux-3.13.0/
    ~/kernel/linux-3.13.0>$ sudo cp /boot/config-3.13.0-43-generic .config
    ~/kernel/linux-3.13.0>$

    今使っているカーネルのコンフィグファイルをコピーしました。

     

  3. カーネルモジュールのビルド準備
    ~/kernel/linux-3.13.0>$ make modules_prepare
      HOSTCC  scripts/basic/fixdep
      HOSTCC  scripts/kconfig/conf.o
      SHIPPED scripts/kconfig/zconf.tab.c
    :
      HOSTCC  scripts/recordmcount
      HOSTCC  scripts/sortextable
      HOSTCC  scripts/asn1_compiler
    ~/kernel/linux-3.13.0>$

    この手順がどうして必要なのかは上記ドキュメントの2.項に書かれています。

     

  4. Modules.symversのコピー
    ~/kernel/linux-3.13.0>$ cp /lib/modules/`uname -r`/build/Module.symvers .
    ~/kernel/linux-3.13.0>$

    カーネル全体をビルドすれば生成されますが、時間短縮のため生成済みのファイルをコピーしました。書き忘れましたがこの仮想マシンを動かしたホストマシンはAM1H-ITX + Athlon5350です。以前書いた通り、このマシンはLinuxカーネルのビルドが格別遅いので、全体をビルドする気にならない。

     

  5. カーネルモジュールのビルド
    ~/work/hookoom>$ make -C ~/kernel/linux-3.13.0/ M=`pwd` modules
    make: ディレクトリ `/home/nashi/kernel/linux-3.13.0' に入ります
      CC [M]  /home/nashi/work/hookoom/hookoom.o
      LD [M]  /home/nashi/work/hookoom/mod_hookoom.o
    :
      CC      /home/nashi/work/hookoom/mod_hookoom.mod.o
      LD [M]  /home/nashi/work/hookoom/mod_hookoom.ko
    make: ディレクトリ `/home/nashi/kernel/linux-3.13.0' から出ます
    ~/work/hookoom>$

    カーネルモジュールのソースファイルhookoom.cと前回掲載したKbuildを~work/hookoomに置きました。そしてこのディレクトリでmake。

     

  6. 最後にカーネルモジュールをコピー
    ~/work/hookoom>$ sudo cp mod_hookoom.ko /lib/modules/3.13.0-43-generic/kernel/
    ~/work/hookoom>$

    しかるべきディレクトリにカーネルモジュールをコピーして完了です。

-Linux, Ubuntu

関連記事

OOM Killerの発動を検知したい

今回はプログラムの話。タイトル通り、LinuxのOOM Killerが発動したことを検知したいという話です。組み込みでLinuxを使っていると、OOM Killerが動き出すこと自体異常事態なので、検 …

Windows 8.1上でHyper-Vを試す ~Ubuntuの仮想マシンを作る(2)~

前回、空の仮想マシンを作るところまで書きました。 (なんか長かった…)。 続いてUbuntuを仮想マシンにインストールします。 Ubuntuのインストールを開始するには、まずHyper-Vマネージャー …

Hyper-Vの動的メモリは本当に動的だった!?

前回、無用なトラブルを避けるつもりで無難な選択をした結果、却ってロクでもない目に遭ったようだという話を書きました。 Hyper-V + Ubuntuなんてメジャーな組み合わせでは、そんなこと気にせずと …

Hyper-VでUbuntu 14.04を試す(1)

ついにリリースされました、Ubuntu 14.04。 実験用にインストールした13.10はともかく、実用に使っていた12.04マシンの調子が最近悪くて。インストールし直したかったけど、あと少しで14. …

Ubuntuのカーネル再構築

実験用に作ったUbuntu13.10の仮想マシン上で、Linuxカーネルの再構築を試しました。 まずカーネルのビルド環境を構築。 元がサーバー版Ubuntuだったので、ビルド環境なんてほぼ何も入ってお …