SSブログ

Fedora Core 3 Building Kernel from source code [ぱそ関係]

Fedora Core 3 の Kernel バイナリをソースコードから作ってみた。

元ネタは以下のURL。
http://download.fedora.redhat.com/pub/fedora/linux/core/3/i386/os/RELEASE-NOTES-en.html
http://www.mjmwired.net/resources/mjm-kernel-fc3.shtml

-------------------------
●Get the source code
http://download.fedora.redhat.com/pub/fedora/linux/core/updates/3/SRPMS/
kernel-2.6.11-1.14_FC3.src.rpm

ちなみに FC4 以降だと @IT で紹介されてる yumdownloader が簡単そう。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/853downsrpm.html
-------------------------
●Install source code package.

[root@localhost]# rpm -ivh kernel-2.6.11-1.14_FC3.src.rpm
...

これで、Kernel.org のソースと Fedora Core で適用しているパッチがインストールされる。

こんな感じ。

[root@localhost]# cd /usr/src/redhat
[root@localhost redhat]# ls
BUILD  RPMS  SOURCES  SPECS  SRPMS
[root@localhost redhat]# cd SOURCES/
[root@localhost SOURCES]# ls
COPYING.modules
genkey
kernel-2.6.11-i586.config
kernel-2.6.11-i586-smp.config
kernel-2.6.11-i686.config
kernel-2.6.11-i686-smp.config
kernel-2.6.11-ia64.config
kernel-2.6.11-ppc64.config
kernel-2.6.11-ppc64iseries.config
kernel-2.6.11-ppc.config
kernel-2.6.11-ppc-smp.config
kernel-2.6.11-s390.config
kernel-2.6.11-s390x.config
kernel-2.6.11-x86_64.config
kernel-2.6.11-x86_64-smp.config
linux-2.4.0-nonintconfig.patch
linux-2.4.0-test11-vidfail.patch
linux-2.6.0-compile.patch
linux-2.6.0-exec-shield.patch
linux-2.6.0-must_check.patch
linux-2.6.0-sleepon.patch
linux-2.6.10-compile-fixes.patch
linux-2.6.10-crashdump-common.patch
linux-2.6.10-crash-xen.patch
linux-2.6.10-diskdump.patch
linux-2.6.10-netdump.patch
linux-2.6.10-periodic-slab-debug.patch
linux-2.6.10-ppc-headerabuse.patch
linux-2.6.10-revert-module-invalidparam.patch
linux-2.6.10-scsi-blacklist.patch
linux-2.6.10-usb-use_both_schemes.patch
linux-2.6.10-x86_64-read-implies-exec32.patch
linux-2.6.10-x86-tune-p4.patch
linux-2.6.10-xen.patch
linux-2.6.11-compile-fixes.patch
linux-2.6.11-default-elevator.patch
linux-2.6.11-devmem.patch
linux-2.6.11-pwc.patch
linux-2.6.11.tar.bz2
linux-2.6.11-tux.patch
linux-2.6.11-vm-taint.patch
linux-2.6.11-x86_64-pmdpud-race.patch
linux-2.6.12-devmem.patch
linux-2.6.1-s390-compile.patch
linux-2.6.2-ppc64-build.patch
linux-2.6.3-crash-driver.patch
linux-2.6.3-ia64-build.patch
linux-2.6.3-printopen.patch
linux-2.6.3-sparc-addbzimage.patch
linux-2.6.4-stackusage.patch
linux-2.6.7-modsign-core.patch
linux-2.6.7-modsign-crypto.patch
linux-2.6.7-modsign-include.patch
linux-2.6.7-modsign-ksign.patch
linux-2.6.7-modsign-mpilib.patch
linux-2.6.7-modsign-script.patch
linux-2.6.8-devmem-xen.patch
linux-2.6.8-execshield-vaspace.patch
linux-2.6.8-execshield-xen.patch
linux-2.6.8-lockd-racewarn2.patch
linux-2.6.8-netconsole.patch
linux-2.6.8-ppc64-netboot.patch
linux-2.6.8-print-fatal-signals.patch
linux-2.6.9-ide-cd-early-EOF.patch
linux-2.6.9-ieee80211.patch
linux-2.6.9-ipw2100.patch
linux-2.6.9-ipw2200.patch
linux-2.6.9-lockd-block-nosleep.patch
linux-2.6.9-lockd-reclaims.patch
linux-2.6.9-module_version.patch
linux-2.6.9-net-airo-nullptr.patch
linux-2.6.9-net-tr-irqlock-fix.patch
linux-2.6.9-NFSD-non-null-getxattr.patch
linux-2.6.9-s390-autoraid.patch
linux-2.6.9-s390-qeth_hipersocket-fix.patch
linux-2.6.9-s390-zfcp_port-fix.patch
linux-2.6.9-scsi-advansys-enabler.patch
linux-2.6.9-scsi-megaraid-legacy.patch
linux-2.6.9-sha1.patch
linux-2.6.9-spinlock-debug-panic.patch
linux-2.6.9-vm-oomkiller-debugging.patch
linux-2.6.9-x86_64-flexmmap.patch
linux-2.6.9-xen-agpgart.patch
linux-2.6.9-xen-compile.patch
patch-2.6.11.7.bz2
[root@localhost SOURCES]#

-------------------------
●/usr/src/redhat/SPECS/ に移動して、オリジナルソースとパッチからコンパイルするためのパッチ適用済ソースを SRPM から生成する。

--target のオプションにはアーキを指定する。 これが正しくないと、ソースの生成の途中でエラーが出てうまくあてられないパッチがあるようだ。 ということでシステムのアーキを確認。

[root@localhost linux-2.6.11]# arch
i686

ひきつづき、ソースの生成。 

rpmbuld は rpm-build パッケージに入っているので、もしインストールされてなければ yum install rpm-build にてインストール。 コマンドはハイフンなし、パッケージはハイフンありでややこしい。
あと、gcc と redhat-rpm-config パッケージも Kernel ソースの rpmbuild 実行に必要なので同様にインストールしておく。(もしなかったら rpmbuild 実行時にインストールしろって言われる)

[root@localhost SPECS]# rpmbuild -bp --target=i686  /usr/src/redhat/SPECS/kernel-2.6.spec
Building target platforms: i686
Building for target i686
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.45611
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /usr/src/redhat/BUILD
+ rm -rf kernel-2.6.11
+ /bin/mkdir -p kernel-2.6.11
+ cd kernel-2.6.11
+ /usr/bin/bzip2 -dc /usr/src/redhat/SOURCES/linux-2.6.11.tar.bz2
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chown -Rhf root .
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chgrp -Rhf root .
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ cd linux-2.6.11
+ echo 'Patch #1 (patch-2.6.11.7.bz2):'
Patch #1 (patch-2.6.11.7.bz2):
+ /usr/bin/bzip2 -d
+ patch -p1 -s
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ echo 'Patch #211 (linux-2.6.10-x86-tune-p4.patch):'
Patch #211 (linux-2.6.10-x86-tune-p4.patch):
+ patch -p1 -s
+ echo 'Patch #212 (linux-2.6.11-x86_64-pmdpud-race.patch):'
Patch #212 (linux-2.6.11-x86_64-pmdpud-race.patch):
+ patch -p1 -s
+ echo 'Patch #300 (linux-2.6.2-ppc64-build.patch):'
Patch #300 (linux-2.6.2-ppc64-build.patch):
+ patch -p1 -s
+ echo 'Patch #301 (linux-2.6.8-ppc64-netboot.patch):'
Patch #301 (linux-2.6.8-ppc64-netboot.patch):
+ patch -p1 -s
+ echo 'Patch #302 (linux-2.6.10-ppc-headerabuse.patch):'
Patch #302 (linux-2.6.10-ppc-headerabuse.patch):
+ patch -p1 -s
+ echo 'Patch #330 (linux-2.6.3-ia64-build.patch):'
Patch #330 (linux-2.6.3-ia64-build.patch):
+ patch -p1 -s
+ echo 'Patch #350 (linux-2.6.1-s390-compile.patch):'
Patch #350 (linux-2.6.1-s390-compile.patch):
+ patch -p1 -s
+ echo 'Patch #351 (linux-2.6.9-s390-autoraid.patch):'
Patch #351 (linux-2.6.9-s390-autoraid.patch):
+ patch -p1 -s
+ echo 'Patch #353 (linux-2.6.9-s390-zfcp_port-fix.patch):'
Patch #353 (linux-2.6.9-s390-zfcp_port-fix.patch):
+ patch -p1 -s
+ echo 'Patch #360 (linux-2.6.9-s390-qeth_hipersocket-fix.patch):'
Patch #360 (linux-2.6.9-s390-qeth_hipersocket-fix.patch):
+ patch -p1 -s
+ echo 'Patch #400 (linux-2.6.3-sparc-addbzimage.patch):'
Patch #400 (linux-2.6.3-sparc-addbzimage.patch):
+ patch -p1 -s
+ echo 'Patch #450 (linux-2.6.10-xen.patch):'
Patch #450 (linux-2.6.10-xen.patch):
+ patch -p1 -s
+ echo 'Patch #452 (linux-2.6.9-xen-compile.patch):'
Patch #452 (linux-2.6.9-xen-compile.patch):
+ patch -p1 -s
+ echo 'Patch #453 (linux-2.6.9-xen-agpgart.patch):'
Patch #453 (linux-2.6.9-xen-agpgart.patch):
+ patch -p1 -s
+ echo 'Patch #500 (linux-2.4.0-nonintconfig.patch):'
Patch #500 (linux-2.4.0-nonintconfig.patch):
+ patch -p1 -s
+ echo 'Patch #511 (linux-2.6.0-exec-shield.patch):'
Patch #511 (linux-2.6.0-exec-shield.patch):
+ patch -p1 -s
+ echo 'Patch #512 (linux-2.6.8-print-fatal-signals.patch):'
Patch #512 (linux-2.6.8-print-fatal-signals.patch):
+ patch -p1 -s
+ echo 'Patch #513 (linux-2.6.8-execshield-vaspace.patch):'
Patch #513 (linux-2.6.8-execshield-vaspace.patch):
+ patch -p1 -s
+ echo 'Patch #514 (linux-2.6.8-execshield-xen.patch):'
Patch #514 (linux-2.6.8-execshield-xen.patch):
+ patch -p1 -s
+ echo 'Patch #515 (linux-2.6.10-x86_64-read-implies-exec32.patch):'
Patch #515 (linux-2.6.10-x86_64-read-implies-exec32.patch):
+ patch -p1 -R -s
+ echo 'Patch #530 (linux-2.6.0-must_check.patch):'
Patch #530 (linux-2.6.0-must_check.patch):
+ patch -p1 -s
+ echo 'Patch #600 (linux-2.6.7-modsign-core.patch):'
Patch #600 (linux-2.6.7-modsign-core.patch):
+ patch -p1 -s
+ echo 'Patch #601 (linux-2.6.7-modsign-crypto.patch):'
Patch #601 (linux-2.6.7-modsign-crypto.patch):
+ patch -p1 -s
+ echo 'Patch #602 (linux-2.6.7-modsign-ksign.patch):'
Patch #602 (linux-2.6.7-modsign-ksign.patch):
+ patch -p1 -s
+ echo 'Patch #603 (linux-2.6.7-modsign-mpilib.patch):'
Patch #603 (linux-2.6.7-modsign-mpilib.patch):
+ patch -p1 -s
+ echo 'Patch #604 (linux-2.6.7-modsign-script.patch):'
Patch #604 (linux-2.6.7-modsign-script.patch):
+ patch -p1 -s
+ echo 'Patch #605 (linux-2.6.7-modsign-include.patch):'
Patch #605 (linux-2.6.7-modsign-include.patch):
+ patch -p1 -s
+ echo 'Patch #606 (linux-2.6.9-sha1.patch):'
Patch #606 (linux-2.6.9-sha1.patch):
+ patch -p1 -s
+ echo 'Patch #700 (linux-2.6.11-tux.patch):'
Patch #700 (linux-2.6.11-tux.patch):
+ patch -p1 -s
+ echo 'Patch #1000 (linux-2.4.0-test11-vidfail.patch):'
Patch #1000 (linux-2.4.0-test11-vidfail.patch):
+ patch -p1 -s
+ echo 'Patch #1010 (linux-2.6.10-periodic-slab-debug.patch):'
Patch #1010 (linux-2.6.10-periodic-slab-debug.patch):
+ patch -p1 -s
+ echo 'Patch #1020 (linux-2.6.4-stackusage.patch):'
Patch #1020 (linux-2.6.4-stackusage.patch):
+ patch -p1 -s
+ echo 'Patch #1050 (linux-2.6.12-devmem.patch):'
Patch #1050 (linux-2.6.12-devmem.patch):
+ patch -p1 -s
+ echo 'Patch #1051 (linux-2.6.11-devmem.patch):'
Patch #1051 (linux-2.6.11-devmem.patch):
+ patch -p1 -s
+ echo 'Patch #1052 (linux-2.6.8-devmem-xen.patch):'
Patch #1052 (linux-2.6.8-devmem-xen.patch):
+ patch -p1 -s
+ echo 'Patch #1060 (linux-2.6.3-crash-driver.patch):'
Patch #1060 (linux-2.6.3-crash-driver.patch):
+ patch -p1 -s
+ echo 'Patch #1061 (linux-2.6.10-crash-xen.patch):'
Patch #1061 (linux-2.6.10-crash-xen.patch):
+ patch -p1 -s
+ echo 'Patch #1070 (linux-2.6.0-sleepon.patch):'
Patch #1070 (linux-2.6.0-sleepon.patch):
+ patch -p1 -s
+ echo 'Patch #1130 (linux-2.6.10-scsi-blacklist.patch):'
Patch #1130 (linux-2.6.10-scsi-blacklist.patch):
+ patch -p1 -s
+ echo 'Patch #1131 (linux-2.6.9-scsi-advansys-enabler.patch):'
Patch #1131 (linux-2.6.9-scsi-advansys-enabler.patch):
+ patch -p1 -s
+ echo 'Patch #1136 (linux-2.6.9-scsi-megaraid-legacy.patch):'
Patch #1136 (linux-2.6.9-scsi-megaraid-legacy.patch):
+ patch -p1 -s
+ echo 'Patch #1201 (linux-2.6.9-NFSD-non-null-getxattr.patch):'
Patch #1201 (linux-2.6.9-NFSD-non-null-getxattr.patch):
+ patch -p1 -s
+ echo 'Patch #1207 (linux-2.6.8-lockd-racewarn2.patch):'
Patch #1207 (linux-2.6.8-lockd-racewarn2.patch):
+ patch -p1 -s
+ echo 'Patch #1209 (linux-2.6.9-lockd-block-nosleep.patch):'
Patch #1209 (linux-2.6.9-lockd-block-nosleep.patch):
+ patch -p1 -s
+ echo 'Patch #1210 (linux-2.6.9-lockd-reclaims.patch):'
Patch #1210 (linux-2.6.9-lockd-reclaims.patch):
+ patch -p1 -s
+ echo 'Patch #1351 (linux-2.6.9-net-tr-irqlock-fix.patch):'
Patch #1351 (linux-2.6.9-net-tr-irqlock-fix.patch):
+ patch -p1 -s
+ echo 'Patch #1362 (linux-2.6.9-net-airo-nullptr.patch):'
Patch #1362 (linux-2.6.9-net-airo-nullptr.patch):
+ patch -p1 -s
+ echo 'Patch #1400 (linux-2.6.10-usb-use_both_schemes.patch):'
Patch #1400 (linux-2.6.10-usb-use_both_schemes.patch):
+ patch -p1 -s
+ echo 'Patch #1500 (linux-2.6.10-crashdump-common.patch):'
Patch #1500 (linux-2.6.10-crashdump-common.patch):
+ patch -p1 -s
+ echo 'Patch #1501 (linux-2.6.10-netdump.patch):'
Patch #1501 (linux-2.6.10-netdump.patch):
+ patch -p1 -s
+ echo 'Patch #1502 (linux-2.6.8-netconsole.patch):'
Patch #1502 (linux-2.6.8-netconsole.patch):
+ patch -p1 -s
+ echo 'Patch #1503 (linux-2.6.10-diskdump.patch):'
Patch #1503 (linux-2.6.10-diskdump.patch):
+ patch -p1 -s
+ echo 'Patch #1700 (linux-2.6.10-revert-module-invalidparam.patch):'
Patch #1700 (linux-2.6.10-revert-module-invalidparam.patch):
+ patch -p1 -s
+ echo 'Patch #1740 (linux-2.6.11-default-elevator.patch):'
Patch #1740 (linux-2.6.11-default-elevator.patch):
+ patch -p1 -s
+ echo 'Patch #1760 (linux-2.6.9-module_version.patch):'
Patch #1760 (linux-2.6.9-module_version.patch):
+ patch -p1 -s
+ echo 'Patch #1910 (linux-2.6.9-spinlock-debug-panic.patch):'
Patch #1910 (linux-2.6.9-spinlock-debug-panic.patch):
+ patch -p1 -s
+ echo 'Patch #2000 (linux-2.6.11-vm-taint.patch):'
Patch #2000 (linux-2.6.11-vm-taint.patch):
+ patch -p1 -s
+ echo 'Patch #2003 (linux-2.6.9-vm-oomkiller-debugging.patch):'
Patch #2003 (linux-2.6.9-vm-oomkiller-debugging.patch):
+ patch -p1 -s
+ echo 'Patch #2101 (linux-2.6.9-ide-cd-early-EOF.patch):'
Patch #2101 (linux-2.6.9-ide-cd-early-EOF.patch):
+ patch -p1 -s
+ echo 'Patch #3000 (linux-2.6.11-pwc.patch):'
Patch #3000 (linux-2.6.11-pwc.patch):
+ patch -p1 -s
+ echo 'Patch #3020 (linux-2.6.9-ipw2100.patch):'
Patch #3020 (linux-2.6.9-ipw2100.patch):
+ patch -p1 -s
+ echo 'Patch #3021 (linux-2.6.9-ipw2200.patch):'
Patch #3021 (linux-2.6.9-ipw2200.patch):
+ patch -p1 -s
+ echo 'Patch #3022 (linux-2.6.9-ieee80211.patch):'
Patch #3022 (linux-2.6.9-ieee80211.patch):
+ patch -p1 -s
+ echo 'Patch #10000 (linux-2.6.0-compile.patch):'
Patch #10000 (linux-2.6.0-compile.patch):
+ patch -p1 -s
+ echo 'Patch #10001 (linux-2.6.10-compile-fixes.patch):'
Patch #10001 (linux-2.6.10-compile-fixes.patch):
+ patch -p1 -s
+ echo 'Patch #10002 (linux-2.6.11-compile-fixes.patch):'
Patch #10002 (linux-2.6.11-compile-fixes.patch):
+ patch -p1 -s
+ cp /usr/src/redhat/SOURCES/COPYING.modules Documentation/
+ mkdir configs
+ cp -fv /usr/src/redhat/SOURCES/kernel-2.6.11-i586-smp.config /usr/src/redhat/SOURCES/kernel-2.6.11-i586.config /usr/src/redhat/SOURCES/kernel-2.6.11-i686-smp.config /usr/src/redhat/SOURCES/kernel-2.6.11-i686.config .
`/usr/src/redhat/SOURCES/kernel-2.6.11-i586-smp.config' -> `./kernel-2.6.11-i586-smp.config'
`/usr/src/redhat/SOURCES/kernel-2.6.11-i586.config' -> `./kernel-2.6.11-i586.config'
`/usr/src/redhat/SOURCES/kernel-2.6.11-i686-smp.config' -> `./kernel-2.6.11-i686-smp.config'
`/usr/src/redhat/SOURCES/kernel-2.6.11-i686.config' -> `./kernel-2.6.11-i686.config'
+ for i in '*.config'
+ mv kernel-2.6.11-i586-smp.config .config
++ head -1 .config
++ cut -b 3-
+ Arch=i386
+ make ARCH=i386 nonint_oldconfig
+ echo '# i386'
+ cat .config
+ for i in '*.config'
+ mv kernel-2.6.11-i586.config .config
++ head -1 .config
++ cut -b 3-
+ Arch=i386
+ make ARCH=i386 nonint_oldconfig
+ echo '# i386'
+ cat .config
+ for i in '*.config'
+ mv kernel-2.6.11-i686-smp.config .config
++ cut -b 3-
++ head -1 .config
+ Arch=i386
+ make ARCH=i386 nonint_oldconfig
+ echo '# i386'
+ cat .config
+ for i in '*.config'
+ mv kernel-2.6.11-i686.config .config
++ head -1 .config
++ cut -b 3-
+ Arch=i386
+ make ARCH=i386 nonint_oldconfig
+ echo '# i386'
+ cat .config
+ perl -p -i -e 's/^SUBLEVEL.*/SUBLEVEL = 11/' Makefile
+ perl -p -i -e 's/^EXTRAVERSION.*/EXTRAVERSION = -prep/' Makefile
+ find . -name '*.orig' -exec rm -fv '{}' ';'
removed `./mm/mremap.c.orig'
removed `./mm/memory.c.orig'
。。。(省略)
removed `./fs/binfmt_elf.c.orig'
removed `./fs/open.c.orig'
+ find . -name '*~' -exec rm -fv '{}' ';'
+ exit 0
[root@localhost SPECS]#

----------------------------
●now you have kernel source tree under /usr/src/redhat/BUILD/kernel-2.6.11/linux-2.6.11/

[root@localhost]# cd /usr/src/redhat/BUILD/kernel-2.6.11/linux-2.6.11/
[root@localhost linux-2.6.11]# ls
arch     crypto         include  lib          net             security
configs  Documentation  init     MAINTAINERS  README          sound
COPYING  drivers        ipc      Makefile     REPORTING-BUGS  usr
CREDITS  fs             kernel   mm           scripts

---------------------------
●config kernel

[root@localhost linux-2.6.11]# cd configs/
[root@localhost configs]# ls
kernel-2.6.11-i586.config      kernel-2.6.11-i686.config
kernel-2.6.11-i586-smp.config  kernel-2.6.11-i686-smp.config
[root@localhost configs]# cp kernel-2.6.11-i686.config .config
[root@localhost configs]# cd ..
[root@localhost linux-2.6.11]# make oldconfig
...
[root@localhost linux-2.6.11]# diff -u ./.config configs/kernel-2.6.11-i686.config
--- ./.config   2005-05-14 22:41:38.000000000 +0900
+++ configs/kernel-2.6.11-i686.config   2005-05-14 21:58:18.000000000 +0900
@@ -1,7 +1,8 @@
+# i386
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-prep
-# Sat May 14 22:41:38 2005
+# Linux kernel version: 2.6.11.7
+# Sat May 14 21:58:18 2005
 #
 CONFIG_X86=y
 CONFIG_MMU=y
[root@localhost linux-2.6.11]#


--------------------
●change KConfig as you like

[root@localhost linux-2.6.11]# make xconfig

お好みで設定変更。 あとでインストールするときのために local version も付けておこう。

ちなみに、make xconfig しようとして Qt がインストールされていないとおこられる場合は yum install qt-devel すればよい。
---------------------------
●make kernel.

note that making kernel with default config will take so long time. because the configuration contains most of all modules to be compiled.

[root@localhost linux-2.6.11]# make
[root@localhost linux-2.6.11]# make modules
[root@localhost linux-2.6.11]# make modules_install


→ /lib/modules/2.6.11-prep1.14_FC3-20050515-3/ とかのディレクトリが作成される。

[root@localhost linux-2.6.11]# make install


→ vmlinuz-2.6.11-prep1.14_FC3-20050515-3 と initrd-2.6.11-prep1.14_FC3-20050515-3.img が /boot にコピーされて、/boot/grub/grub.conf にエントリが追加される。

ということで、再起動。


nice!(0) 
共通テーマ:パソコン・インターネット

nice! 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。