2025
01
18
2012
02
26
カーネルモジュールのコンパイル環境を整える(Scientific Linux 6.2)
カーネルモジュールをコンパイルするためには、Linuxのソースコードが必要&適切なパスの場所に ソースコードを展開しなければいけない。 書きだしてみると結構面倒。。
注意
HDD15GB程度だとカーネルコンパイル時に容量が足りなくなりました
手順
#1 再構築に必要なパッケージをインストール (rpmdev-setuptreeのため) yum install rpmdevtools yum-utils #2 パッケージ再構築の準備 (rpmbuildディレクトリを正しく作るため) # ホームディレクトリの中にrpmbuildディレクトリが作成される。 # BUILD RPMS SOURCES SPECS SRPMS rpmdev-setuptree ls ~/rpmbuild/ # 確認 #3 カーネルソースのダウンロード yumdownloader --source kernel ls ./ # 確認 kernel-****.src.rpmファイルができているはず #4 カーネルソースの再構築に必要となるパッケージをインストール yum-builddep kernel-****.src.rpm #5 カーネルソースのインストール # これにより、rpmdev-setuptreeコマンドによって作成された # ~/rpmbuildディレクトリ下にカーネルソースが展開される rpm -Uhv kernel-****.src.rpm #6 カーネルソースのツリーを準備 # ツリーは~/rpmbuild/BUILD/kernel-<バージョン>/ # linux-<バージョン>.<アーキテクチャ>ディレクトリに作成される cd ~/rpmbuild/SPECS rpmbuild -bp --target=`uname -m` kernel.spec #7 いろいろ足りないと言われる なので必要なものを入れる # 筆者実行時エラー #************************************************************************ #[root@sl62-64bit SPECS]# rpmbuild -bp --target=`uname -m` kernel.spec #Building target platforms: x86_64 #Building for target x86_64 #error: Failed build dependencies: # elfutils-libelf-devel is needed by kernel-2.6.32-220.4.2.el6.x86_64 # zlib-devel is needed by kernel-2.6.32-220.4.2.el6.x86_64 # binutils-devel is needed by kernel-2.6.32-220.4.2.el6.x86_64 # newt-devel is needed by kernel-2.6.32-220.4.2.el6.x86_64 # python-devel is needed by kernel-2.6.32-220.4.2.el6.x86_64 # perl(ExtUtils::Embed) is needed by kernel-2.6.32-220.4.2.el6.x86_64 #************************************************************************ yum install elfutils-libelf-devel yum install zlib-devel yum install binutils-devel yum install newt-devel yum install python-devel yum install perl-ExtUtils-Embed # 名前そのままじゃないから、ちょっと引っかかった #8 改めてカーネルソースのツリーを準備 # ### Now generating a PGP key pair to be used for signing modules. # のところで時間かかるのですが、バッググラウンドで # rngd -r /dev/urandomするとすぐ終わります cd ~/rpmbuild/SPECS rpmbuild -bp --target=`uname -m` kernel.spec #9 現在使っているカーネルの.configファイルを使うために # ファイルをコピーしてくる cp /boot/config***** ~/rpmbuild/BUILD/kernel-****/linux-**++/.config #10 現行の設定をそのまま使う (この作業いらない?) cd ~/rpmbuild/BUILD/kernel-****/linux-**++/ make oldconfig #11 先の.configを元にカーネルソースのコンパイルをする # -j オプションを使うとMakefileに従った処理のうち依存関係が無く # 直列に処理しなくても済む部分を,複数のプロセスを生成し並行処理する make -j8 #12 カーネルソースへのリンクを適切に設定する cd /lib/module/(kernel)/ ln -s ~/rpmbuild/BUILD/kernel-****/linux-**++/ ./build ls -l # 確認 #13 hello.cとMakefileがあるフォルダへ移動 cd helloフォルダ
上記の手順で、makeもinsmodでカーネルにモジュールを組み込むこともできるようになると思います。
その他注意
上記の手順で、最も面倒な設定は済んでいますが、それでも失敗する場合は、 以下のところを気にしてください。 ・Makefileのタブがスペースになっている ・リンクの設定が正しいか ・権限がないか など
検索用タグ Linuxドライバ デバイスドライバ Linuxカーネル
PR
2012/02/26 (Sun.) Comment(0) Linuxデバイスドライバ
Comments