Sessió 3. Compilació del kernel

De Wikijoan
Dreceres ràpides: navegació, cerca

16-01-2008

L'objectiu podria ser col.locar un driver que no tenim


Per saber el número de ditribució del kernel:

$ uname -a

Linux ali15 2.6.18-3-686 #1 SMP Mon Dec 4 16:41:14 UTC 2006 i686 GNU/Linux

-> això vol dir que és la distribució 2.6

hi ha un salt brutal de la distribució 2.4 a 2.6. Per ex, política de dispositius (hi ha hotplug, posada en calent de dispositius, i una configuració dinàmica dels dispositius)

Les distribucions parelles (2.4, 2.6 són estables).

Les imparelles són de testing.

aptitude search linux | grep 2.6


Contingut

obtenció del kernel

obtenim els fonts a kernel.org o a linux.org -> ho obtindrem amb format tar.gz (tgz) o tar.bz2

(empaquetament i compressió, sense patent, i comprimeixen millor que les eines amb patent)

una altra possibilitat és anar a la distribució Debian (paquet .deb)

$ aptitude search linux-source
-> linux-source-2.6.18

Entrem com a root (su, pwd: ice)

$ aptitude install linux linux-source-2.6.18

es connecta a rediris

Debian, les fonts les posa en el directori:

cd /usr/src

Ens hem descarregat el fitxer linux-source-2.6.18.tar.bz2 (és el font)

Hi ha una sèrie de guions-scripts que ens poden ajudar:

aptitude search kernel-package
aptitude install kernel-package


el kernel-package té la missió en integrar els esforços que fem de compilar el nucli i convertir-ho en un paquet deb.

el kernel-package fa el make config (configuració), make install (compilació),... que farem manualment, i a més els guions de debian que ens portaran a què això sigui un paquet de Debian.

Ara hem de desplegar tot l'arbre del Kernel des d'aquesta arrel (descomprimir i desplegar):

si hagués vingut en format tar per descomprimir seria:

$ tar zxf linux-source-2.6.18.tar.bz2

però com que està en format tar.bz2 l'ordre és:

$ tar jxf linux-source-2.6.18.tar.bz2

(no he ficat l'opció v de verbose)

aquesta descompressió omple uns 200MB

Recordem que estem baixant els fonts, no els binaris.

Ara estem copiant els fonts al disc.

cd /usr/src/linux-source-2.6.18

en aquest directori tenim els fonts

Configuració

s'ha de fer make config, però hi ha el problema que és que s'ha de contestar centenars de preguntes

una altra possibilitat és partir d'una configuració de kernel que ja existeix.

$ ls /boot

aquí hi ha els fitxers de config que podem fer servir per a la configuració

mirar que hi ha dins de config-2.6.18-3-686 (cat)

copiem el fitxer al nostre directori:

$ cp /boot/config-2.6.18-5-686 .config
$ cat .config | more


(el fitxer, com que té punt, vol dir que és ocult)

per saber quantes línies té:

wc -l .config

-> més de 3000 línies-etiquetes, de les quals la majoria són preguntes

$ make config -> no el farem, ens faria unes 3500 preguntes
$ make xconfig -> accedim a les etiquetes que ens interessen

Em dóna un problema, falten les llibreries de QT (que ens portaria a una interfície gràfica)

anem allà on s'ha instal.lat la documentació

pushd /usr/share/doc/linux-source-2.6.18 (es torna al directori inicial amb popd)

podem llegir el readme

make menuconfig #->també falla.

Solució:

$ aptitude search ncurses

fem una instal.lació de libncurses-dev (de development)

aptitude install libncurses-dev

i ara make menuconfig sí que funciona.

ncurses is a programming library providing an API, allowing the programmer to write text user interfaces in a terminal-independent manner. It also optimizes screen changes, in order to reduce the latency experienced when using remote shells.

També podíem instal.lar les que ens provocaven l'error en make xconfig

aptitude search qt4-dev

busquem un paquet que sigui dev

aptitude install libqt4-dev  

sembla ser que qt4 no va, qt3 sí que va

un cop instal.lat, make xconfig

si funciona, tenim dues possibilitats:

$ make xconfig # o bé
$ make menuconfig

Abans de fer això, fem

$ make clean
$ make menuconfig

per saber quin processador tinc, des d'un altre

terminal:

cat /proc/cpuinfo

seleccionem Pentium 4

Les respostes són tres si (seleccionar), no (no seleccionar), o M (mòdul, el carrega si el necessita en temps d'execució). El ficarem com a mòdul si no sé si el faré servir.


Integrados en la imagen o modulos.

La elección de si debemos marcar algo como módulo o bien integrarlo en la imagen, queda en la mayoría de los casos al libre albedrio de cada individuo, no obstante hay casos en los que solo podemos integrarlo. No es bueno tener todo integrado en la imagen, ya que esto la espesaría hasta tal punto de no caber en un disket o bien, en caso de que excediera mucho el

tamaño "normal", produciría un error al compilarse. Por tanto debemos escojer ciertas cosas como módulos. Claro ejemplo de ello son tarjetas de red, de sonido, soporte para dispositivos USB, SCSI, PCI, Paralelo, AGP, etc. Ya que esto suele ocupar bastante espacio en la imagen.

El Plug&Play el SO competeix amb la BIOS

Block Devices -> són els discs

RAID ann LVM (gestió de volums lògics -> que els diferents discs es vegin com una sola unitat)

Surto i guardo la nova configuració

Compilació

ara ho compilem:

hem de seguir les indicacions que trobem a:

pushd /usr/share/doc/kernel-package/

popd
$ make-kpkg clean
$ make-kpkg --initrd --revision=joan1 kernel-image

initrd serveix per carregar en memòria un boot d'un disc d'arranc, i permet carregar guions que ens permeten bootar des de, per ex, un dispositiu USB.

-> ho hem fet sense initrd per que a l'aula no tenim permís per accedir al boot

i ara triga molta estona

anem a instal.lar un driver de Nvidia:
<pre>
$ aptitude search nvidia-kernel-source
$ aptitude search ndiswrapper
$ aptitude install nvidia-kernel-source

ara trobem a /usr/src el nvidia-kernel-source.tar.gz

$ tar zxf nvidia-kernel-source.tar.gz

ara hi ha un nou directori que es diu modules

/usr/src/modules/nvidia-kernel

i ara podem compilar aquest mòdul

$ aptitude install ndiswrapper-source

ara trobem a /usr/src el ndiswrapper-source.tar.bz2

$ tar jxf ndiswrapper-source.tar.bz2

El ndiswrapper el que fa és agafar un driver de windows i li fa un envoltori per tal que funcioni per a Linux.

lsmod -> podem saber els mòduls carregats en el kernel

la instal.lació d'un driver comporta una entrada en el directori /boot/config

cat /boot/config-2.6.18-5-686 | grep USB | more

(aplico un filtre, hi ha 3500 entrades)


per saber els mòduls que tenim instal.lats

$ ls -R /lib/modules/`uname -r`
ls -R /lib/modules/`uname -r` | wc -l -> per saber el número de mòduls instal.lats (2774)

això és la biblioteca de mòduls, que no vol dir que estiguin instal.lats

-> uname -r ens diu el kernel que tenim instal.lat, per ex 2.6.22.14-generic (Ubuntu).

i la instrucció /lib/modules/`uname -r` donaria com a resultat /lib/modules/2.6.22.14-generic

ls -R -> recursiu dins dels directoris



Per instal.lar un mòdul:

<pre>
$ modprobe -> prova un mòdul en el kernel per veure si funciona, i si no, ho descarta
$ insmod -> instal.la el mòdul

modprobe sound

lsmod sound

operació inversa (remove):

rmmod sound

cat /etc/modules

This file contains the names of kernel modules that should be loaded

  1. at boot time, one per line. Lines beginning with "#" are ignored.

-> només hi ha el mòdul loop

cd /etc/modutils

Instal.lació

un cop ha acabat la compilació del kernel, i sense fer clean, des de /usr/src/linux-source-2.6.18

make-kpkg modules

per cada mòdul que hem baixat (ndiswrapper, nvidia) crea un paquet deb, que ara els podem instal.lar.

cd /usr/src/modules

i ara dins la carpeta usr/src veig els paquets deb que s'han creat:

nvidia-kernel-2.6.18_1.0.8776-4+joan1_i386.deb

ndiswrapper-modules-2.6.18_1.28-1+joan1_i386.deb

aquests paquets deb s'han d'instal.lar

$ dpkg -i ndiswrapper-modules-2.6.18_1.28-1+joan1_i386.deb
<$pre>
no em deixa perque hi ha un problema de dependències.

Primer s'ha de fer:
<pre>
aptitude install  ndiswrapper-utils-1.9

Nosaltres el ndiswrapper l'hem compilat a partir de les fonts, però evidentment per Inet ens podem baixar directament els .deb.

L'eina ràpida per fer tot això és el module-assistant:

aptitude install module-assistant (ja estava instal.lat)

#module-assistant

és una eina que intenta fer les coses de manera més còmode.

Es pot executar des de la consola, o bé amb interfície pseudo-gràfica (igual que aptitude, que si no es posa res apareix la interfície gràfica)


PREPARE -> la únia cosa que necessita per compilar un mòduls són els headers

SELECT -> tot el que apareix aquí són fonts aquí trobem el ndiswrapper i el nvidia-kernel, i els seleccionem

GET -> ha anat molt ràpid perquè ja els teníem

BUILD -> malament, perquè els headers no coincideixen


$ aptitude search header
Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines