Linux/Jádro/Kompilace/Ubuntu

Jádro: Kompilace/Ubuntu - Kompilace jádra v Ubuntu:

2008-03-12

editovat

Kompilace jádra pro Ubuntu z balíku linux-source-2.6.27-11.27: Linux kernel source for version 2.6.27 with Ubuntu patches (Intrepid Updates)

Rozbalení
editovat

Po instalaci balíku:

cd /usr/src
ls -Gl
    -rw-r--r--  1 root 52026782 2009-01-29 22:10 linux-source-2.6.27.tar.bz2
tar xjf linux-source-2.6.27.tar.bz2

Vygeneroval jsem si defaultní konfiguraci jádra .config.000-default a zkopíroval jsem rovněž konfiguraci generického jádra, abych si je mohl případně porovnat (rozdíl ve velikosti, jak vidno, značný). Pak jsem kompiloval dle konfigurace generického jádra.

Konfigurace
editovat
cd /usr/src/linux-source-2.6.27

make defconfig
mv .config .config.000-default
cp -p /bin/config-2.6.27-11-generic .config-2.6.27-11-generic 
cp -p .config-2.6.27-11-generic .config
ls -Glah .con*
    -rw-r--r-- 1 root 90K 2009-03-12 22:21 .config
    -rw-r--r-- 1 root 57K 2009-03-12 22:13 .config.000-default
    -rw-r--r-- 1 root 90K 2009-03-12 22:21 .config-2.6.27-11-generic

head -4 .config.000-default 
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.27.10
# Thu Mar 12 22:13:02 2009

Zajímavé je, že ačkoliv ubuntí balík má verzi linux-source-2.6.27-11.27, tak ta verze kernelu je 2.6.27.10.

Kompilace
editovat
make

ls -Gl /boot/vmlinuz-2.6.27-11-generic 
    -rw-r--r-- 1 root 2248912 2009-01-29 22:11 /boot/vmlinuz-2.6.27-11-generic
find -iname bzimage -exec ls -Gl {} \;
    -rw-r--r-- 1 root 2237264 2009-03-13 01:12 ./arch/x86/boot/bzImage
    lrwxrwxrwx 1 root      22 2009-03-13 01:12 ./arch/i386/boot/bzImage -> ../../x86/boot/bzImage

ls -Gl System.map 
    -rw-r--r-- 1 root 1008631 2009-03-13 01:12 System.map
ls -Gl /boot/System.map-2.6.27-11-generic 
    -rw-r--r-- 1 root 1031799 2009-01-29 22:11 /boot/System.map-2.6.27-11-generic

wc /boot/System.map-2.6.27-11-generic System.map 
    31752   95256 1031799 /boot/System.map-2.6.27-11-generic
    30921   92763 1008631 System.map
 

Z toho je vidět, že i když zkompilované jádro je přibližně stejně velké jako generické z distribuce, jeho velikost není přesně identická.

Instalace jádra
editovat
make install
    sh /usr/src/linux-source-2.6.27/arch/x86/boot/install.sh 2.6.27.10 arch/x86/boot/bzImage System.map "/boot"

ls -Glt /boot
    -rw-r--r-- 1 root   91358 2009-03-13 09:06 config-2.6.27.10
    -rw-r--r-- 1 root 1008631 2009-03-13 09:06 System.map-2.6.27.10
    -rw-r--r-- 1 root 2237264 2009-03-13 09:06 vmlinuz-2.6.27.10
Instalace modulů
editovat
 
make modules_install

cd /lib/modules
du --max-depth=2 -h 2.6.27-11-generic 2.6.27.10
2,0M	2.6.27-11-generic/volatile
28K	2.6.27-11-generic/initrd
7,5M	2.6.27-11-generic/kernel/sound
8,3M	2.6.27-11-generic/kernel/net
8,2M	2.6.27-11-generic/kernel/fs
56M	2.6.27-11-generic/kernel/drivers
3,5M	2.6.27-11-generic/kernel/ubuntu
204K	2.6.27-11-generic/kernel/lib
1,2M	2.6.27-11-generic/kernel/crypto
828K	2.6.27-11-generic/kernel/arch
86M	2.6.27-11-generic/kernel
90M	2.6.27-11-generic

54M	2.6.27.10/kernel/sound
98M	2.6.27.10/kernel/net
85M	2.6.27.10/kernel/fs
408M	2.6.27.10/kernel/drivers
33M	2.6.27.10/kernel/ubuntu
1,1M	2.6.27.10/kernel/lib
6,2M	2.6.27.10/kernel/crypto
5,0M	2.6.27.10/kernel/arch
689M	2.6.27.10/kernel
691M	2.6.27.10

find 2.6.27-11-generic > 2.6.27-11-generic.lst
find 2.6.27.10  > 2.6.27.10.lst
wc 2.6.27-11-generic.lst 2.6.27.10.lst
  2776   2776 143969 2.6.27-11-generic.lst
  2759   2759 121219 2.6.27.10.lst
 

I když v generických modulech v.11 je o 17 modulů více, naše moduly v.10 jsou více než 5x větší - asi defaultně obsahují spoustu všelijakých symbolů pro debugging nebo co navíc, zatím to moc nechápu.

Ještě si porovnáme názvy zkompilovaných modulů (odstraníme název adresáře s číslem verze na začátku - mohli jsme si to ušetřit při findu):

 
perl -pe -i.bak 's|^.*?/||' 2.6.27-11-generic.lst
perl -pe -i.bak 's|^.*?/||' 2.6.27.10.lst

diff 2.6.27-11-generic.lst 2.6.27.10.lst

1c1
< 2.6.27-11-generic
---
> 2.6.27.10
5,23c5
< volatile
< volatile/wlan_xauth.ko
< volatile/wlan_wep.ko
< volatile/wlan_tkip.ko
< volatile/wlan_scan_sta.ko
< volatile/wlan_scan_ap.ko
< volatile/wlan_ccmp.ko
< volatile/wlan_acl.ko
< volatile/wlan.ko
< volatile/wl.ko
< volatile/ath_rate_sample.ko
< volatile/ath_rate_onoe.ko
< volatile/ath_rate_minstrel.ko
< volatile/ath_rate_amrr.ko
< volatile/ath_pci.ko
< volatile/ath_hal.ko
< volatile/.mounted
< initrd
< initrd/vesafb.ko
---
> modules.order
2769a2752
> source

Tak je vidět, které moduly má subverze 11 navíc.

Info o balíku
editovat
 
dpkg -s linux-source-2.6.27

Package: linux-source-2.6.27
Status: install ok installed
Priority: optional
Section: devel
Installed-Size: 50944
Maintainer: Ubuntu Kernel Team <kernel-team@lists.ubuntu.com>
Architecture: all
Source: linux
Version: 2.6.27-11.27
Provides: linux-source, linux-source-2.6
Depends: binutils, bzip2, coreutils | fileutils (>= 4.0)
Recommends: libc-dev, gcc, make
Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev
Description: Linux kernel source for version 2.6.27 with Ubuntu patches
 This package provides the source code for the Linux kernel version
 2.6.27.
 .
 This package is mainly meant for other packages to use, in order to build
 custom flavours.
 .
 If you wish to use this package to create a custom Linux kernel, then it
 is suggested that you investigate the package kernel-package, which has
 been designed to ease the task of creating kernel image packages.
 .
 If you are simply trying to build third-party modules for your kernel,
 you do not want this package. Install the appropriate linux-headers
 package instead.

kernel-package

editovat

Podle rady si tedy ještě nainstaluji kernel-package (pro další experimenty).

Do /boot/grub/menu.lst přidám např:

title           sda4 new Ubuntu 8.10 Ibex, 2.6.27.10 compiled
root            (hd0,3)
kernel          /boot/vmlinuz-2.6.27.10 root=/dev/sda4 ro             

title           sda4 new Ubuntu 8.10 Ibex, 2.6.27.10 compiled (recovery mode)
root            (hd0,3)
kernel          /boot/vmlinuz-2.6.27.10 root=/dev/sda4 ro  single