Bembel-B Blog

2006/08/25

Rebuilding an FC5 Kernel Optimized for AMD Athlon K7

Filed under: Athlon,build,compile,Fedora,Fedora Core,K7,Kernel,rebuild,RPM,rpmbuild — FrankZabbath @ 23:02

Fedora doesn’t ship with an x86 Athlon (K7 series i.e. Athlons up to Athlon XP) optimized Kernel, so I wanted to build one (the standard one w/o xen etc.) myself. I didn’t find any info on the web about this, except that MK7 has to be enabled in the kernel config.

Fedora Core Logo

Phew, MK7! Sounds scaringly like MI5, MI6 or even MKULTRA.. :))

WARNING: I’m not very familiar with compiling Kernels nor with the Kernel RPMs of Fedora. I once did a vanilla Kernel compile from source and some simple rebuilds of Fedora Kernel RPMs. The described procedure seems to be working for me. But be warned!

0.) Setup non-root rpmbuild environment

Don’t build as root! Be sure to have rpmdevtools RPM installed. Then as the user you want to build with, issue fedora-buildrpmtree. This will setup your rpmbuild environment including a directory ~/rpmbuild.

1.) Get original FC5 Kernel source

Download latest Fedora Kernel source RPM. In my case that is kernel-2.6.17-1.2174_FC5.src.rpm.
Extract the RPM with fedora-extract kernel-2.6.17-1.2174_FC5.src.rpm.

2.) Enable Athlon RPM builds

Create a Kernel config file for Athlon K7 architecture. Do this by copying the kernel-*-i686.config to kernel-*-athlon.config (of course with the * replaced by the Kernel version) and changing that copy like shown in the diff below:

[scheff@p512o kernel-2.6.17-1.2174_FC5]$ diff kernel-2.6.17-athlon.config kernel-2.6.17-i686.config
2772c2772
< # CONFIG_M686 is not set
---
> CONFIG_M686=y
2778c2778
< CONFIG_MK7=y
---
> # CONFIG_MK7 is not set

This defines an architecture K7 instead of i686.

Edit the kernel-2.6.spec file like shown in this diff:

[scheff@p512o kernel-2.6.17-1.2174_FC5]$ diff kernel-2.6.spec kernel-2.6.spec.orig
11c11
< %define buildxen 0
---
> %define buildxen 1
13c13
< %define buildkdump 0
---
> %define buildkdump 1
26c26
< %define release %(R="$Revision: 1.2175 $"; RR="${R##: }"; echo ${RR%%?})_FC5
---
> %define release %(R="$Revision: 1.2174 $"; RR="${R##: }"; echo ${RR%%?})_FC5
35c35
< %define all_x86 i586 i686 athlon
---
> %define all_x86 i586 i686
67,72d66
< %ifarch athlon
< %define all_arch_configs $RPM_SOURCE_DIR/kernel-%{kversion}-athlon*.config
< %define image_install_path boot
< %define signmodules 1
< %endif
<
173c167
< ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 ia64 athlon
---
> ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 ia64
237,238d230
< Source77: kernel-%{kversion}-athlon.config
<

To sum it up, I enabled building for the Athlon architecture by expanding the i686 entries, defined the aforementioned config file, disabled building of kdump and xen Kernels and increased the revision number.
I increased the revision so I wouldn’t have to replace my recent official Kernel and for better distinguishabilty, but this also means that eventually needed kernel module RPMs have to be rebuilt.

3.) Build the RPMs

Create symbolic links in ~/rpmbuild/SOURCES to the diretory’s content of the extracted RPM e.g. like this:

[scheff@p512o kernel-2.6.17-1.2174_FC5]$ ln -s /home/scheff/src/kernel-2.6.17-1.2174_FC5/* /home/scheff/rpmbuild/SOURCES/

Build the binary and and source RPMs with:

[scheff@p512o kernel-2.6.17-1.2174_FC5]$ rpmbuild -ba --target=athlon ~/rpmbuild/SOURCES/kernel-2.6.spec

The building process will take a very long time (for me about an hour or so). But once successfully finished (exit 0) you should find these RPMs:
~/rpmbuild/RPMS/athlon/kernel-2.6.17-1.2175_FC5.athlon.rpm
~/rpmbuild/RPMS/athlon/kernel-debuginfo-2.6.17-1.2175_FC5.athlon.rpm
~/rpmbuild/RPMS/athlon/kernel-devel-2.6.17-1.2175_FC5.athlon.rpm
~/rpmbuild/SRPMS/kernel-2.6.17-1.2175_FC5.src.rpm

Now you could delete the symlinks in the ~/rpmbuild/SOURCES diretory, to keep it clean.

4.) Installing the RPMs

Well, if you dared to build the Kernel RPMs you shouldn’t need assistance in intalling them, but just for the sake of completeness:

[root@p512o ~]# rpm -ihv /home/scheff/rpmbuild/RPMS/athlon/kernel-2.6.17-1.2175_FC5.athlon.rpm /home/scheff/rpmbuild/RPMS/athlon/kernel-devel-2.6.17-1.2175_FC5.athlon.rpm

Reboot and check if your homegrown Kernel behaves nicely. For me it did very well and a bit faster me thinks.
And don’t forget that you need to build the matching kernel modules, if the kernel revision number was changed. For me that is kernel-module-ntfs-2.6.17-1.2175_FC5-2.1.27-0.rr.10.5 (see linux-ntfs homepage for build instructions) and kmod-fglrx-8.27.10-0.2.6.17_1.2175_FC5 (see my previous posting for build instructions) both with Athlon optimizations.

Caveats

One thing that makes me wonder, is that uname -m still shows i686, but I’m not sure if this is normal.
The kernel config shows 3D Now is enabled and Machine is indeed set to K7.
It would certainly have been better to do a menuconfig with the 2.6.17-1.2174_FC5 config in the kernel source tree. Here’s the config diff:

[scheff@p512o boot]$ diff config-2.6.17-1.2175_FC5 config-2.6.17-1.2174_FC5
3,4c3,4
< # Linux kernel version: 2.6.17-1.2175_FC5
< # Fri Aug 25 01:03:12 2006
---
> # Linux kernel version: 2.6.17-1.2174_FC5
> # Tue Aug  8 15:26:05 2006
111c111
< # CONFIG_M686 is not set
---
> CONFIG_M686=y
117c117
< CONFIG_MK7=y
---
> # CONFIG_MK7 is not set
133a134
> CONFIG_X86_PPRO_FENCE=y
142d142
< CONFIG_X86_USE_3DNOW=y

If you find any errors or nonsense please comment. Feel free to ask questions, too. This posting is prone to change, as this was my very first and dirty attempt.

ChangeLog

[070429 Fix minor typos. Fix some markup. Add logo image.]

Advertisements

Building ATI fglrx Graphics Driver Kernel Module RPMs Based on Livna Releases

For the latest Fedora Core 5 Kernel there were no ATI fglrx drivers available in the Livna repository for many days, so I built them myself. It’s also not advised to use the driver installer provided by ATI, as this will mess up your system. This procedure should also work with the Livna NVidia drivers, I guess.

Fedora Core Logo

The funny thing is, half a day later, the long awaited RPMs were finally available in the Livna repository. But as it wasn’t all too trivial to build these RPMs for rather a beginner like me, here is what I did.

0.) Setup non-root rpmbuild environment

Don’t build as root! Be sure to have rpmdevtools RPM installed. Then as the user you want to build with, issue fedora-buildrpmtree. This will setup your rpmbuild environment including a directory ~/rpmbuild.

1.) Get the latest Livna fglrx binary, devel and source RPMs

Install Livna binaries and devel RPMs:

yum --enablerepo=livna install kmod-fglrx xorg-x11-drv-fglrx-devel

Download the matching source RPM from Livna, e.g.:

wget http://rpm.livna.org/fedora/5/SRPMS/fglrx-kmod-8.27.10-2.2.6.17_1.2157_FC5.src.rpm

2.) Adapt the source RPM to the new kernel release

Extract the source RPM using fedora-extract.

Modify the fglrx-kmod.spec file like shown in this diff:

[scheff@p512o fglrx-kmod-8.27.10-2.2.6.17_1.2174_FC5]$ diff fglrx-kmod.spec fglrx-kmod.spec.orig
7c7
< %{!?kversion: %define kversion 2.6.17-1.2174_FC5}
---
> %{!?kversion: %define kversion 2.6.17-1.2157_FC5}
13,14c13,14
< %ifarch i686 ppc athlon
< #define smpvar smp
---
> %ifarch i686 ppc
> %define smpvar smp
16c16
< %ifarch i686 x86_64 athlon
---
> %ifarch i686 x86_64
19c19
< #define kdumpvar kdump
---
> %define kdumpvar kdump
25c25
< Release:        0.%(echo %{kverrel} | tr - _)
---
> Release:        2.%(echo %{kverrel} | tr - _)
38c38
< ExclusiveArch:  i586 i686 x86_64 athlon
---
> ExclusiveArch:  i586 i686 x86_64

I changed the kernel version to the desired revision number, lowered the fglrx release number to be able to catch the official build via yum updates and enabled athlon architecture builds. Furthermore I disabled the forced building of kernel modules for smp and kdump kernels. because I don’t use them.

This was the only file, that contained the kernel version as a variable. The other files partly use uname -r, so we will have to build the modules with the corresponding kernel release running.

3.) Build the fglrx kernel module

As mentioned above, one has to be running the kernel release one wants to build for. So if you are running a different kernel now, boot the right one.

Now symlink the sources to your rpmbuild directory:

ln -s /home/scheff/src/fglrx-kmod-8.27.10-2.2.6.17_1.2174_FC5/* /home/scheff/rpmbuild/SOURCES/

To build the Athlon optimized kernel module binary RPM type:

rpmbuild -bb --target=athlon ~/rpmbuild/SOURCES/fglrx-kmod.spec

Now you could delete the symlinks in the ~/rpmbuild/SOURCES directory, to keep it clean.

That’s it. You now should have the kmod-fglrx-*.rpm in your ~/rpmbuild/RPMS/{arch} directory ready for installation.
If you are updating your running fglrx kernel module, you will have to stop the X server (# init 4), unload the fglrx kernel module (# rmmod fglrx) and then start up your X server again (# init 5).

ChangeLog

[070429 Fix minor typos. Fix some markup. Add logo image.]
[060929 Fix minor typo and markup]

Create a free website or blog at WordPress.com.