6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linux: カーネルモジュールのビルド時にコンパイルオプションを追加したい

Posted at

だいたいこんな感じでできる
$ KCFLAGS=<Cコンパイラ用追加オプション> KCPPFLAGS=<プリプロセッサ用追加オプション> KAFLAGS=<アセンブラ用追加オプション> <ビルドコマンド(makeとか)>

以下経緯。

エレコムのUSB3.0カードリーダ MR3-C004がxubuntu 13で認識されなかったのでドライバをビルドしてインストールしてみた。

VirtualBox上では "Realtek USB3.0 Card Reader" と表示されるので以下からLinux用のドライバをダウンロード。2つあるけどどっちかわからんし(もっと言うとどっちも違うかもしれんが)調べるのもめんどいので両方入れてみる。

README.txtの言うとおりmakeしたら怒られた。

  CC [M]  rts5229/rtsx.c:914:22: エラー: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rtsx_probe’
rts5229/rtsx.c:1069:23: エラー: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rtsx_remove’
rts5229/rtsx.c:1094:11: エラー: ‘rtsx_probe’ がここでは宣言されていません (関数内ではない)
rts5229/rtsx.c:1095:2: エラー: 関数 ‘__devexit_p’ の暗黙的な宣言です [-Werror=implicit-function-declaration]
rts5229/rtsx.c:1095:24: エラー: ‘rtsx_remove’ がここでは宣言されていません (関数内ではない)
/

rtsx.cの914行目を見ると __devinit が解釈できなくて困っているらしい。Linuxカーネル3.8でVMWare Playerを使う によるとこのマクロと __devexit, __devexit_p は3.8で削除されたらしい。

Makefileを読むと /lib/modules/$(shell uname -r)/build/Makefile に処理を引き渡しているので、コマンドラインでオプションを追加できる余地がないか "FLAG" で検索してみると KCFLAGS という変数に追加したいものをセットしておけばよいらしい。

以下を実行して再起動したら無事ドライバのインストールが完了しカードリーダが認識された。

$ make KCFLAGS="-D__devinit= -D__devexit= -D__devexit_p="
$ sudo make install
$ sudo depmod

そのほかいろいろな設定のための環境変数はKBuildのドキュメントに書いてある。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?