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

関連記事

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

前回、仮想マシンにUbuntu 14.04をインストールしました。 続いて環境整備。 まずはIPアドレスをDHCPから固定アドレスに変更。うちの宅内LANではSSHしたりリモートデスクトップしたりする …

Hyper-V 上の Ubuntu で非レガシーなネットワークアダプターを使えた

以前 Hyper-V上にUbuntuの仮想マシンを作りましたが、ネットワークアダプターにはレガシーネットワークアダプターを選択しました。Ubuntuがレガシーでない方のドライバーを持っているのか確証が …

Ubuntu 14.04 64bitで32bitアプリを使う

新たにVMを作ってUbuntu 12.04から14.04に乗り換えたわけですが、セットアップしていて最初に困ったのは、12.04で使っていた32bitアプリを14.04上で動かそうとしたとき。 Ubu …

Ubuntuのカーネル再構築

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

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

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