El nucli (també conegut per l'anglicisme kernel) és la part fonamental del sistema operatiu. És el programari responsable de facilitar a les aplicacions del sistema un accés segur al maquinari i de gestionar els recursos compartits (memòria, espai de disc, perifèrics, etc.).
Accedir directament al maquinari pot ser una tasca realment complexa per a la majoria d'aplicacions. El nucli s'encarrega d'oferir una interfície més senzilla d'accés al maquinari mitjançant una abstracció del maquinari que permet amagar (encapsular) la complexitat del sistema i proporcionar un accés senzill i controlat al maquinari. A aquesta interfície se l'anomena màquina virtual.
Tots els SO disposen d'un nucli, encara que hi han diferents tipus de nucli:
Depenent del tipus de nucli aquest durà a terme unes o altres tasques.
Consulteu l'apartat el kernel del tema 15 sobre sistemes operatius.
Segons l'estàndard FHS, trobareu el nucli a la carpeta /boot:
$ ls -l /boot/ total 40256 -rw-r--r-- 1 root root 528310 2009-10-20 23:56 abi-2.6.28-16-generic -rw-r--r-- 1 root root 629174 2009-10-16 20:03 abi-2.6.31-14-generic -rw-r--r-- 1 root root 629174 2009-11-10 19:52 abi-2.6.31-15-generic -rw-r--r-- 1 root root 96866 2009-10-20 23:56 config-2.6.28-16-generic -rw-r--r-- 1 root root 111371 2009-10-16 20:03 config-2.6.31-14-generic -rw-r--r-- 1 root root 111371 2009-11-10 19:52 config-2.6.31-15-generic drwxr-xr-x 2 root root 4096 2009-11-26 06:27 grub -rw-r--r-- 1 root root 7003553 2009-11-02 11:35 initrd.img-2.6.28-16-generic -rw-r--r-- 1 root root 7894440 2009-11-23 09:12 initrd.img-2.6.31-14-generic -rw-r--r-- 1 root root 7895697 2009-11-26 06:27 initrd.img-2.6.31-15-generic -rw-r--r-- 1 root root 128796 2009-10-23 18:11 memtest86+.bin -rw-r--r-- 1 root root 1450875 2009-10-20 23:56 System.map-2.6.28-16-generic -rw-r--r-- 1 root root 1664737 2009-10-16 20:03 System.map-2.6.31-14-generic -rw-r--r-- 1 root root 1665323 2009-11-10 19:52 System.map-2.6.31-15-generic -rw-r--r-- 1 root root 1074 2009-10-20 23:58 vmcoreinfo-2.6.28-16-generic -rw-r--r-- 1 root root 1196 2009-10-16 20:06 vmcoreinfo-2.6.31-14-generic -rw-r--r-- 1 root root 1196 2009-11-10 19:55 vmcoreinfo-2.6.31-15-generic -rw-r--r-- 1 root root 3491696 2009-10-20 23:56 vmlinuz-2.6.28-16-generic -rw-r--r-- 1 root root 3890400 2009-10-16 20:03 vmlinuz-2.6.31-14-generic -rw-r--r-- 1 root root 3892224 2009-11-10 19:52 vmlinuz-2.6.31-15-generic
Com podeu veure el nucli comparteix la carpeta /boot amb la configuració del gestor d'arrencada GRUB (carpeta /boot/grub) i amb altres fitxers de suport al procés d'arrencada, com els fitxers initrd.
$ sudo apt-get install linux-doc
És un paquet tonto que instal·la la documentació de l'ultima versió del kernel disponible als repositoris. Per saber els fitxers instal·lats:
$ sudo dpkg -L linux-doc-2.6.28
Ho trobareu a:
/usr/share/doc/linux-doc-2.6.28
Alguns fitxers estan comprimits i cal descomprimir-los amb gunzip.
Consulteu l'article sobre GRUB:
GRUB. Paràmetres del kernel
Consulteu el fitxer /proc/cmdline
$ cat /proc/cmdline root=UUID=7f5a86b3-89b8-434c-b2cb-c66b971b247e ro quiet splash
Es pot utilitzar la comanda uname:
$ uname -r
Consulteu l'article:
Compilació del kernel
Vegeu l'article Mòduls del Kernel.
Quan el sistema és queda penjat sempre podem provar la aturada "gentil" del kernel. La combinació de tecles és
ALT+ “Impr Pant" + R + E + I + S + U + B
S'ha de prémer les tecles REISUB una a una i poc a poc. El significat de les tecles és el següent:
Consulteu també sysrq
Recursos:
Vegeu sysrq
Vegeu l'article dkms.
El procés d'arrencada executarà primer el kernel i després la imatge initrd.img es carregarà en ram i serà executada. La imatge initrd és muntada com a root en mode lectura i escriptura i s'executa el fitxer:
/linuxrc
o
/init
que es troba dins la imatge. Normalment, quan s'acaba l'execució de la imatge, aleshores es munta el sistema de fitxers arrel inicial i el initrd es mou a /initrd. Aleshores s'inicia la seqüència de boor (procés init).
initrd s'utilitza per proporcionar moduls addicionals com per exemple SCSI o RAID.
Consulteu també:
break=top Break before any scripts are run (including usplash) break=modules Break before any modules are loaded break OR break=premount Break before the premount scripts are run (ie: udev) break=mount Break before the root partition is mounted break=bottom Break before the 'bottom' scripts are run break=init Break just before control is handed over to /sbin/init.
Consulteu:
Hi has dos possibilitats:
Sistema de fitxers ext3 comprimit:
cd ~ mkdir temp cd temp mkdir initrd gunzip < /initrd.img > initrdtest.img mount -o loop initrdtest.img initrd cd initrd ls
Si us dona un error:
mount: haureu d'especificar el tipus del sistema de fitxers
Aleshores és que es tracta d'un fitxer fet amb cpio.
Fitxer comprimit i amb cpio:
$ cd $ mkdir initrdtest $ cd initrdtest/ $ gunzip < /initrd.img |cpio -i --make-directories 37585 blocks $ ls bin conf etc init lib sbin scripts usr
Per tornar a crear/comprimir el fitxer:
$ find . | cpio --create --format='newc' > /tmp/newinitrd 16524 blocks # gzip /tmp/newinitrd
L'script principal és init, que està a l'arrel del fitxer initrd. Si us fixeu acaba executant els scripts de la carpeta /scripts:
$ cat init run_scripts /scripts/init-top
Abans es teni l'ordre:
mkinitrd
Proporcionada pel paquet:
initrd-tools
Ara s'utilitza
mkinitramfs
Proporcionada pel paquet:
initramfs-tools
Esl executables són:
$ dpkg -L initramfs-tools | grep bin /usr/sbin /usr/sbin/mkinitramfs /usr/sbin/mkinitramfs-kpkg
/usr/sbin/update-initramfs
Consulteu:
$ zcat /proc/config.gz > .config
Ara podeu buscar paràmetres amb grep. Per exemple els paràmetres de Xen:
$ cat .config | grep XEN CONFIG_X86_64_XEN=y CONFIG_X86_XEN_GENAPIC=y CONFIG_XEN_PCIDEV_FRONTEND=y CONFIG_XEN_PCIDEV_FE_DEBUG=y # CONFIG_NETXEN_NIC is not set CONFIG_XEN=y CONFIG_XEN_INTERFACE_VERSION=0x00030205 # XEN # CONFIG_XEN_PRIVILEGED_GUEST is not set CONFIG_XEN_UNPRIVILEGED_GUEST=y CONFIG_XEN_PRIVCMD=y CONFIG_XEN_XENBUS_DEV=y CONFIG_XEN_BACKEND=y CONFIG_XEN_BLKDEV_BACKEND=y CONFIG_XEN_BLKDEV_TAP=y CONFIG_XEN_NETDEV_BACKEND=y # CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set CONFIG_XEN_NETDEV_LOOPBACK=y CONFIG_XEN_PCIDEV_BACKEND=y CONFIG_XEN_PCIDEV_BACKEND_VPCI=y # CONFIG_XEN_PCIDEV_BACKEND_PASS is not set # CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set CONFIG_XEN_PCIDEV_BE_DEBUG=y CONFIG_XEN_TPMDEV_BACKEND=y CONFIG_XEN_BLKDEV_FRONTEND=y CONFIG_XEN_NETDEV_FRONTEND=y CONFIG_XEN_SCRUB_PAGES=y CONFIG_XEN_DISABLE_SERIAL=y CONFIG_XEN_SYSFS=y CONFIG_XEN_COMPAT_030002_AND_LATER=y # CONFIG_XEN_COMPAT_030004_AND_LATER is not set # CONFIG_XEN_COMPAT_LATEST_ONLY is not set CONFIG_XEN_COMPAT=0x030002 CONFIG_XEN_SMPBOOT=y
Consulteu uname
$ file /boot/vmlinuz-2.6.31-15-generic /boot/vmlinuz-2.6.31-15-generic: Linux kernel x86 boot executable bzImage, version 2.6.31-15-generic (b[email protected], RO-rootFS, root_dev 0x801, swap_dev 0x3, Normal VGA
Consulteu file.
https://wiki.ubuntu.com/Kernel/Dev/Flavours
El sabor del kernel és escollit automàticament segons el tipus de CD escollit durant la instal·lació (Server/Desktop i la plataforma). Algunes decisions de com utilitzar PAE es fan segons la plataforma i la memòria RAM disponible
També cal tenir el compte que hi ha un sistema per a màquines virtuals:
linux-image-virtual o el paquet linux-virtual
Que esta optimitzat per a córrer a Xen, KVM/Qemu i EC2 de Amazon.
Sobre les diferències entre cada tipus de kernel: