Linux - Compilazione del nodo (Kernel) Linux - Kompilierung des Kerns (Kernel) Linux - Compilation du noyau (Kernel) Linux - Recopilación del núcleo (Kernel) Linux - Compiling the kernel

Compilação do Kernel

Este artigo tem para objectivo apresentar a compilação do núcleo (ou kernel) sob Linux.
As explicações seguintes são baseadas na versão 2.4.20 do kernel, o último em data ao momento da escrita do artigo (maro 2003). As fontes da última versão estão disponíveis telecarregamentosobre http://www.kernel.org.

As fontes “pesam” entre 25 e 30 Mo.

Descompressar as fontes


Uma vez as fontes recuperadas, reencontra-se com um ficheiro tar.bz2 ou tar.gz de acordo com o caso. Copiem no directório /usr/src/ da vossa máquina Linux, mas o não décompressar imediatamente.
Neste directório em pergunta, datilografam a encomenda seguinte:

castor@linuxbox:/usr/src$ ls -al
total 8
drwxrwsr-x	2 root	 src		  4096 Feb  8  2002 .
drwxr-xr-x   13 root	 root		 4096 May  1  1980 ..
lrwxrwxrwx	1 root	 src			12 Feb 25 15:39 linux -> linux-2.4.18
drwxr-sr-x	2 root	 src		  4096 Feb 25 15:38 linux-2.4.18
-rw-r--r--	1 root	 root	 27421046 Feb 25 15:37 linux-2.4.20.tar.bz2
castor@linuxbox:/usr/src$

O resultado pode diferir sobre a vossa máquina. A primeira coisa a fazer é suprimir a relação simbólica linux com a encomenda rm linux.
Seguidamente trata-se de décompresser o tarball recuperado previamente. Prever do lugar, as fontes décompréssées limitam as 200 Mo!!
Seguidamente criamos uma relação simbólica linux que aponta para o novo directório. De acordo com o caso, o directório no qual encontram-se as fontes décompréssées chama-se já linux, convem por conseguinte rebatizá-lo com a encomenda mv linux linux-2.4.20.

root@linuxbox:/usr/src# rm linux
rm: remove `linux'? y
root@linuxbox:/usr/src# tar -xjf linux-2.4.20.tar.bz2
root@linuxbox:/usr/src# ln -s linux-2.4.20 linux
root@linuxbox:/usr/src# ls -hal
total 27M
drwxrwsr-x	4 root	 src		  4.0k Feb 25 15:49 .
drwxr-xr-x   13 root	 root		 4.0k May  1  1980 ..
lrwxrwxrwx	1 root	 src			12 Feb 25 15:49 linux -> linux-2.4.20
drwxr-sr-x	2 root	 src		  4.0k Feb 15 15:38 linux-2.4.18
drwxr-xr-x   14 root	 src		  4.0k Nov 29 00:53 linux-2.4.20
-rw-r--r--	1 root	 src		   26M Feb 25 15:37 linux-2.4.20.tar.bz2
root@linuxbox:/usr/src#

Particularidade do núcleo Linux : Os módulos

O núcleo Linux é “modular”, quer dizer que certas opções, definidas como “módulos”, serão encarregadas apenas ao momento querido pelo núcleo. Aquilo permite economizar da memória, em detrimento da rapidez de carregamento. Por exemplo, se imprimir uma página os cada seis meses, é inútil guardar permanentemente na memória os pilotos de impressão (porto parrallèle, impressora, etc.). Somente não serão encarregados quando o utilizador quiser imprimir.

É por conseguinte importante antes de atacar-se à configuração do kernel efectivamente conhecer a utilização que deseja-se fazer da máquina sob Linux.

Configuração das opções

Existe três encomendas para configurar as fontes: make config, make menuconfig et make xconfig.

As duas estreias estão modo texto, o terceiro necessita o sistema X-window. A escolha pertence-vos, os três são totalmente equivalente. Único a estreia é ligeiramente mais vinculativa porque obriga a passar em revista a integralidade das opções.

No que me diz respeito, a minha preferência leva-se sobre make menuconfig.

root@linuxbox:/usr/src/linux# make menuconfig
( cd include ; ln -sf asm-i386 asm)
make -C scripts/lxdialog all
make[1]: Entering directory `/usr/src/linux-2.4.20/scripts/lxdialog'
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o checklist.o checklist.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o menubox.o menubox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o textbox.o textbox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o yesno.o yesno.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o inputbox.o inputbox.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o util.o util.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o lxdialog.o lxdialog.c
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DLOCALE  -DCURSES_LOC="<ncurses.h>" -c -o msgbox.o msgbox.c
gcc -o lxdialog checklist.o menubox.o textbox.o yesno.o inputbox.o util.o lxdialog.o msgbox.o -lncurses
...

Nesse momento encontramo-nos na conversão de configuração.
Decompõe-se diversas ementas, cada um que pode de novo conter sob-menus, etc.


É aconselhado fortemente ler a ajuda em linha para cada opção.
As indicações que seguem podem variar de acordo com a versão do kernel e as opções escolhidas previamente.

  • Code maturity level options : Inútil excepto para os reveladores.
  • Loadable module support : Indispensável. Permite a utilização das funcionalidades modulares do kernel. Respondem SIM todas as às opções.
  • Processor type and features : Conjunto de opções relativas ao processador. A primeira linha contem o tipo do vosso processador. Há compatibilidade ascendente, quer dizer que se entrar “Pentium-Classic” qualquer os processadores de tipo pentium e de superior poderão funcionar. É aconselhado pôr o tipo o mais parentes possível do vosso processador.
  • Machine Check Exception : Permite ao processador alertar o kernel no caso de problema. Respondem SIM.
  • Toshiba Laptop support et Dell laptop support : Respondem SIM a se possuir um portátil Toshiba ou Dell.
  • /dev/cpu/microcode - Intel IA32 CPU microcode support
    /dev/cpu/*/msr - Model-specific register support
    /dev/cpu/*/cpuid - CPU information support 
    Estas três opções podem ser postas sem perigo, podem optimizar a gestão do processador.
  • High Memory Support : Gestão de plus de 1 Go RAM Se a vossa máquina não possuir mais de 960 Mo RAM, deixar “fora”.
  • Math emulation : Emulação de co-processador. Útil unicamente para um 386 ou 486SX.
  • MTRR (Memory Type Range Register) support : Útil excepto para os dias 386,486 e Pentium primeira geração (antes do PII).
  • Symetric multi-processing support : Útil para as máquinas multiprocessadores. A retirar sobre as máquinas mono-processeur.
  • Local APIC support on uniprocessors (NEW) : Permite utilizar interrupções “virtuais” geradas pelo processador. Na dúvida, respondem SIM IO-APIC apoio ele uniprocessors: Idem mas para os I/O (entrados/saídos). Na dúvida, respondem SIM
  • Unsynced TSC support : gestão dos TSC assíncrona. No caso de dúvida, respondem NÃO.
  • General setup
  • Networking support : Apoio da rede. Respondem SIM porque certos programas utilizam esta função mesma sobre uma máquina isolada.
  • PCI support : Apoio do BUS PCI. Respondem SIM porque tem 99% de possibilidades de ter pelo menos um placa sobre este bus, excepto para muito velhas máquinas.
  • PCI access mode : Tipo de acesso ao bus PCI. As opções são “BIOS”, “direct” ou “any”. Escolhem “any” e o kernel tentará o acesso pelos dois métodos (aconselhado).
  • ISA bus support : Suport pour le bus ISA. Sur les machines récentes il est inutile. Dnas le doute, répondez OUI.
  • PCI device name database : Apoio para o bus ISA. Sobre as máquinas recentes é inútil. Na dúvida, respondem SIM.
  • EISA support : Apoio do BUS EISA. Mesmo coisa que para o bus ISA
  • MCA support : Apoio do BUS MCA (MicroChannel). Unicamente para IBM PS/2.
  • Support for hot-pluggable devices : Apoio para os periféricos hot-plugs (PCMCIA, USB, etc.…).
  • PCMCIA/CardBus support : Apoio para os placas PCMCIA. Ativam se necessário.
  • PCI Hotplug Support : Apoio para periféricos hotplugs do porto PCI. Idem.
  • System V IPC : Inter Processamentos Comunicação, livrarias utilizada por certos programas. Respondem SIM.
  • BSD Process Accounting : Permite ter informações sobre os processos ao nível utilizador. Talvez útil para vigilância por exemplo. Respondem SIM.
  • Sysctl support : Permite alterar certas bandeiras “ao disparo”. Respondem SIM.
  • Kernel core (/proc/kcore) format : tipo de binário gerado (ELF/A.OUT). Deixam o valor ELF.
  • Kernel support for xxxx binaries : os diversos tipos de binários que o kernel poderá executar. Põem inclui ou em módulo, à escolha.
  • Power Management support : Gestão APM e ACPI. É necessário responder SIM aqui seguidamente escolher inferior o tipo de apoio (as escolhas dependem do vosso tipo de processador).
  • Ignore USER SUSPEND (NEW) : Sur les machines avec un BIOS APM, NON est un bon choix. Sur certains portables un BIOS buggé vous obligera a répondre OUI.i
  • Enable PM at boot time (NEW) : Não respondem NÃO a que se a vossa máquina plantar ao arranque.
  • Make CPU Idle calls when idle (NEW) : Sobre certa máquina, permite retardar o processador no caso de não atividade. SIM é uma boa escolha.
  • Enable console blanking using APM (NEW) : Permite apagar o ecrã aquando das sessões sob consolas.
  • RTC stores time in GMT (NEW) : Se utilizar outro OS sobre a mesma máquina, responder NÃO. No caso contrário, SIM é uma boa escolha.
  • Allow interrupts during APM BIOS calls (NEW) : Põem SIM apenas se vosso linuxbox plantar durante as apostas em véspera.
  • Use real mode APM BIOS call to power off (NEW) :Respondem SIM a se em vez apagar-se o vosso PC plantar.
    Memory Technology Devices (MTD) : Ativam esta opção apenas se utilizar periféricos como as memórias LANTERNA ELÉTRICA. Aquilo permite ao kernel identificar-o correctamente.
  • Parallel port support : Permite a tomada do porto paralelo.
  • PC-style hardware (NEW) : Opção para todos os PCES.
  • Support foreign hardware (NEW) : Permite ativar a tomada periféricos “exóticos”.
  • IEEE 1284 transfer modes (NEW) : Gestão dos modos de transferências evoluidos (EPP e ECP).
  • Plug and Play configuration : Trata-se do apoio para os periféricos “plug and play”. É decomposto em Plug and Play apoio e ISA Plug and Play apoio, a segunda escolha possile único se o primeiro for ativado.
    · Block devices:
  • Block devices : Chega-se numa seção importante. “O bloco devices” ou periféricos em modo bloco representa a maioria dos periféricos de armazenamentos, tal os discos duros e outras disquetes. Os dados são armazenados por blocos cuja dimensão pode variar de acordo com o apoio mas que é fixos para um apoio dado.
  • Normal floppy disk support : Apoio para o leitor de disquetes.
  • XT hard disk support : Apoio para velhos os discos duros 8 bits.
  • Loopback device support : apoio para o periférico de loopback, útil por exemplo para “montar” uma imagem ISO9660 antes de gravar-o, para verificar-o.
  • Network block device support : Permite de utilizar periféricos rede como se eram locais.
  • RAM disk support : Permite de criar um RAMdisk, que é um disco virtual RAM, de dimensão Default RAM disk size. Útil principalmente para as máquinas que não têm periférico de armazenamento (thin cliente).
  • Per partition statistics in /proc/partitions : Permite salvaguardar estatísticas sobre as vossas partições. Útil unicamente para optimização do vosso sistema. As outras opções são específicas um tipo de material. Ver a ajuda em linha para mais amplas informações.
  • Multi-device support (RAID and LVM) : Apoio para o RAID e o LVM (Logical Volume Manager). Cada opção pode ser selecionada separadamente (RAID Lineaire, RAID-0 (striping), RAID-1 (mirroring), RAID-4/RAID-5). É inútil ativar-o, excepto naturalmente se o vosso material utilizar o RAID. ################################### FIM DE APOSTA EM PÁGINA CORRETA #################################
  • Networking Options : Chega-se aqui no domínio de predileção do sistema GNU/Linux, quer dizer a rede. Nesta seção, vai ser possível incluir numerosos instrumentos mais ou menos úteis.
  • Packet Socket: Esta opção permite à certos programas discutir directamente com os diferentes periféricos rede instalados sobre o sistema. Por exemplo, o utilitário TCPDump necessita esta opção.
  • Packet socket: mmapped IO : Esta opção permite ao Packet Socket utilizar um método de entrada/saída muito mais rápida. Esta opção não é essencial.
  • Netlink device emulation : Esta opção está lá apenas para rétrocompatibilité com programas que devem utilizar certos periféricos bem especiais. É conduzida de desaparecer num futuro mais ou menos próximo. Vale melhor ativar-o, estaria apenas módulo.
  • Network packet filtering : Esta opção é muito importante. Substitui a antiga opção ipchains dos núcleos 2.2 e anteriores. Trata-se do coração das funções de filtragem de pacote de Linux, utilizadas à ajuda do utilitário iptables. Esta opção deve assinalar-se sem nenhuma hesitação.
  • Network packet filtering debugging : Esta em contrapartida interressera apenas as pessoas que desejam investir-se no desenvolvimento do módulo NetFilter.
  • Socket Filtering : Permite filtrar qualquer tipo de sockets, excepto os sockets TCP. Esta opção é obrigatória para poder utilizar a opção de filtragem ppp. Outros todos os casos, NÃO é uma boa escolha.
  • Unix domain sockets : Esta opção ativa o apoio para os sockets, que é um meio de conexão rede. Muito numerosos programas utilizam-o, ainda que a vossa máquina é isolada. Pode-se eventualmente compilar-o como módulo, mas é desaconselhada fortemente. Respondem SIM.
  • TCP/IP networking : Tomado em carga do protocolo TCP/IP. Respondem SIM ainda que a vossa máquina é isolada totalmente.