FC4 私 的MEMO カーネル再構築とrpmの作成

<<トップページへ

概要

 USB -IOの導入のためカーネルの再構築に挑戦しました。これはその時の私的メモです。いかんせん素人のやることなので参考程度に読んでください。

■ 作業内容


ソースインストールの場合

# rpm -ivh kernel-2.6.14-1.1637_FC4.src.rpm
# rpmbuild -bp --target=i686 /usr/src/redhat/SPECS/kernel-2.6.spec
# cd /usr/src/redhat/BUILD/kernel-2.6.14
# cp -R -p linux-2.6.14 /usr/src/
# cd /usr/src/
# ln -s /usr/src/linux-2.6.14 /usr/src/linux
# cd /usr/src/linux
# cp configs/kernel-2.6.14-i686.config .config

この時点でREADMEの内容にしたがってソースを変更し ておく

# make mrproper
# cp configs/kernel-2.6.14-i686.config .config
# make oldconfig
# make bzImage && make modules
# make modules_install
# installkernel 2.6.14-prep arch/i386/boot/bzImage System.map

ドライバーの導入(Makefileに一部修正が必要で す。

$ make clean
$ make
$ cp morphy-usbio.ko /lib/modules/2.6.14-prep/
# /sbin/depmod -a
出来てしまえばなんだそんな事だったのね...なのですが
rpmを作成してインストール

ソースファイルはあらかじめ/usr/src/redhatにdownloadしておく

# rpm -ivh /usr/src/redhat/kernel-2.6.14-1.1637_FC4.src.rpm
← あくまでもパッチを作成するための展開です!
# cd /usr/src/redhat/SPECS
# cp kernel-2.6.spec kernel-2.6.spec-new

ここで構築用のスクリプトを作成する
# vi KOUCHIKU

#!/bin/csh
rm -r -f /usr/src/redhat/BUILD/kernel-2.6.14
rpm -ivh ../kernel-2.6.14-1.1637_FC4.src.rpm
cp ./kernel-2.6.spec-new ./kernel-2.6.spec
rpmbuild -ba  --target=i686 kernel-2.6.spec

specファイルを変更する
# vi
kernel-2.6.spec-new

最初に
%{rhbsys}の部分を取る。 すると作成されるrpmの名前はオリジナルのものと同じになる。あえて、なぜそうするか?はyumでnvidiaのドライバーをインストール、アップデー ト出来なくなるためです。
%define release %(R="$Revision: 1.1637 $"; RR="${R##: }"; echo ${RR%%?})_FC4%{rhbsys}

この辺に

#
# Patches 0 through 100 are meant for core subsystem upgrades
#
Patch5000: hid-core.patch ← 追加
Patch1: patch-2.6.14.1.bz2
Patch2: linux-2.6.14.2-pre.patch

# Patches 100 through 500 are meant for architecture patches
Patch100: linux-2.6-bzimage.patch

−省略−

この辺に
#
# Patches 5000 to 6000 are reserved for new drivers that are about to
# be merged upstream
#

%patch5000 -p0
← 追加
以下のようにパッチを作成します。前にも書いたのですが、なぜパッチが 必要となるか?ですが 展開したhid-core.c を修正後に rpmbuild -ba --target=i686 kernel-2.6.spec とやるとソースが再展開されて修正前の内容でrpmファイルが作成されてしまうからです。(この穴は大きかったです。)

参考リンク
http://www.sip.eee.yamaguchi-u.ac.jp/kou/diff-patch.html
# cd /usr/src/redhat/SOURCES
# cp
/usr/src/redhat/BUILD/kernel-2.6.14/linux-2.6.14/drivers/usb/input/hid-core.c ./hid-core.c-new
# vi
./hid-core.c-new

        { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE },
という部分を探し出してその最後の部分に下のように追加してください。

{ 0x1352, 0x0100, HID_QUIRK_IGNORE },
{ 0x0BFE, 0x1000, HID_QUIRK_IGNORE },
{ 0x0BFE, 0x1001, HID_QUIRK_IGNORE },
{ 0x0BFE, 0x1002, HID_QUIRK_IGNORE },
{ 0x0BFE, 0x1003, HID_QUIRK_IGNORE },
{ 0x12ED, 0x1003, HID_QUIRK_IGNORE },
{ 0, 0 }
編集後にパッチを作成します。

# diff -c /usr/src/redhat/BUILD/kernel-2.6.14/linux-2.6.14/drivers/usb/input/hid-core.c \ /usr/src/redhat/SOURCES/hid-core.c-new > hid-core.patch

ファイルの中身はこのようになります。
*** /usr/src/redhat/BUILD/kernel-2.6.14/linux-2.6.14/drivers/usb/input/hid-core.c       2006-01-29 15:52:40.000000000 +0900
--- hid-core.c.new      2006-01-29 16:00:51.000000000 +0900
***************
*** 1571,1576 ****
--- 1571,1583 ----
        { USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD },

        { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_SITECOM_WSL, HID_QUIRK_IGNORE },
+       { 0x1352, 0x0100, HID_QUIRK_IGNORE },
+         { 0x0BFE, 0x1000, HID_QUIRK_IGNORE },
+         { 0x0BFE, 0x1001, HID_QUIRK_IGNORE },
+         { 0x0BFE, 0x1002, HID_QUIRK_IGNORE },
+         { 0x0BFE, 0x1003, HID_QUIRK_IGNORE },
+         { 0x12ED, 0x1003, HID_QUIRK_IGNORE },
+
        { 0, 0 }
  };

いよいよrpmファイルを作成します。
# cd /usr/src/redhat/SPECS
# ./
KOUCHIKU

3時間後に失敗がわかったらやり切れないので...rpm作成を始めてパッチの適応が終わったのが確認でき たら作成中でも問題ないので下のようにして内容を確認します。

# cat
/usr/src/redhat/BUILD/kernel-2.6.14/linux-2.6.14/drivers/usb/input/hid-core.c
成功すれば /usr/src/redhat/RPMS/i686 の下に kernel-2.6.14-1.1637_FC4.i686 が出来ているのでそれをインストールする。理屈がまだわからないにのですが...
次に こんな処理をしています。なぜかrpmファイルを作成したディクトリーをコピーしてリンクを張りドライバーをmakeしても動作しませんでした。
それで 下の様に再度 make bzImage && make modules して、そのディレクトリーにリンクを張った後に morphy-usbio.ko を make したら動作しました。うーん...2回試したけどやっぱりそうでした。

ドライバーのdownload先
http://web.mac.com/orangkucing/iWeb/Home/
# cd /usr/src/redhat/BUILD/kernel-2.6.14 
# cp -R -p linux-2.6.14 /usr/src/
# cd /usr/src/
# ln -s /usr/src/linux-2.6.14 /usr/src/linux ←この内容を musbio の make 時に反映させる。
# cd /usr/src/linux
# make mrproper
# cp configs/kernel-2.6.14-i686.config .config

この時点でREADMEの内容にしたがってソースを変更し ておく

# make oldconfig
# make bzImage && make modules

この後にドライバーのコンパイルとインストールを行う。適当な場所に musbio-1.01-2.6.tar.gz を展開してMakefileの3行目を make -C /usr/src/linux SUBDIRS=`pwd` modules としておく。

$ cd
/home/hoge/HDH4
$ wget http://homepage.mac.com/orangkucing/morphy/musbio-1.01-2.6.tar.gz
$ tar xvzf musbio-1.01-2.6.tar.gz
$ cd /home/hoge/HDH4/musbio-1.01-2.6
$ make
# cp morphy-usbio.ko /lib/modules/2.6.14-1.1644_FC4/
# /sbin/depmod -a


▲このページのトップへ戻る

▲トップへ戻 る





Copyright©2005-2006  熊の巣  All Right Reserved.  管理人へメール