O kernel do Linux é o mais recente. Um guia para construir o kernel do Linux a partir do código-fonte

Essencial(Inglês) núcleo) é o que todo o resto é construído em torno. Isso é o que se chama de Linux. Agora, a palavra Linux na vida cotidiana é chamada de sistema operacional construído sobre ela, embora no bom sentido seja chamada de GNU / Linux (o kernel do Linux e o software do projeto GNU, que está em desenvolvimento há muitas décadas).

O Ubuntu usa um kernel com um grande número de patches, alguns dos quais adicionam recursos instáveis ​​e experimentais.

Cada versão do Ubuntu tem sua própria versão do kernel. As versões LTS desde 10.04 conseguiram atualizar o kernel para versões incluídas em versões mais recentes.

Versão do Ubuntuversão do kernel
4.10 2.6.9
5.04 2.6.11
5.10 2.6.13
6.06LTS 2.6.15
6.10 2.6.18
7.04 2.6.19
7.10 2.6.20
8.04LTS 2.6.24
8.10 2.6.27
9.04 2.6.28
9.10 2.6.31
10.04LTS 2.6.32
10.10 2.6.35
11.04 2.6.38
11.10 3.0.4
12.04LTS 3.2
12.10 3.5
13.04 3.8
13.10 3.11
14.04LTS 3.13
14.10 3.16
15.04 3.19

garfos

A numeração da versão do kernel do Ubuntu e no site kernel.org não correspondem, pois os desenvolvedores da Canonical adicionam uma versão micro para indicar os patches adicionados. Por exemplo, a versão 3.2.0-23 significaria que o kernel é baseado na ramificação 3.2, que possui 23 patches.

Os seguintes tipos de kernel são suportados no repositório do Ubuntu:

O kernel generic-pae permite que um sistema de 32 bits use até 64 GB de RAM total, alocando não mais que 4 GB para as necessidades de um determinado processo, enquanto um kernel genérico simples funciona com não mais que 4 GB de RAM.

O kernel de 64 bits permite endereçar até 1 TB de memória consumida pelos processos.

Se você precisar atualizar o kernel para uma versão principal mais recente (geralmente isso se deve ao fato de que novas versões adicionam suporte para novo hardware, eliminam regressões), você pode usar o arquivo oficialmente suportado http://kernel.ubuntu.com/ ~kernel-ppa/mainline/ .

Compilando o kernel

Construir o kernel a partir do código-fonte requer algumas habilidades e conhecimento sobre como o sistema operacional funciona.

Antes de começar a compilar o kernel, você precisa instalar os seguintes pacotes:

Build-essential fakeroot ncurses-dev libssl-dev

Todas as outras ações devem ser executadas em nome do superusuário:

sudo su

Obtendo o código-fonte

O código-fonte do kernel usado pelo Ubuntu pode ser obtido instalando o pacote linux-source:

apt-get instalar fonte linux

Após a instalação no diretório /usr/src haverá um arquivo chamado linux-source-verify_kernels.tar.bz2.

Você também pode baixar o arquivo com o código-fonte do kernel no site kernel.org.

Ao baixar o kernel do site kernel.org, você terá que aplicar patches a ele

Configuração

Descompacte o arquivo resultante e, por conveniência, crie um link simbólico para o diretório resultante:

cd / usr/ src tar xjf ./ linux-source-3.2.0.tar.bz2 ln -s ./ linux-source-3.2.0 ./ linux cd ./ linux

Para simplificar o processo de configuração do kernel, você pode copiar as configurações do atual.

Neste guia passo a passo, você aprenderá como construir e instalar adequadamente o kernel de ramificação >2.6 na família do sistema operacional Ubuntu.

Etapa 1: obter a origem do kernel

As fontes do kernel do Ubuntu podem ser obtidas de duas maneiras:

    Instalando o arquivo do repositório, com a sobreposição automática dos últimos patches oficiais. Isso fará o download de um pacote de aproximadamente 150 MB para a pasta atual. Para obter a fonte do kernel, cuja versão está instalada no computador, execute o comando: apt-get source linux-image-`uname -r`

    Ou, em vez de `uname -r`, você pode especificar uma versão específica daquelas disponíveis no repositório.

A lista de versões disponíveis no repositório pode ser visualizada digitando o comando: “apt-get source linux-image-” e, sem pressionar Enter , pressione a tecla Tab duas vezes.

Não se esqueça de habilitar o compartilhamento de código-fonte no repositório (Configurações do sistema → Programas e atualizações → Software Ubuntu → Código-fonte). Isso pode ser feito no console removendo o comentário das linhas que começam com deb-src no arquivo /etc/apt/sources.list e atualizando com o comando: “sudo apt-get update”.

    A versão mais recente do kernel está disponível em git . O tamanho do pacote baixado é de ~ 500-800 Mb. git clone git://kernel.ubuntu.com/ubuntu/ubuntu- .git

    Onde - nome do lançamento, por exemplo:

    Git clone git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git

Outros núcleos

Existem também kernels que não têm garantia de funcionar no Ubuntu. Por exemplo, há um problema conhecido com vários aplicativos de sistema populares (em particular, drivers NVidia, VirtualBox), que, quando instalados, são compilados para o kernel instalado. Portanto, para instalá-los em um kernel que não é padrão para esta versão do Ubuntu (por exemplo, o Ubuntu 16.04 vem com um kernel 4.4.0), eles podem exigir uma compilação manual separada ou patches especiais, e o aplicativo pode não suportar o versões mais recentes do kernel.org.

    Arquive da versão base sem patches, ou seja, por exemplo, "4.8.0", "4.8.10": sudo apt-get install linux-source

Descompacte o arquivo resultante usando os comandos:

Cd ~/ tar -xjf linux-2.6.x.y.tar.bz2

Ou no caso de linux-source:

Cd /usr/src tar -xjf linux-source-2.6.x.y.tar.bz2

Passo 2: Obtendo os Pacotes Necessários para Construir

Esta etapa só é necessária se o kernel estiver sendo compilado no computador pela primeira vez.

Execute os seguintes comandos para instalar os pacotes principais:

sudo apt-get update sudo apt-get build-dep linux sudo apt-get install kernel-package

    configuração- a forma tradicional de configuração. O programa exibe os parâmetros de configuração um a um, solicitando que você defina um valor diferente para cada um deles. Não recomendado para usuários inexperientes.

    oldconfig- o arquivo de configuração é criado automaticamente com base na configuração atual do kernel. Recomendado para iniciantes.

    defconfig- o arquivo de configuração é criado automaticamente, com base nos valores padrão.

    menuconfig- interface pseudo-gráfica para configuração manual, não requer entrada sequencial de valores de parâmetros. Recomendado para uso no terminal.

    xconfig- interface gráfica (X) para configuração manual, não requer entrada sequencial de valores de parâmetros.

    gconfig- interface de configuração manual gráfica (GTK+), não requer entrada sequencial de valores de parâmetros. Recomendado para uso no ambiente GNOME.

    localmodconfig- um arquivo de configuração criado automaticamente, que inclui apenas o que é necessário para este dispositivo específico. Quando este comando é chamado, a maior parte do kernel será modulada

Caso queira usar configuração, oldconfig, defconfig, localmodconfig ou localyesconfig, você não precisa mais de nenhum pacote adicional. No caso das três opções restantes, pacotes adicionais também devem ser instalados.

menuconfig execute o seguinte comando:

sudo apt-get install libncurses5-dev

Para instalar os pacotes necessários para usar gconfig execute o seguinte comando:

sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev

Para instalar os pacotes necessários para usar xconfig execute o seguinte comando:

Antes do Ubuntu 12.04: sudo apt-get install qt3-dev-tools libqt3-mt-dev

sudo apt-get install libqt4-dev

Etapa 3. Aplicação de patches

Esta etapa é opcional.

Os patches oficiais já foram aplicados aos fontes se o kernel foi obtido pelo comando descrito acima:

apt-get source linux-image-`uname -r`

Se você nunca aplicou patches ao código-fonte antes, execute o seguinte comando:

sudo apt-get patch de instalação

Este comando instalará o programa de patch necessário para, você pode imaginar, aplicar patches. Agora baixe o arquivo patch para a pasta onde você descompactou o kernel. Pode ser um arquivo compactado (por exemplo, Bzip2 ou Gzip) ou um arquivo patch descompactado.

Neste ponto, presume-se que você já salvou o arquivo na pasta onde descompactou o kernel anteriormente e instalou o programa de correção.
Se o arquivo que você baixou estava no formato Gzip (*.gz), execute o seguinte comando para extrair o conteúdo do arquivo:

Gunzip patch-2.6.x.y.gz

Se o arquivo que você baixou estava no formato Bzip2 (*.bz2), execute o seguinte comando para extrair o conteúdo do arquivo:

Bunzip2 patch-2.6.x.y.bz2

onde 2.6.x.y é a versão do patch do kernel. Os comandos correspondentes irão descompactar o arquivo patch na pasta de origem do kernel. Antes de aplicar o patch, você precisa ter certeza de que funcionará sem erros. Para fazer isso, execute o comando:

Patch -p1 -i patch-2.6.x.y --dry-run

onde 2.6.x.y é a versão do patch do kernel. Este comando irá simular a aplicação de um patch sem alterar os próprios arquivos.

Se nenhum erro ocorrer durante sua execução, as alterações poderão ser implementadas com segurança nos próprios arquivos. Para fazer isso, execute o comando:

Patch -p1 -i patch-2.6.x.y

onde 2.6.x.y é a versão do patch do kernel. Se não houver erros, o patch foi aplicado com sucesso ao código-fonte.

Atenção! Antes de aplicar um patch, faça o seguinte: 1. Baixe de http://www.kernel.org um patch da mesma versão de seus fontes. 2. Execute o seguinte comando: patch -p1 -R

onde 2.6.x.y é a versão do patch e suas fontes

Etapa 4. Configuração da futura compilação do kernel

Navegue até a pasta onde você descompactou o kernel executando o comando

CD ~/linux-2.6.x.y

onde 2.6.x.y é a versão do kernel que você baixou.

Neste ponto, você já deve ter decidido o método de configuração do kernel (caso contrário, verifique-os na seção Obtendo os pacotes necessários para compilar. Em função disso, execute o seguinte comando para iniciar o método de configuração de sua escolha:

    configuração- a forma tradicional de configuração. O programa exibe os parâmetros de configuração um a um, solicitando que você defina um valor diferente para cada um deles. Chamado pelo comando make config

    oldconfig- o arquivo de configuração é criado automaticamente com base na configuração atual do kernel. Recomendado para iniciantes. Chamado pelo comando make oldconfig

    defconfig- o arquivo de configuração é criado automaticamente, com base nos valores padrão para esta arquitetura específica. Chamado pelo comando make defconfig

    menuconfig- interface pseudo-gráfica para configuração manual, não requer entrada sequencial de valores de parâmetros. Recomendado para uso no terminal. Chamada: make menuconfig

    gconfig E xconfig- configuradores gráficos para configuração manual. Ligue: faça gconfig

    Fazer xconfig

    respectivamente

    localmodconfig E localyesconfig- configuradores automáticos. A configuração é criada com base nos módulos atualmente chamados e no kernel em execução. A diferença entre esses dois configuradores é o número de módulos. No primeiro caso, haverá pelo menos 50% do núcleo e, no segundo, não mais que 2 módulos. Ligue: faça localmodconfig

    Faça localyesconfig

    respectivamente

Após a chamada, o programa de configuração correspondente será iniciado. Faça as configurações necessárias de acordo com suas necessidades, salve o arquivo de configuração e prossiga para a próxima etapa.

Passo 5Construindo o Kernel

Então os preparativos estão completos. Agora você pode iniciar o processo de construção do kernel. Para fazer isso, execute o comando:

Fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j<количество ядер процессора>+1

A construção do kernel pode levar de 20 minutos a várias horas, dependendo da configuração do kernel e dos parâmetros técnicos do computador. Construir em um processador multi-core pode ser várias vezes mais rápido

Etapa 6 Instalando imagens e cabeçalhos do kernel

Quando a compilação do kernel terminar, dois pacotes deb aparecerão em sua pasta pessoal. Eles precisam ser instalados. Para fazer isso, execute os comandos:

Cd ~/ sudo dpkg -i linux-image-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb sudo dpkg -i linux-headers-2.6.x.y-custom_2.6.x.y-custom-10.00. Custom_arc.deb

onde 2.6.x.y é a versão do kernel construído, arc é a arquitetura do processador (i386 - 32 bits, amd64 - 64 bits).
Se você não souber o nome exato do pacote, liste os arquivos em seu diretório inicial com o comando

e encontre esses dois pacotes.

Etapa 7Gerar o disco RAM inicial

O Ubuntu requer uma imagem de disco RAM inicial para funcionar corretamente. Para criá-lo, execute o comando:

sudo update-initramfs -c -k 2.6.x.y-custom

onde 2.6.x.y é a versão do kernel de compilação.

Etapa 8 Atualizando a configuração do carregador de inicialização GRUB

Para disponibilizar a nova versão do kernel para seleção quando o computador inicializar, execute o seguinte comando:

sudo update-grub

O arquivo menu.lst (para GRUB versão 1) ou grub.cfg (para GRUB versão 2) será atualizado para refletir os sistemas operacionais instalados e imagens de kernel.

Passo 9Verificando o Kernel

Compilação e instalação do kernel concluída com sucesso! Agora reinicie o computador e tente inicializar o sistema com o novo kernel. Para garantir que o sistema seja iniciado com o novo kernel, execute o comando

Uname-r

Ele exibirá a versão do kernel que está sendo usada.

Se feito corretamente, você pode excluir os arquivos de origem e todo o diretório linux-2.6.x.y em sua pasta pessoal. Isso liberará cerca de 5 GB em seu disco rígido (o tamanho do espaço liberado depende das opções de compilação).

Isso conclui o processo de montagem e instalação, parabéns!

Há muito tempo queria escrever um artigo sobre como construir o kernel do Linux. E agora este momento chegou.

Na verdade, por que construir um kernel se a distribuição fornece um kernel perfeitamente utilizável?

Por exemplo, para usar os drivers e soluções mais recentes fornecidos no novo kernel, quando apenas a ramificação antiga está disponível na distribuição. Além disso, por exemplo, para customizá-lo para o seu hardware e agilizar um pouco o trabalho. Fiz o 3.11 para mim, porque contém um conjunto de patches que melhoram o trabalho com placas de vídeo ATI, e sou dono de um deles.

Muitos artigos foram escritos sobre a montagem do kernel, então não vou entrar em detalhes, mas apenas escrever como eu mesmo monto o kernel.

Antes de tudo, você precisa obter o arquivo com os códigos-fonte da versão desejada do kernel do Linux.

No site https://www.kernel.org/ você pode baixar a versão desejada. Descreverei o processo de construção e instalação usando a versão 3.11.0 como exemplo.

É aconselhável construir o kernel em um diretório especialmente criado para esta finalidade sob um usuário não privilegiado. eu compilo em uma pasta ~src/linux/linux-version

Antes de compilar, você deve certificar-se de que todas as dependências necessárias para a compilação estejam instaladas e cerca de 3 GB de espaço livre no diretório de compilação.

Aqui está uma lista de pacotes para compilar com sucesso (para Debian/Ubuntu):

gcc, fazer- Ferramentas necessárias de montagem e ligação. De preferência, uma das versões gcc mais recentes disponíveis.

libncurses5-dev- necessário para o menuconfig funcionar

cache- permite acelerar a remontagem

Se você deseja usar o configurador gráfico do kernel, também deve instalar pacotes para desenvolvimento QT, por exemplo libqt4-dev, g++, pkg-config.

Lzop, lz4c- se você estiver interessado em mecanismos alternativos de compressão de kernel e initramfs.

O diretório atual é considerado o diretório do kernel descompactado.

Depois que o ambiente de construção estiver preparado, a configuração do kernel precisa ser gerada. A configuração atual pode ser visualizada assim:

Cat /boot/config-`uname -r`

Zcat /proc/config.gz

Em princípio, você pode usar a configuração atual editando-a em um dos programas de configuração. Copie-o para o diretório onde o arquivo com o kernel está descompactado e renomeie-o como .config

cp /boot/config-`uname -r` .config

Eu gosto do xconfig, acho o mais conveniente.

Fazer xconfig

Anteriormente copiado é carregado automaticamente .config, que serve como nossa base para a configuração. Existem muitas dicas para configurar o kernel, só recomendo escolher a versão do seu processador, desabilitar os drivers de hardware que não existem, você também pode selecionar módulos adicionais, como zram e o algoritmo de compactação, escolhi o lz4 como o mais rápido.

Depois de salvar a configuração, você pode começar a compilar.

Se você estiver com preguiça de configurar o kernel manualmente, é possível configurar automaticamente usando informações sobre os módulos carregados: make localmodconfig

Agora o segundo passo principal é compilar o kernel e os módulos. Executado em um comando:

Faça -j4 CC="ccache gcc" módulos bzImage

Onde -j4 corresponde ao número de núcleos do processador em sua configuração.

A compilação não demorará muito se o hardware for poderoso o suficiente e a configuração do kernel de distribuição não for usada. No meu laptop com processador AMD Phenom P820 e seis gigabytes de RAM, a compilação leva cerca de meia hora.

O último passo é instalar o kernel e os módulos.

Sudo sed -i.bak "s/MODULES=most/MODULES=dep/" /etc/initramfs-tools/initramfs.conf

Isso é necessário para reduzir o tamanho do arquivo initrd, incluindo apenas os módulos necessários para o carregamento.

A instalação também pode ser feita com um comando:

sudo make modules_install instalar

Ou instale tudo manualmente. Módulos Primeiro

sudo make modules_install

Então o núcleo

Versão=`awk "NR<=3 {printf "%s.",$NF}" < Makefile | sed "s/\.$//"`

é assim que obtemos a versão do kernel do Makefile

sudo cp arch/`uname -m`/boot/bzImage /boot/vmlinuz-$version sudo cp .config /boot/config-$version sudo cp System.map /boot/System.map-$version sudo update-initramfs - c -k $version sudo update-grub

Por fim, estou anexando um script para automatizar o processo.

Durante a configuração da configuração, ele pode fazer algumas perguntas, para responder por padrão, basta pressionar Enter.

Feliz compilação.

Iniciantes que estão apenas começando a se familiarizar com o Linux, em primeiro lugar, se fazem uma pergunta razoável: como e onde baixar o Linux? Parece que isso é complicado, mas ainda assim surge a pergunta e muitas vezes me perguntam.

Decidir sobre uma distribuição Linux

Para começar, provavelmente você precisa baixar uma distribuição Linux. Porque a palavra geral Linux pode ser entendida como o kernel Linux, bem como qualquer distribuição Linux. Permitirei a mim mesmo, mais adiante neste artigo, às vezes usar essas duas palavras como equivalentes. A questão de escolher uma distribuição está além do escopo desta nota. Você pode encontrar as distribuições do Linux no diretório de distribuições do Linux.

Suponha que você escolheu uma distribuição para si mesmo e deseja baixá-la. Cada distribuição do Linux geralmente pode ser baixada gratuitamente em diferentes formatos. Geralmente são arquivos ISO. Um arquivo ISO é uma imagem de um CD ou DVD. Na maioria das vezes, as versões em CD ou DVD diferem apenas porque as versões em DVD têm mais softwares diferentes que você pode instalar diretamente do disco, durante o processo de instalação do Linux ou a qualquer momento após a instalação.

Qual Linux baixar (i386, x86_64, amd64...)

Linux também pode ser baixado para várias plataformas. Normalmente, os desenvolvedores de distribuição oferecem versões de 32 bits e 64 bits do Linux. Qual deles você escolhe depende principalmente da profundidade de bits do seu processador. Como regra, todos os processadores modernos são de 64 bits.

As versões de 32 bits do Linux são geralmente chamadas de i386 e as versões de 64 bits são x86_64 (para processadores Intel) e amd64 (para processadores AMD).

Você também pode se deparar com nomes como braço, mips, ppc e outros. Estas são versões do Linux especialmente construídas para processadores Arm, Mips, PowerPC.

Computadores domésticos e laptops geralmente usam processadores Intel ou AMD, então você provavelmente estará interessado em i386, x86_64, amd64.

Onde baixar uma distribuição Linux

Então, você decidiu por uma distribuição Linux. Você só precisa ir ao site do desenvolvedor do kit de distribuição e encontrar a seção de download lá, pode ser chamada de algo como Downloads, Get It, Get ISO, Download, Upload.

Uma das maneiras mais rápidas de baixar o Linux é usar arquivos torrent. Funciona da seguinte maneira. Você baixa um arquivo torrent para si mesmo e usa o cliente torrent para começar a baixar o próprio Linux. Os clientes Torrent para Linux podem ser encontrados no diretório do software em "Torrent Clients".

A mesma versão de uma distribuição Linux pode ser hospedada em diferentes servidores (espelhos). Quanto mais próximo o servidor estiver geograficamente de você e quanto maior for sua largura de banda, mais rápido você fará o download do Linux. Um espelho russo popular onde você pode baixar o Linux é um espelho do Yandex: https://mirror.yandex.ru ou versão FTP ftp://mirror.yandex.ru

Aqui estão alguns lugares onde você pode baixar distribuições Linux populares gratuitamente:

DistribuiçãoOnde posso baixar
ubuntu
  • Baixe o Ubuntu Desktop (a versão principal do Ubuntu para uso doméstico)
Debian
Arch Linux
Gentoo
OpenSUSE
Fedora
  • Imagem ISO do Fedora (versão Workstation para uso pessoal)
  • Espelho FTP no Yandex (para uso pessoal, escolha a versão Workstation)
Slackware
E outrosDiretório de distribuições Linux (na página de cada distribuição há um link para o site oficial).

Onde baixar o kernel do Linux

Qualquer versão do código-fonte do kernel do Linux sempre pode ser baixada de kernel.org.

Como encomendar um disco Linux

Se nenhuma das opções for adequada para você, você poderá encontrar entusiastas em sua cidade que concordarão em fornecer um disco Linux. Além disso, existem muitas comunidades Linux diferentes agora.

Boa tarde, leitores e convidados. Na continuação do último post sobre, hoje quero dizer a vocês, como construir e configurar seu próprio kernel.

Do post anterior, já sabemos que Kernel do Linux tem recursos mínimos e suporte de hardware, mas se necessário, podemos estender as capacidades do kernel com módulos do kernel. O que pode ser necessário construindo ou reconstruindo seu próprio kernel? Por exemplo, para ativar/desativar novos recursos ou atualização antiga do kernel para um mais novo com suporte para novos recursos, ou apenas para experimentos, como no nosso exemplo.

Obtenção de fontes de kernel e preparação para configuração

Pode ser feito de várias maneiras obter fontes:

    1. Obtenha os arquivos de código originais de The Linux Kernel Archives , como arquivos gzip ou bzip2, com o comando:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.1.tar.bz2 cp linux-2.6.36.1.tar.bz2 /usr/src/
  1. Obtenha fontes de repositórios de distribuição (por exemplo: , CentOS i386) como um pacote binário deb ou rpm (src.rpm) com patches do fabricante da distribuição. Por exemplo: kernel-server:/tmp/123# apt-cache search source | grep linux ketchup - utilitário de atualização para fontes linux-kernel linux-patch-grsecurity2 - patch grsecurity kernel - nova versão upstream principal linux-wlan-ng-source - driver linux-wlan-ng linuxdoc-tools - converte fonte LinuxDoc SGML em outros formatos linux-patch-lustre - Patch do kernel do Linux para o sistema de arquivos Lustre libcorelinux-dev - Classes de fundamentos, padrões de design, IPC e threads libcorelinux-doc - Classes de fundamentos, padrões de design, IPC e threads libcorelinux-examples - Classes de fundamentos, padrões de design, IPC e Threads libcorelinuxc2a - Foundation Classes, Design Patterns, IPC e Threads linux-patch-openswan - IPSEC Linux kernel support for Openswan selinux-policy-src - Fonte da política de referência SELinux para customização user-mode-linux-doc - User-mode Linux (Documentação) linux-patch-xenomai - patches do kernel Linux para Xenomai linux-patch-debian-2.6.26 - patches Debian para a versão 2.6.26 do kernel Linux linux-source-2.6.26 - fonte do kernel Linux para a versão 2.6 .26 com patches Debian linux-tree-2.6.26 - Árvore fonte do kernel Linux para construir imagens do kernel Debian Servidor de impressão:~# apt-get install linux-source-2.6.26 Lendo listas de pacotes... Concluído Construindo árvore de dependências Lendo informações de status... Concluído Os seguintes pacotes adicionais serão instalados: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev make Pacotes sugeridos: binutils-doc bzip2-doc cpp-doc gcc- 4.3 -locales gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.3-multilib libmudflap0-4.3-dev gcc-4.3-doc libgcc1-dbg libgomp1-dbg libmudflap0-dbg glibc-doc libncurses-dev ncurses -dev kernel-package libqt3-mt-dev make-doc NOVOS pacotes a serem instalados: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev linux-source-2.6.26 make atualizado 0, 13 novos pacotes instalados, 0 pacotes marcados para remoção e 5 pacotes não atualizados. Você precisa baixar arquivos de 50,2 MB/63,2 MB. Após esta operação, a quantidade de espaço em disco ocupado aumentará em 89,4 MB. Você gostaria de continuar [S/N]? y Obtido:1 http://ftp.debian.org lenny/main linux-libc-dev 2.6.26-26 Obtido:2 http://ftp.debian.org lenny/main linux-source-2. 6.26 2.6.26-26 Obteve 50,2 MB em 1min49s (460kB/s) Seleção de pacote binutils não selecionado anteriormente. (Lendo o banco de dados... 16621 arquivos e diretórios atualmente instalados.) Descompactando o pacote binutils (do arquivo.../binutils_2.18.1~cvs20080103-7_i386.deb)... Selecionando o pacote bzip2 não selecionado anteriormente. ..... O pacote make é descompactado (do arquivo.../archives/make_3.81-5_i386.deb)... Man-db triggers são processados... O pacote binutils (2.18.1~cvs20080103-7 ) está configurado. .. ..... Configurando linux-source-2.6.26 (2.6.26-26) ... Configurando make (3.81-5) ... kernel-server:~# ls /usr /src/ linux -source-2.6.26.tar.bz2

gostaria de salientar que nome do arquivo de origem ou pacote, se parece com isto: linux-source-2.6.26 ou kernel-source-2.6.18. Da listagem do segundo exemplo, pode-se ver que ao instalar as fontes do repositório, o apt nos oferece a instalação de outros pacotes relacionados, sem os quais o kernel não pode ser construído.

Então. Depois obtendo fontes uma das formas acima (copiando o arquivo (no primeiro caso) e instalando o pacote (no segundo caso)), entramos no diretório /usr/src/- arquivo com o mesmo nome linux-source-2.6.26.tar.bz2. Em seguida, precisamos descompactar o arquivo melon com o comando: tar -xjf linux .tar.bz2. Como resultado, obtemos uma árvore de diretórios de origem do kernel localizados no diretório /usr/src/linux-2.6.36.1/. Também é recomendado criar um link simbólico /usr/src/linux para o diretório acima:

Kernel-server:~# cd /usr/src/ kernel-server:/usr/src# ln -s linux-2.6.36.1 linux kernel-server:/usr/src# ls -l lin* lrwxrwxrwx 1 root src Dec 14 3 16:31 linux -> linux-2.6.36.1 -rw-r--r-- 1 root src 70236745 3 de dezembro 15:57 linux-2.6.36.1.tar.bz2

Antes de tentar construir e configurar, você precisa revisar o arquivo Mudanças localizado no diretório Documentação. Contém, entre outras coisas, lista de pacotes necessários para construir o kernel, com números de versão. Certifique-se de que esses pacotes estejam instalados (se você instalou as fontes usando um gerenciador de pacotes, provavelmente os pacotes necessários já estão instalados).

A árvore do subdiretório descompactado contém o arquivo Makefile. makefile contém vários alvos de compilação para configurar opções do kernel, compilar o kernel e seus módulos, instalar módulos e compilar pacotes RPM ou deb. As versões mais recentes dos fontes do kernel permitem que você use make help para obter uma breve ajuda para cada destino. Em sistemas mais antigos, era necessário consultar a documentação ou visualizar o makefile. Abaixo está parte da saída de make help:

Kernel-server:/usr/src/linux-2.6.36.1# make help Alvos de limpeza: clean - Remova a maioria dos arquivos gerados, mas mantenha a configuração e suporte de construção suficiente para construir módulos externos mrproper - Remova todos os arquivos gerados + configuração + vários arquivos de backup distclean - mrproper + remove arquivos de backup e patch do editor Alvos de configuração: config - Atualiza a configuração atual utilizando um programa orientado a linha nconfig - Atualiza a configuração atual utilizando um programa baseado em menu ncurses menuconfig - Atualiza a configuração atual utilizando um programa baseado em menu xconfig - Atualiza a configuração atual utilizando um front-end gconfig baseado em QT - Atualize a configuração atual utilizando um front-end oldconfig baseado em GTK - Atualize a configuração atual utilizando um .config fornecido como base .......

Além disso, se por algum motivo for necessário aplicar um patch ao kernel, ele deve ser baixado com antecedência e colocado no diretório /usr/src. Se você não precisa corrigir o kernel, pode prosseguir com segurança para a configuração. O núcleo é corrigido da seguinte forma:

Kernel-server: /usr/src/linux-2.6.36# gzip -cd ../patch-2.6.xx.gz | patch -p1 #ou servidor de impressão:/usr/src/linux-2.6.36# bzip2 -dc ../patch-2.6.xx.bz2 | patch-p1

Configuração

A configuração atual do kernel é armazenada em um arquivo .config. Este arquivo é formado usando um dos alvos de configuração (o alvo é, em termos simples, um comando executado na forma fazer alvo):

O destino de configuração usa uma interface de linha de comando para responder a muitas perguntas sobre como criar ou atualizar um arquivo .config. Na minha opinião, em comparação com os propósitos de usar o menu - uma peça muito inconveniente.

cloneconfig

Copie as configurações atuais do kernel para o arquivo .config. Este destino foi obsoleto e foi substituído em kernels mais recentes por . (útil para adicionar novos recursos ao kernel atual)

O alvo menuconfig usa um programa baseado em menus construído sobre ncurses para criar ou atualizar um arquivo .config. Você só precisa responder às perguntas dos itens que deseja alterar. Essa abordagem substituiu a configuração antiga. Executa em uma janela de terminal remotamente ou localmente.

Alvo nconfig usa um programa baseado em menus construído sobre ncurses para criar ou atualizar um arquivo .config. Esta versão é baseada em mas tem um visual mais moderno. Adicionado após o lançamento do kernel Linux 2.6.35. Você só precisa responder às perguntas dos itens que deseja alterar. Executa em uma janela de terminal remotamente ou localmente.

O destino xconfig usa um sistema de menu gráfico baseado no front-end QT usado pela área de trabalho do KDE.

O destino gconfig usa um sistema de menu gráfico baseado no front-end GTK usado pelo desktop GNOME.

oldconfig

O destino oldconfig permite criar uma configuração usando um arquivo .config existente que você criou anteriormente ou de outro sistema. Por exemplo, você pode copiar o arquivo de configuração para seu sistema de /lib/modules/$(uname -r)/build/.config para /usr/src/linux. Depois de fazer isso, você pode usar um dos destinos do menu de configuração para fazer alterações, se necessário. Além disso, ao executar este comando, se muitos novos recursos foram adicionados ao novo kernel, muitas perguntas serão feitas sobre a configuração de novos parâmetros. (útil para adicionar novos recursos ao kernel atual)

Novamente, uma lista de todos os destinos de comando pode ser vista digitando fazer ajuda. Então, vamos começar a configurar. O mais conveniente para o console, IMHO - .

Depois de executar o comando, recebi uma mensagem terrível:

Kernel-server:/usr/src/linux-2.6.36.1# make menuconfig *** Não foi possível encontrar as bibliotecas ncurses ou os *** arquivos de cabeçalho necessários. *** "make menuconfig" requer as bibliotecas ncurses. *** *** Instale o ncurses (ncurses-devel) e tente novamente. *** fazer: *** Erro 1 fazer: *** Erro 2

Está faltando alguma coisa, pensou Stirlitz (C) ... Provavelmente um pacote contendo o nome ncurses e como essas são bibliotecas, provavelmente o pacote começa com lib. Entrei no repositório:

Kernel-server:/usr/src/linux-2.6.36.1# apt-cache search ncurses | grep ^lib libcunit1-ncurses-dev - Biblioteca de teste de unidade para C (ncurses) -- arquivos de desenvolvimento libcunit1-ncurses - Biblioteca de teste de unidade para C (ncurses) libncurses-gst - Ligações de Ncurses para GNU Smalltalk libkaya-ncurses-dev - Ligação de Ncurses para kaya libkaya-ncursesw-dev - Ligação Ncurses para kaya libcurses-perl - Interface Curses para Perl libcurses-widgets-perl - Interface do widget Curses para Perl libruby-extras - um pacote de bibliotecas adicionais para Ruby libruby1.8-extras - um pacote de bibliotecas adicionais para Ruby 1.8 libtexttools-dev - Biblioteca Ada e C++ para escrever aplicativos de console libtexttools2.0.5 - Biblioteca Ada e C++ para escrever aplicativos de console libncurses-ruby1.8 - extensão ruby ​​​​para a biblioteca C ncurses libncurses-ruby1.9 - Extensão ruby ​​para a biblioteca C ncurses libncurses-ruby - Extensão ruby ​​para a biblioteca C ncurses lib64ncurses5-dev - bibliotecas do desenvolvedor para ncurses (64 bits) lib64ncurses5 - bibliotecas compartilhadas para manuseio de terminal (64 bits) libncurses5-dbg - bibliotecas de depuração/criação de perfil para ncurses libncurses5-dev - bibliotecas e documentos do desenvolvedor para ncurses libncursesw5-dbg - bibliotecas de depuração/criação de perfil para ncurses libncursesw5-dev - bibliotecas do desenvolvedor para ncursesw libcurses-ocaml-dev - ligações OCaml para a biblioteca ncurses libcurses- ocaml - Ligações OCaml para a biblioteca ncurses libggi-target-terminfo - Interface Gráfica Geral TermInfo display target libncurses5 - bibliotecas compartilhadas para controle de terminal libncursesw5 - bibliotecas para controle de terminal (suporte para caracteres de byte duplo)

Está linha: libncurses5-dev - bibliotecas e documentos do desenvolvedor para ncurses pareceu-me necessário. Vamos instalar:

Kernel-server:/usr/src/linux-2.6.36.1# apt-get install libncurses5-dev Lendo listas de pacotes... Concluído Construindo árvore de dependências Lendo informações de status... Concluído NOVOS pacotes a serem instalados: libncurses5-dev 0 atualizado , 1 novo pacote instalado, 0 pacote marcado para remoção e 5 pacotes não atualizados. Você precisa baixar 1546kB de arquivos. Após esta operação, a quantidade de espaço em disco ocupado aumentará em 6599kB. Recebido:1 http://ftp.debian.org lenny/main libncurses5-dev 5.7+20081213-1 Recebido 1546kB em 4s (344kB/s) Seleção do pacote libncurses5-dev não selecionado anteriormente. (Lendo o banco de dados... 18098 arquivos e diretórios atualmente instalados.) Descompactando o pacote libncurses5-dev (do arquivo.../libncurses5-dev_5.7+20081213-1_i386.deb)... Processando gatilhos man-db... Pacote libncurses5-dev (5.7+20081213-1) está sendo configurado...

Feito, vamos tentar :

Viva! Vemos o cobiçado menu de configuração do kernel. A seguir são mostradas as várias opções que permitem incluir componentes no kernel ou criar módulos. Quando uma opção é realçada, você pode usar a barra de espaço para navegar pelas opções desse componente. Para ativar a opção, pressione y desabilitar -- n para criar, se possível, um módulo, clique em m. Sair do menu: Esc Esc.

  • [*] O componente será incluído no kernel.
  • O componente não será incluído no kernel.
  • [M] O componente será estilizado como um módulo.
  • < >O componente não será incluído no núcleo, mas poderá ser empacotado como um módulo.

Abaixo, darei uma descrição das principais seções de configuração da alteração (ela será reabastecida com o tempo):

Capítulo parâmetro Descrição
Configuração geral Esta seção permite que você adicione uma string de identificação ao seu kernel, bem como vários atributos que não estão relacionados a nenhuma seção, mas ainda precisam ser descritos.
Ativar suporte a módulo carregável Esta seção contém opções para determinar se seu kernel suportará módulos e se eles serão carregados e descarregados automaticamente. A opção "Habilitar suporte a módulo carregável" deve estar habilitada.
Tipo de processador e recursos Esta seção contém opções de configuração específicas para este tipo de processador. Aqui você pode selecionar o processador e a família de processadores que serão suportados pelo seu kernel. Você pode ativar ou desativar o suporte do kernel para vários recursos fornecidos por este processador. Certifique-se de habilitar o suporte de multiprocessamento simétrico se o seu sistema tiver mais de um processador ou se o processador suportar hyperthreading. Além disso, para obter melhor desempenho do subsistema gráfico em sistemas com placas de vídeo AGP ou PCI, o suporte para MTRR deve ser ativado.
Opções de gerenciamento de energia Esta seção contém opções relacionadas ao gerenciamento de energia. Eles são especialmente importantes para laptops. Além de monitorar o status de energia, você pode encontrar ferramentas para controlar e monitorar parâmetros como temperatura ou status do ventilador de resfriamento.
Opções de barramento (PCI etc.) Esta seção contém opções para os barramentos de computador suportados pelo seu sistema, como PCI, PCI Express e PC Card. Aqui você pode ativar o suporte para o sistema de arquivos /proc/pci, que pode ser usado em conjunto com o comando lspci comumente usado.
Formatos de arquivos executáveis ​​/ Emulações Esta seção contém opções relacionadas ao suporte para vários formatos de arquivo binário. O suporte para "ELF binary" deve estar ativado. Além disso, você pode ativar o suporte para binários DOS para executá-los sob DOSEMU, bem como outros binários suportados por wrappers apropriados, como Java ™, Python, Emacs-Lisp, etc. Finalmente, para sistemas de 64 bits que suportam 32-bit emulação de bits, convém ativar o suporte para aplicativos de 32 bits.
rede A seção referente às configurações de rede é bem grande. Aqui você pode ativar o suporte básico de soquete, rede TCP/IP, filtragem de pacotes de rede, roteamento e bridging, bem como suporte para vários protocolos, como IPV6, IPX, Appletalk e X.25. Além disso, você pode ativar o suporte para rádio sem fio, infravermelho e amador.
drivers de dispositivo Esta seção também é muito grande. Aqui você pode ativar o suporte para um grande número de dispositivos de hardware, incluindo unidades IDE/ATAPI ou SCSI ou unidades flash. Habilite o DMA para seus dispositivos IDE; caso contrário, eles funcionarão no modo PIO mais lento. Se você deseja ter suporte para vários dispositivos, como RAID ou LVM, as opções correspondentes também devem ser habilitadas. Aqui você também pode ativar o suporte à porta paralela para trabalhar com a impressora por meio desta interface. É aqui que você configura a ampla gama de dispositivos de rede suportados para os vários protocolos de rede que configuramos anteriormente. Além disso, aqui você encontrará opções para suportar dispositivos de captura de áudio e vídeo, dispositivos USB e IEEE 1384 (Firewire), bem como vários tipos de dispositivos de monitoramento de hardware. Na seção Dispositivos de caracteres, você pode habilitar o suporte de impressão de porta paralela e o suporte de renderização direta.
drivers de firmware Esta seção contém várias opções relacionadas à instalação e atualização do BIOS, como o uso dos recursos do Dell System Management em alguns sistemas Dell.
Sistemas de arquivos Esta seção é para configurar os sistemas de arquivos que você deseja suportar em seu kernel, compilados como módulos ou não. Você também pode encontrar aqui sistemas de arquivos para dispositivos de disco removível (disquetes, CDs e DVDs), bem como sistemas de arquivos de rede como NFS, SMB ou CIFS. Suporte para vários tipos de seções e codificações nacionais O suporte ao idioma nativo também está localizado nesta seção.
hacking do kernel Esta seção permite ativar o modo de depuração do kernel e escolher quais recursos adicionais serão ativados.
opções de segurança Esta seção é para configurar as opções de segurança e habilitar e configurar o SELinux (Security Enhanced Linux).
Opções criptográficas Nesta seção, você pode configurar o suporte para vários algoritmos de criptografia, como MD4, DES e SHA256.
rotinas de biblioteca Aqui você pode especificar um número de algoritmos de cálculo de checksum (CRC) a serem incluídos no kernel ou compilados como módulos.

Eu dei uma breve descrição das seções de configuração do kernel. Especificamente sobre a escolha das configurações, provavelmente farei um post separado, porque o atual cresceu para um tamanho enorme. A melhor descrição das configurações do make menuconfig que encontrei aqui Manual do Gentoo. De mim mesmo, direi que seria lógico executar make oldconfig (copiando assim o current.config do sistema operacional instalado) e, em seguida, executar make menuconfig e desabilitar todas as funções desnecessárias (digamos que desativei o suporte para WiFi, arquivo jfs sistemas que não preciso, etc.). E, em geral, sou adepto da opinião de que é necessário fazer a otimização do kernel em casos muito extremos, quando o desempenho do sistema operacional depende dos recursos do hardware. Conseqüentemente, reduzindo o tamanho do kernel (desativando módulos desnecessários, incluindo-os no kernel + desativando recursos desnecessários), você pode adicionar 1-2% ao desempenho. E em servidores modernos, acho que isso (reconfiguração do kernel) não é particularmente relevante.

Construindo o Kernel

Agora que configuramos o kernel, estamos prontos para construí-lo. Se você não sabe qual é o estado da árvore de construção, execute make clean antes de começar a configurar um novo kernel. Para uma limpeza mais completa, execute make mrproper (isso removerá o arquivo .config, bem como alguns outros arquivos usados ​​no processo de compilação, make mrproper ).

Como parte do teste de configuração, é aconselhável dar ao novo kernel um nome especial que permita identificá-lo facilmente. Para fazer isso, você deve definir o valor Versão local e ativar a opção Anexar automaticamente as informações da versão à sequência da versão na linha correspondente da seção Configuração geral.

Em princípio, nenhuma permissão de root é necessária para construir o kernel, embora instalando um novo kernel esses poderes são necessários.

Para começar a construir o kernel 2.6, você precisa executar make .

Para começar a construir o kernel 2.4, você precisa executar 3 comandos:
fazer dependência
fazer bzImage
fazer módulos
O primeiro cria os arquivos de dependência necessários. O segundo coleta o núcleo. E o último coleta módulos.

Instalando um novo kernel

Depois que o kernel é construído, ele deve ser instalado. Antes de instalar, você precisa executar make modules_install para instalar os módulos do kernel em um novo subdiretório /lib/modules. Após instalar os módulos, você precisa executar make install para instalar o novo kernel e o disco RAM inicial (inicial RAM disk) no diretório /boot e atualizar a configuração do bootloader.

Gostaria de chamar sua atenção para o fato de que o disco RAM inicial necessário (disco RAM inicial ou initrd) é criado automaticamente durante o processo de compilação. Se você precisar criá-lo manualmente, poderá fazê-lo com o comando mkinitrd.

Depois de executar make install, o arquivo de configuração do bootloader deve ser atualizado. Mas, por algum motivo, foi atualizado para mim após o comando update-grub.

Sobre isso eu vou terminar. É um artigo muito grande. Em um futuro próximo, tentarei espremê-lo.