Hatena::ブログ(Diary)

日々量産 このページをアンテナに追加 RSSフィード

2011-09-22

[]NICが手に入ったのでドライバいれようとしたらKernelのソースが必要だったので、Linux Kernel3.0.4をいれつつRTパッチ適用もしちゃう日記

ただの備忘録


Kernel 3.0.4


Get free Linux Kernel 3.0.4

kernel.orgがメンテナンス中なのでjaistさんにお世話になります。

cd /usr/src/
wget ftp://ftp.jaist.ac.jp/pub/Linux/kernel.org/linux/kernel/v3.0/linux-3.0.4.tar.gz
tar xzvf linux-3.0.4.tar.gz
cd linux-3.0.4

RealTimeパッチ適用したければ以下を実施。

配布元は不正な証明書を使ってるようです。

wget --no-check-certificate https://tglx.de/~tglx/rt/patch-3.0.4-rt14.gz
gunzip patch-3.0.4-rt14.gz
patch -p1 < patch-3.0.4-rt14

現在のカーネルの設定を引き継ぐ。

以下はCentOS 5.6のkernelのやつ。

 cp /boot/config-2.6.18-238.el5PAE .config

グラフィカルにconfigをいじるにはncurses-develが必要なので入れます。

yum install ncurses-devel

configを適当にいじりまわします。

make menuconfig

例によって出来上がった.configにおまじない。

kernel-panicはもう嫌だ。

CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y

気になる人はudevとかCONFIG_SYSFS_DEPRECATEDで調べればいいよ。


ようやくmake。だがなぜかこんなエラーが出る。

(〜中略〜)

HOSTCC samples/hidraw/hid-example

In file included from /usr/include/linux/input.h:14,

from samples/hidraw/hid-example.c:14:

/usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’

/usr/include/linux/types.h:13: error: previous declaration of ‘dev_t’ was here

/usr/include/sys/types.h:67: error: conflicting types for ‘gid_t’

/usr/include/linux/types.h:27: error: previous declaration of ‘gid_t’ was here

/usr/include/sys/types.h:72: error: conflicting types for ‘mode_t’

/usr/include/linux/types.h:15: error: previous declaration of ‘mode_t’ was here

/usr/include/sys/types.h:77: error: conflicting types for ‘nlink_t’

/usr/include/linux/types.h:16: error: previous declaration of ‘nlink_t’ was here

v82: error: conflicting types for ‘uid_t’

/usr/include/linux/types.h:26: error: previous declaration of ‘uid_t’ was here

In file included from /usr/include/sys/types.h:133,

from /usr/include/linux/input.h:14,

from samples/hidraw/hid-example.c:14:

/usr/include/time.h:105: error: conflicting types for ‘timer_t’

/usr/include/linux/types.h:22: error: previous declaration of ‘timer_t’ was here

In file included from /usr/include/linux/input.h:14,Qq

from samples/hidraw/hid-example.c:14:

/usr/include/sys/types.h:235: error: conflicting types for ‘blkcnt_t’

/usr/include/linux/types.h:114: error: previous declaration of ‘blkcnt_t’ was here

samples/hidraw/hid-example.c:15:26: error: linux/hidraw.h: そのようなファイルやディレクトリはありません

samples/hidraw/hid-example.c: In function ‘main’:

samples/hidraw/hid-example.c:48: error: storage size of ‘rpt_desc’ isn’t known

samples/hidraw/hid-example.c:49: error: storage size of ‘info’ isn’t known

samples/hidraw/hid-example.c:65: error: ‘HIDIOCGRDESCSIZE’ undeclared (first use in this function)

samples/hidraw/hid-example.c:65: error: (Each undeclared identifier is reported only once

samples/hidraw/hid-example.c:65: error: for each function it appears in.)

samples/hidraw/hid-example.c:73: error: ‘HIDIOCGRDESC’ undeclared (first use in this function)

samples/hidraw/hid-example.c:84: 警告: implicit declaration of function ‘HIDIOCGRAWNAME’

samples/hidraw/hid-example.c:91: 警告: implicit declaration of function ‘HIDIOCGRAWPHYS’

samples/hidraw/hid-example.c:98: error: ‘HIDIOCGRAWINFO’ undeclared (first use in this function)

samples/hidraw/hid-example.c:49: 警告: unused variable ‘info’

samples/hidraw/hid-example.c:48: 警告: unused variable ‘rpt_desc’

samples/hidraw/hid-example.c: In function ‘bus_str’:

samples/hidraw/hid-example.c:171: error: ‘BUS_VIRTUAL’ undeclared (first use in this function)

make[2]: *** [samples/hidraw/hid-example] エラー 1

make[1]: *** [samples/hidraw] エラー 2

make: *** [vmlinux] エラー 2

大体こんな感じのエラー。

一部のエラー文で検索すると、海外のフォーラムにも出ていた。

http://www.spinics.net/lists/mm-commits/msg84683.html


hidraw絡みのエラーらしい。よくわからない。

ちなみに、このソースコード(samples/hidraw/hid-example.c)をコンパイルしようとすると、

sys/types.hとlinux/types.hが同名の名前でtypedefしようとしており、

今回のソースコードを見る限り、必ず衝突するのでsamplesをコンパイル対象にしていればここで止まるはず。

多分。


対策。

samples/Makefile

                          hw_breakpoint/ kfifo/ kdb/ hidraw/

ここを

                          hw_breakpoint/ kfifo/ kdb/

こうすればいいだけだったりする。


あってるかわからないmakeコマンドを実施

make
make modules
make modules_install
make install

エラーっぽいのが出なければOK


最後にreboot後に新しく作ったkernelを使うようにする。

vi /etc/grub.conf

おそらく新しく作ったkernelは一番上にくるので、番号は0のはず。

以下のように変更。

default=0


再起動

reboot

reboot後、kernelを切り替えて起動すると、sshでログインできなくなっていた。

調べてみると、eth0の起動スクリプトがリネームされていて起動できない状態になっていた。

わけがわからない。どうしてこうなった・・・

cd /etc/sysconfig/network-scripts
mv ifcfg-eth0.bak ifcfg-eth0
ifup eth0

sshで接続しなおして、起動を確認。

uname -a

Linux localhost 3.0.4-rt14 #5 SMP PREEMPT RT Thu Sep 22 21:38:01 JST 2011 i686 i686 i386 GNU/Linux


ようやくNIC

今回使うのは、こちら。

Intel® PRO/1000 PT Dual Port Server Adapter

やふおくで3000〜4000円ぐらい。

PCI-Ex x4を使うので普通のマザーじゃ刺さりません。僕はPCI-Ex x16に挿してます。

NTT-X Storeにある安い鯖にはx4スロットがあるので挿せます。


公式ドライバのREADME

http://downloadmirror.intel.com/15817/eng/README.txt


ソースコードダウンロードからコンパイル、インストールまで。

cd /usr/src/
wget http://downloadmirror.intel.com/15817/eng/e1000e-1.5.1.tar.gz
tar xzvf e1000e-1.5.1.tar.gz
cd e1000e-1.5.1/src
make && make install

モジュール差し替え?

rmmod e1000e; modprobe e1000e

お好みで公式ドライバのREADMEを見てオプションの設定をしていく。



NICの設定。

network絡みのスクリプトファイルがいっぱいあるところにいく

cd /etc/sysconfig/network-scripts

新しいNICの設定。いまさらだけど隠してます。

vi ifcfg-eth1

DEVICE=eth1

BOOTPROTO=static

BROADCAST=192.168.XXX.XXX

HWADDR=XX:XX:XX:XX:XX:XX

IPADDR=192.168.XXX.XXX

NETMASK=255.255.XXX.XXX

NETWORK=192.168.XXX.XXX

ONBOOT=yes

MTU=1438


NICを再起動する。

が、今まで使ってたeth0は使わないので、ifupしない。

1行で打たないとネットが切られるだけなので、直接叩かないとifupできなくなる。

ifdown eth0; ifdown eth1; ifup eth1;

このコマンドを打ったら、ケーブルを挿しかえる。


eth0はもう使わないので、リネームするなりして使えなくする。

mv ifcfg-eth0 ifcfg-eth0.bak

いらないけど再起動

reboot

確認

ifconfig -a

eth1だけ元気に走り回って、後は死んでいれば完了。

お疲れ様でした(俺)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ryousanngata/20110922/1316700121
リンク元