Compilar o kernel do linux é mais simples do que parece. O segredo para uma compilação bem sucedida é conhecer bem o hardware da máquina em questão. Neste artigo, veremos algumas dicas sobre como compilar um kernel, utilizando algumas ferramentas presentes na maioria das distribuições linux para obtermos as informações necessárias.
Obtendo uma imagem do kernel.
Existem várias fontes para imagens do kernel. Uma bastante confiável é www.kernel.org. Então, vamos baixar um fonte do kernel para iniciarmos a compilação:
Antes do download propriamente dito, vamos mudar para o diretório adequado para executarmos a compilação. Como root,
# cd /usr/src/
Caso não exista este diretório, crie-o
# mkdir /usr/src/
Agora, vamos obter o fonte do kernel usando o wget:
# wget 'http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2'
Aqui vamos utilizar o linux-2.6.28.tar.bz2 como referência.
Feito isto, é hora de descompactar o fonte:
# bzip2 -dc linux-2.6.28.tar.bz2 | tar -xvf -
ou
# tar -xjvf linux-2.6.28.tar.bz2
Agora, configurar as opções desejadas para a compilação. Façamos
# cd linux-2.6.28
# make menuconfig
Devemos observar um menu semelhante ao da imagem seguinte:

Agora, vamos passo-a-passo varrer os principais ítens para a compilação do kernel. Não abordaremos todos, apenas os essenciais.
General Setup
Em General setup, duas opções são importantes, System V IPC e BSD Process Accounting.

Aconselho fortemente habilitar pelo menos estas duas opções.
Enable loadable module support
A próxima opção, Enable loadable module support possui outra opção interessante a se considerar, Module unload. Também aconselho habilitá-la.

Processor type and features
Aqui vamos configurar as opções do processador.

Agora, para descobrir qual o processador utilizado, podemos fazer
# cat /proc/cpuinfo
No meu caso, este comando retorna:
vendor_id : GenuineIntel?
cpu family : 15
model : 1
model name : Intel(R) Pentium(R) 4 CPU 1.70GHz
stepping : 3
cpu MHz : 1700.154
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pebs bts
bogomips : 3402.03
clflush size : 64
Com esta saída, somos capazes de informar ao kernel a família do processador (no caso um pentium 4) e que este processador possui suporte à hyper threading (flag ht). Com isto em mãos, podemos marcar as seguintes opções:
Subarchitecture Type (PC-compatible)
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon)
MTRR (Memory Type Range Register) support

esta última deve ser habilitada sempre que se utiliza processadores que fazem uso do MTRR (Memory Type Range Register), tal como o pentium 4.
Agora, vamos às opções de barramento.
Bus options (PCI etc.)

Para saber que tipo de barramento PCI temos, vamos usar o comando lspci
# lspci
Para a máquina onde estou agora, ele retorna
00:00.0 Host bridge: Silicon Integrated Systems SiS SiS645DX Host & Memory & AGP Controller (rev 01)
00:01.0 PCI bridge: Silicon Integrated Systems SiS Virtual PCI-to-PCI bridge (AGP)
00:02.0 ISA bridge: Silicon Integrated Systems SiS SiS962 MuTIOL Media IO (rev 25)
00:02.1 SMBus: Silicon Integrated Systems SiS SiS961/2 SMBus Controller
00:02.5 IDE interface: Silicon Integrated Systems SiS 5513 IDE
00:02.7 Multimedia audio controller: Silicon Integrated Systems SiS AC'97 Sound Controller (rev a0)
00:03.0 USB Controller: Silicon Integrated Systems SiS USB 1.0 Controller (rev 0f)
00:03.1 USB Controller: Silicon Integrated Systems SiS USB 1.0 Controller (rev 0f)
00:03.3 USB Controller: Silicon Integrated Systems SiS USB 2.0 Controller
00:04.0 Ethernet controller: Silicon Integrated Systems SiS SiS900 PCI Fast Ethernet (rev 91)
00:0e.0 VGA compatible controller: ATI Technologies Inc 3D Rage LT Pro (rev dc)
00:10.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
Com esta informação em mão, podemos por exemplo notar que esta máquina não possui pci-express. Então, não marcaremos esta opção. Mas ela possui um barramento ISA, que habilitamos.
Executable file formats / Emulations

Recomendo habilitar todas estas opções garantindo assim que o kernel possa trabalhar com todos os tipos de executáveis disponíveis.
Networking --->Networking options --->

Aqui são necessárias as opções
Para utilização do iptables, é necessário habilitar
e as opções desejadas no menu que segue.
Device drivers

Em Block devices, as opções mais utilizadas hoje seriam
Loopback device support
Network block device support
e
Normal floppy disk support

no caso que se utilize um floppy disk. Em ATA/ATAPI/MFM/RLL support, temos

onde é importante notar
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
Include IDE/ATA-2 DISK support
Include IDE/ATAPI CDROM support
no caso de discos IDE e cd/dvd rom IDE. Aqui também é onde se configura qual a placa-mãe utilizada. Esta informação foi obtida quando utilizamos o lspci. Neste caso, é umas SiS5513.
Device Drivers ---> Serial ATA (prod) and Parallel ATA (experimental) drivers
Usando discos SATA? Escolha ai o seu.

Device Drivers ---> Network device support

Aqui deve ser escolhida a placa de rede utilizada. Esta informação foi passada pelo lspci.
Device Drivers ---> Input device support

Uma opção interessante aqui é habilitar
Event interface
Muito útil principalmente em laptops. Em geral, neste ponto escolhemos, caso utilizemos um mouse ps2,
Provide legacy /dev/psaux device
Mice --->
para escolhermos o tipo do mouse utilizado.
Para um funcionamento mínimo, ainda falta dizer para o kernel qual é a placa da vídeo utilizada (vide lspci).
Device Drivers ---> Graphics support
O meu lspci diz sobre o vídeo
00:0e.0 VGA compatible controller: ATI Technologies Inc 3D Rage LT Pro (rev dc)
ou seja, uma placa da ATI. No submenu "/dev/agpgart (AGP Support)" encontra-se a opção "ATI chipset support", que é a que eu preciso.

Relembrando aonde estamos
Device Drivers ---> Graphics support --->
Support for frame buffer devices

Estamos quase terminando. Falta agora configurarmos o som e as USB's. Vamos primeiro ao som.
Device Drivers ---> Sound --->

As chances são muito grandes de o suporte as placas de som mais comuns hoje estarem dentro do submenu "Advanced Linux Sound Architecture" conhecido também como ALSA. Vamos dar uma olhada nele.

Lembra da saída do lspci? A placa de som aqui é uma SiS AC'97. Olha ela aí

Agora, vamos ao suporte à USB.
Device Drivers ---> USB support --->

Coisas importantes de se saber aqui: "OHCI HCD support" é o suporte para USB 1.0; "USB Mass Storage support" torna possível utilizar dispositivos de armazenamento , por exemplo um pendrive ou uma gaveta USB no sistema. Caso opte por utilizar estes elementos é necessário habilitar o suporte SCSI. Vamos ver como fazer isto.
Device Drivers ---> SCSI device support --->

Agora, habilitamos as opções
SCSI device support
SCSI disk support
Recapitulando...
Até agora, baixamos, descompactamos os fontes do kernel, configuramos o processador, suporte aos barramentos PCI, configuramos a rede, os discos, a placa de rede, mouse, vídeo, som e USB's. Este documento não tem intensão de ser um documento detalhista. Neste ponto, grande parte dos dispositivos necessários para o funcionamento de um computador usando Linux foram abordados. Naturalmente, as especificidades de cada sistema devem ser tratadas mas até aqui, garantimos que temos um sistema pronto para ser inicializado. Outros suportes podem ser adicionados como módulos do kernel, caso necessário.Salvando as configurações:

Iniciando a compilação:
Então, vamos dar início ap processo de compilação da imagem do kernel. Em /usr/src/linux-2.6.25.3,# make
# make modules_install
# make install






