link もっと前
   2016年 4月 21日 -
      2016年 4月 12日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

Debian で Linux カーネルモジュールをビルドしたい(スマート編)

昨日(2016年 4月 15日の日記参照)のやり方は、やはり一般的では無かった(1時間以上掛かるし…)らしく、スマートなやり方を教えていただきました。

apt で Linux のカーネルヘッダを持ってくる
# apt-get install linux-headers-3.16
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
Note, selecting 'linux-headers-3.16.0-4-all' for regex 'linux-headers-3.16'
Note, selecting 'linux-headers-3.16.0-4-amd64' for regex 'linux-headers-3.16'
Note, selecting 'linux-headers-3.16.0-4-common' for regex 'linux-headers-3.16'
Note, selecting 'linux-headers-3.16.0-4-all-amd64' for regex 'linux-headers-3.16
'
linux-headers-3.16.0-4-common はすでに最新版です。
以下の追加パッケージがインストールされます:
  cpp-4.8 gcc-4.8 libasan0 libgcc-4.8-dev linux-compiler-gcc-4.8-x86
  linux-kbuild-3.16
提案パッケージ:
  gcc-4.8-locales gcc-4.8-multilib gcc-4.8-doc libgomp1-dbg libitm1-dbg
  libatomic1-dbg libasan0-dbg libtsan0-dbg libquadmath0-dbg
以下のパッケージが新たにインストールされます:
  cpp-4.8 gcc-4.8 libasan0 libgcc-4.8-dev linux-compiler-gcc-4.8-x86
  linux-headers-3.16.0-4-all linux-headers-3.16.0-4-all-amd64
  linux-headers-3.16.0-4-amd64 linux-kbuild-3.16
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
12.7 MB のアーカイブを取得する必要があります。
この操作後に追加で 39.9 MB のディスク容量が消費されます。

(以下略)

カーネルモジュールをビルドしますが、もし /usr/src/linux を見に行ってしまうようなモジュールであれば、ちょっと書き換えが必要です。

カーネルモジュールをビルドする
$ make -C /usr/src/linux M=`pwd`

↓

$ make -C /lib/modules/`uname -r`/build M=`pwd`

昨日の方法と比べると、Linux のソースコードもビルドも要らないし、格段にスマートです。素敵。

でも、カーネルモジュールがヘボくて、カーネル内でクラッシュし、結局 Linux のソースコードにデバッグ printk を埋め埋めしてビルドする羽目になったのはご愛敬です…。

[編集者: すずき]
[更新: 2016年 4月 17日 14:02]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

Debian で Linux カーネルモジュールをビルドしたい

独自のカーネルモジュールをビルドしたかったのですがスマートな方法が良く分からず、力ずくでやってしまいました。

まず apt で Linux のソースコードを持ってきました。apt-get install だけだと /usr/src に tarball が置かれるだけなので、手で展開します。

apt で Linux のソースコードを持ってくる
# apt-get install linux-source-3.16
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  libqt4-dev pkg-config
The following NEW packages will be installed:
  linux-source-3.16
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/83.6 MB of archives.
After this operation, 83.7 MB of additional disk space will be used.
Selecting previously unselected package linux-source-3.16.
(Reading database ... 54876 files and directories currently installed.)
Preparing to unpack .../linux-source-3.16_3.16.7-ckt25-2_all.deb ...
Unpacking linux-source-3.16 (3.16.7-ckt25-2) ...
Setting up linux-source-3.16 (3.16.7-ckt25-2) ...

# cd /usr/src
# ls
linux-config-3.16  linux-source-3.16.tar.xz

# tar xf linux-source-3.16.tar.xz
# ln -s linux-source-3.16 linux

カーネルバージョンを見るか、Debian のカーネルパッケージのバージョンを確認して、適切なカーネルの config ファイルを展開します。

適切な Linux の config ファイルを展開
# cd /usr/src

# uname -a
Linux vbox-blackbird 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux

# cp linux-config-3.16/config.amd64_none_amd64.xz linux/
# cd /usr/src/linux
# xz -d config.amd64_none_amd64.xz
# mv config.amd64_none_amd64 .config

ビルドします。Debian のカーネルコンフィグはやたらめったらドライバをビルドするので、かなりビルドに時間が掛かります…。

Linux をビルド
# cd /usr/src/linux

# make -j 4 bzImage modules
...

ビルドが終わったら、独自カーネルモジュールをビルドします。

独自カーネルモジュールをビルド
# cd /home/username/hoge_module

# make
...

生成された *.ko を insmod して文句言われなければ成功です。

独自カーネルモジュールの insmod 失敗例
# insmod hoge.ko
insmod: ERROR: could not insert module hoge.ko: Invalid module format

こんな風に怒られる時は、昔のバージョンの tarball を展開したときのコードが残っているなど、カーネルのソースコードが古いか、コンフィグを選び間違っていますので、確認しましょう…。

[編集者: すずき]
[更新: 2016年 4月 16日 21:14]
link 編集する

コメント一覧

  • hdk 
    config は /boot に入っていると思いますが、そんなことより、linux-headers-* を入れて /lib/modules/`uname -r`/build/ を使うのが一般的かと...

    dkms というのを使うと今後のカーネルアップデート時に自動で再コンパイルもできるみたいです。 
    (2016年04月17日 02:32:52)
  • すずき 
    >hdk さん
    言われてみれば config って /boot にありますね。
    /lib/modules/`uname -r`/build/ ってそのためにあったのか…。やってみます。ありがとう。 
    (2016年04月17日 13:46:15)
open/close この記事にコメントする



link もっと前
   2016年 4月 21日 -
      2016年 4月 12日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 6/18 16:27

カレンダー

<2016>
<<<04>>>
-----12
3456789
10111213141516
17181920212223
24252627282930

最近のコメント 5件

  • link 17年06月17日
    すずき 「>hdk さん\nApache と cr...」
    (更新:06/18 14:22)
  • link 17年06月17日
    hdk 「Exim は知りませんでしたが conf...」
    (更新:06/18 06:03)
  • link 17年05月03日
    すずき 「>hdk さん\nあー、そうか。やっと言...」
    (更新:05/08 22:55)
  • link 17年05月03日
    hdk 「いやー、ネスト自体は Linux KVM...」
    (更新:05/07 16:05)
  • link 17年05月03日
    すずき 「>hdk さん\n仮想化支援機能をエミュ...」
    (更新:05/07 01:16)

最近の記事 3件

link もっとみる
  • link 17年02月15日
    すずき 「[make の変数名] 日付と何の脈絡もありませんが、Google...」
    (更新:06/18 16:27)
  • link 17年06月17日
    すずき 「[exim4 の設定] サーバの exim4 が IPv6 soc...」
    (更新:06/18 02:29)
  • link 17年06月16日
    すずき 「[ALSA のミキサーと regmap その 2] その 1、その...」
    (更新:06/17 18:29)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報