エンジョイ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

関連記事

E: Internal Error, No file name for libssl1.0.0

Ubuntu 12.04機を(も)使っています。動かなくなると困る一台なので、なかなか更新する勇気がなくて、未だに12.04です。 先日ひさびさにupdateしようと思って、apt-get dist- …

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

Linuxのカーネルソースをあれこれいじるにあたって、実験用のLinux環境が欲しくなり、新たにUbuntuの仮想マシンを作ることにしました。 で仮想化ソフトに何使うか考えたのですが、自宅ではWind …

Hyper-V 対 VMware Player対決

先日、バーチャルマシン上でプログラムをビルドすると時間がかかってしようがない。ビルドするならやっぱネイティブマシンだよね、と話している人がいました。 その人が使っているのはホスト型の仮想化だったのです …

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

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

OOM Killerの発動を検知したい

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