O kernel do Linux é o mais recente. Kernel personalizado no * ubuntu, ou Por que e como compilar um kernel no Linux

A questão é: por que não aprender como fazer o mesmo com o kernel Linux? As razões para construir um kernel Linux a partir da fonte são, em geral, as mesmas - obter a versão mais recente do kernel, aplicar patches de segurança com urgência, otimizar para tarefas específicas e hardware específico, bem como o desejo de participar do desenvolvimento do kernel, até mesmo na função de QA.

Importante! Seguir as instruções desta postagem pode resultar na perda de seus dados. Faça backups e lembre-se de que você está fazendo tudo por sua própria conta e risco. Tudo descrito a seguir foi testado no Ubuntu 14.04 LTS. Mas em outras versões do Ubuntu, bem como em outras distribuições Linux, as diferenças devem ser mínimas.

Configurando o bootloader

Editamos / etc / default / grub assim:

GRUB_DEFAULT \u003d 0
# GRUB_HIDDEN_TIMEOUT \u003d 10
# GRUB_HIDDEN_TIMEOUT_QUIET \u003d true
GRUB_TIMEOUT \u003d 10
GRUB_DISTRIBUTOR \u003d `lsb_release -i -s 2\u003e / dev / null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT \u003d "splash silencioso"
GRUB_CMDLINE_LINUX \u003d ""

Após a edição, dizemos:

sudo update-grub

Como resultado, antes de inicializar o sistema, você será solicitado por 10 segundos para selecionar o kernel com o qual deseja inicializar. Muito útil se você bagunçou algo com a configuração do kernel e deseja inicializar a partir da versão anterior!

Adicionar dependências

Precisamos de pelo menos os seguintes pacotes:

sudo apt-get install git gcc make bc fakeroot dpkg-dev \\
libncurses5-dev libssl-dev

Em muitos sistemas, no entanto, todos eles já estarão presentes.

Nós pegamos as fontes

wget https: // www.kernel.org/ pub / linux / kernel / v4.x / linux-4.6.4.tar.xz
tar --xz -xvf linux-4.6.4.tar.xz
cd linux-4.6.4

Ou, se você quiser o mais recente, pode obter as fontes diretamente do Git:

# Mirror: https://github.com/torvalds/linux
git clone "git: //git.kernel.org/pub/scm/linux/kernel/git/"\
"torvalds / linux.git"
cd linux

Julgando pelo fato de que não consegui encontrar a tag v4.6.4 no Git, os lançamentos do kernel do Linux são feitos exclusivamente na forma de arquivos tar compactados.

Se, em vez de um kernel vanilla, você gostaria de construir um kernel com patches da Canonical:

git clone git: // kernel.ubuntu.com/ ubuntu / ubuntu-trusty.git
cd ubuntu-trusty
tag git | Menos
git checkout Ubuntu-lts-4.4.0-31.50 _14.04.1

De minha própria experiência, se você estiver usando o Ubuntu, pode usar com segurança o kernel vanilla. É improvável que você tenha problemas com isso.

Nota: Curiosamente, das distribuições Linux relativamente populares por aí, apenas Gentoo, Slackware e Arch Linux parecem estar usando um kernel sem seus próprios patches.

De qualquer forma, agora você tem as fontes.

Montagem e instalação do kernel

Selecionamos as opções com as quais o kernel será construído:

fazer menuconfig

Se necessário, altere as configurações, clique em Salvar e em Sair. Isso criará um arquivo .config contendo as opções que selecionamos.

Quando atualizando kernels (você já está usando algum tipo de kernel mesmo?) É conveniente pegar a configuração do kernel atual e definir os valores padrão para as novas opções:

zcat / proc / config.gz\u003e ./ .config
make olddefconfig

Finalmente, coletamos:

make -j4 bindeb-pkg LOCALVERSION \u003d -custom

Demora muito para montar o núcleo. No meu laptop, a construção levou 1 hora e 15 minutos. No entanto, a partir desse momento b sobrea maior parte é gasta na construção de um pacote de kernel gigante com símbolos de depuração. A montagem deste pacote pode ser desabilitada comentando o parâmetro CONFIG_DEBUG_INFO na configuração. Esteja ciente de que este pacote é exigido pelo SystemTap e outras ferramentas úteis.

Além do próprio kernel, você também pode coletar documentação:

# há também `make pdfdocs` e outros, veja` make help`
fazer htmldocs
chromium-browser Documentation / DocBook / index.html

No final da assembleia em filha diretório, vemos algo como:

linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

Nós instalamos todos os pacotes deb exceto a versão dbg do kernel como de costume sudo dpkg -i e reinicie. Após a reinicialização, olhamos para a saída do comando uname -a ... Certifique-se de realmente inicializar com o novo kernel. Se algo está errado com o novo kernel, no bootloader nós simplesmente selecionamos aquele com o qual o sistema foi inicializado antes. Depois de inicializar com o kernel antigo, removemos rapidamente os pacotes do novo kernel, e voila - o sistema voltou ao estado anterior.

Quando eles me falam sobre os freios mais duros do Linux em comparação com o Windows instalado na mesma máquina, eu faço uma única pergunta: "Você tem um kernel auto-montado ou aquele inchado até a impossibilidade que vem no kit de distribuição por padrão?" Normalmente, a resposta é: "Naturalmente, o que está na distribuição!"

Além disso, ao mesmo tempo, percebe-se com grande surpresa que para melhorar o funcionamento do sistema não custaria nada reconstruir o kernel para o seu computador específico a fim de desabilitar uma quantidade enorme do que é absolutamente desnecessário para o seu hardware, mas apenas retarda o seu trabalho ... a questão é, por que os desenvolvedores do kit de distribuição incluíram um kernel tão lento que um usuário comum que instalou este kit de distribuição para si mesmo deve recompilá-lo? .. E a questão parece lógica, mas não exatamente ...

Os desenvolvedores de distribuição geralmente incluem um kernel que pode facilmente reconhecer o máximo de hardware possível, como em um computador que seu avô comprou para cortar o Call of Duty enquanto não assistia a notícias na TV e o sistema mais recente, comprado para obter o máximo do seu computador. Naturalmente, neste caso, o kernel fica extremamente inchado, e durante a operação ele fica terrivelmente lento, porque toda vez que o sistema tem que "fuçar" em uma grande pilha de registros e drivers dentro do kernel, o que pode agradar nem a você nem ao seu computador ... E compilar seu próprio kernel permite que você desative tudo desnecessário, deixando apenas a funcionalidade necessária ... O fato é que quando o sistema operacional Linux está rodando, o kernel é a única parte da memória que não troca, então é bastante lógico torná-lo o menor possível. Espero ter explicado em uma ciência popular a necessidade absoluta de reconstruir o kernel? ..

Normalmente, pela primeira vez percebendo a importância de compilar o kernel, criadores de pinguins novatos desistem, acreditando que isso requer muito conhecimento e tempo, e em geral esta é uma ocupação para administradores de olhos vermelhos que dormem apenas por algumas horas com um laptop debaixo do braço, e certamente não para humanos, não o suficiente quem ainda entende de Linux ... No entanto, apresso-me em garantir que tudo é muito simples e você não deve ter medo de não o procedimento mais complicado. Você só precisa descobrir a configuração completa do seu computador e reservar uma hora para uma configuração cuidadosa do kernel. O programa de instalação irá construir o kernel, e você só precisa colocar a máquina à sua disposição por meia hora. 🙂

Então, como prometi antes, vou falar sobre o processo de configuração e compilação do seu próprio kernel ... Vamos lá!

A primeira coisa de que precisamos é o código-fonte real para o novo kernel, sob o qual seu Linux estará rodando em breve. Você pode baixá-lo totalmente gratuito em http://www.kernel.org. Você precisa baixar o kernel estável mais recente (geralmente é o primeiro da lista, onde diz "A versão estável mais recente do kernel Linux é ..."). Aconselho você a pegar o arquivo tar.bz2, mas apenas porque é menor. Se você já compilou o kernel, então você pode simplesmente baixar os patches, ou seja, patches para não baixar o kernel inteiro, que é muito grande em volume ... Na verdade, eu recomendo usar o kernel completo, pois li que vários problemas podem surgir quando o kernel é corrigido , muitas vezes diretamente relacionado à simples curvatura dos braços, porém, sem o conhecimento adequado, é melhor não arriscar ...

Então, o kernel foi baixado ... Defina o comando:

sudo chmod 777 / usr / src

Depois disso, nós o soltamos (o arquivo baixado) na pasta / usr / src. Descompacte o arquivo com o comando:

tar -jxvf xxxxx.tar.bz2

Neste comando, xxxxx.tar.bz2 é o nome do arquivo compactado com o kernel ... Assim que a descompactação for concluída, suas fontes estarão no diretório / usr / src / xxxxx.

Antes de começar a configurar o kernel, descubra exatamente as especificações do seu computador:
1) tipo de processador,
2) chipset da placa-mãe,
3) tipo de placa de vídeo,
4) tipo de placa de rede,
5) tipo de placa de som,
6) tipo de disco rígido,
7) dispositivos USB e outras coisas ...

Quando tudo estiver instalado e estudado, você pode realmente começar a configurar o kernel.

Vamos para o diretório / boot e vemos um arquivo com algo como este nome config-2.6.24-19-generic. Nos precisamos disto. Copie-o para o diretório de origem / usr / src / xxxxx e renomeie-o para.config.

Além disso, pré-abra o Makefile, e na linha "EXTRAVERSION \u003d" adicione nosso nome para o kernel, por exemplo, EXTRAVERSION \u003d -mykernel. Esta linha não possui nenhuma outra função, exceto como uma conveniência na identificação de seu próprio kernel.

Este comando ativa a interface de configuração do console. Se você preferir o configurador gráfico, para iniciá-lo você precisa usar o comando:

Também existe uma opção de configuração do console:

Esta opção é muito útil apenas quando já existe um arquivo de configuração.config gerado (você pode usar o arquivo de configuração do kernel antigo). Nesta opção, apenas perguntas são feitas sobre os recursos que apareceram na versão do kernel para a qual o arquivo de configurações foi feito.

Se você deseja que o kernel funcione de forma estável e o mais rápido possível, adote uma abordagem responsável para o ajuste. Leia cada parágrafo cuidadosamente. Se você não entende alguma coisa, procure respostas na Internet. Por exemplo, você pode encontrar descrições de muitas configurações e dicas sobre como usá-las da melhor forma. A propósito, também existem algumas dicas para otimizar o kernel na seção "3.4 Exemplo de configuração do kernel".

Após a configuração, selecione o item “Salvar a configuração em um novo arquivo”, onde especificamos o nome de um arquivo diferente de .config, por exemplo, config_mykernel. Em seguida, renomeie o .config para .config_old. E você acaba com dois arquivos - .config_old e .config_mykernel. A propósito, é possível ver as diferenças entre o padrão e sua configuração assim:

diff .config .config_mykernel

Agora copie seu config .config_mykernel como .config. Essa. você terá três arquivos de configuração. O arquivo .config será usado durante a compilação. Os arquivos .config_ubuntu e .config_mykernel nos ajudarão no futuro para uma nova compilação. Isso é para o caso de o novo kernel estar inoperante.

A compilação do kernel deve ser feita sob o superusuário. Por que nos tornamos root e iniciamos o processo de construção do kernel:

sudo -s -H
make-kpkg --initrd --revision \u003d mykernel.1 kernel_image kernel_headers

nesta linha mykernel.1 representa o nome do kernel. Você pode escrever o que seu coração desejar.

A operação de compilação leva bastante tempo, dependendo da potência do computador, normalmente demorava cerca de meia hora ...

No final do processo, dois arquivos deb serão criados com um kernel configurado especificamente para suas necessidades. Parabéns, o kernel está pronto.

Agora você precisa instalar o kernel compilado no sistema:

sudo dpkg -i linux-image-xxxxx.deb
sudo dpkg -i linux-headers-xxxxx.deb

Substitua pelos nomes exatos dos arquivos deb que você criou. Em seguida, reinicializamos e vemos nosso kernel no menu. Se você carregou tudo conforme o esperado, acho que sentirá imediatamente o ganho de desempenho. Porém, se você instalou, por exemplo, uma placa da nVidia, provavelmente é o fim de tudo ... Por exemplo, depois de iniciar minha versão do kernel, acabei de ficar com uma tela preta e zero emoções ...

Isso foi corrigido com a instalação de drivers proprietários da nVidia. Existem duas opções para instalá-los: para um novo kernel (neste caso, o servidor gráfico funcionará apenas em seu kernel (recomendado se você não planeja trabalhar em qualquer kernel diferente do seu) e em vários kernels existentes (neste caso, o sistema irá inicializar tanto no novo kernel que você criou, quanto no anterior) Mas essa é uma história completamente diferente ...

Em meados de março, após quase dois meses de desenvolvimento e sete candidatos a lançamento, Linus Torvalds apresentou uma nova versão do kernel 4.5. Além das correções, o lançamento realmente contém muitas coisas novas. As mudanças afetaram todos os subsistemas - disco, memória, sistema e serviços de rede, segurança e, é claro, drivers adicionados para novos dispositivos. Vamos tentar descobrir alguns dos mais interessantes.

Sobre o lançamento

O kernel 4.4 foi lançado há relativamente pouco tempo, no início de janeiro de 2016, mas um grande número de adições se acumulou neste curto período de tempo. E embora Linus tenha chamado a nova versão de "normal", você pode ver que, em comparação com a versão 4.4, o tamanho do patch aumentou quase um terço - 70 MB contra 49 MB. Cerca de 1528 pessoas participaram do empreendimento, que fizeram cerca de 13 mil correções. Em mais de 11 mil arquivos, 1.146.727 foram adicionados, 854.589 linhas de código foram removidas. 4,4 tinha 714 106 e 471 010 linhas, respectivamente. Quase metade (45%) de todas as alterações estão relacionadas a drivers de dispositivo, 17% afetam o código de arquiteturas de hardware, 14% afetam a pilha de rede, 4% afetam sistemas de arquivos e 3% afetam subsistemas internos do kernel. O maior número de linhas foi contribuído por Doug Ledford da Red Hat, que estava principalmente envolvido na limpeza de código (7,7%), Tomi Valkeinen da Texas Instruments, que trabalhou no suporte para a subarquitetura OMAP (5,3%), três desenvolvedores focado em drivers de gráficos AMD: Eric Huang 3,3%, Alex Deucher 2,4% e yanyang1 1,6%. Líderes do changeset - Linus Walleij da Linaro, que implementou muitas mudanças de baixo nível, incluindo o GPIO que ele apóia (2,0%), Arnd Bergmann, que trabalhou muito para oferecer suporte ao ARM (1,9% ), e Leo Kim, motorista wilc1000 (1,7%). Como antes, muitas empresas estão interessadas em desenvolver o núcleo. O trabalho na versão 4.5 foi apoiado por mais de 200 empresas, incluindo Red Hat, Intel, AMD, Texas Instruments, Linaro, Linux Foundation, Samsung, IBM, Google. A maioria deles está desenvolvendo suporte para seus dispositivos e subsistemas e ferramentas relacionados, mas o Google, por exemplo, tradicionalmente fez muitas mudanças no subsistema de rede Linux.

Kernel e drivers

A migração de código complexo e mal mantido escrito em assembler (x86 / asm) para C, iniciada na versão 4.0, continuou. O kernel agora pode ser construído com o parâmetro -fsanitize \u003d undefined. O próprio parâmetro apareceu há dois anos no GCC 4.9+ e ativa o modo de depuração UBSan (Undefined Behavior Sanitizer), que detecta o comportamento indefinido inerente às linguagens C e C ++: o uso de variáveis \u200b\u200bnão estáticas antes da inicialização, divisão por zero, estouro de inteiro e assim por diante. O compilador geralmente assume que tais operações nunca ocorrerão e, se ocorrerem, o resultado pode ser qualquer coisa e depende do próprio compilador. Agora o compilador detecta tais situações, emite "erro de tempo de execução:" (você pode desativar -fno-sanitize-recover) e continuar a execução. Por padrão, em cada conjunto de sistema operacional, todas as bibliotecas são carregadas em endereços específicos, o que facilita a implementação de um ataque. Para aumentar a segurança, várias tecnologias são usadas, uma delas é um deslocamento aleatório ao chamar mmap (), implementado na forma de ASLR (Address Space Layout Randomization). Pela primeira vez, a tecnologia ASLR apareceu no Linux em 2005 no kernel 2.6 e deu um deslocamento de 8 bits para sistemas de 32 bits (ou seja, 256 opções de endereço, embora na realidade haja menos), e para x64 - o deslocamento já é de 28 bits. Para x64, as opções são suficientes, mas para sistemas de 32 bits, incluindo Android, isso claramente não é suficiente hoje. Já existem exploits conhecidos que podem adivinhar o endereço. Como resultado da busca por uma solução para o problema, um patch foi escrito que permite definir mais aleatoriedade para ASLR, por meio de / proc / sys / vm / mmap_rnd_bits e / proc / sys / vm / mmap_rnd_compat_bits (em sistemas x64 para processos x86). Para cada arquitetura, os valores mínimo e máximo são especificados com base no espaço de endereço disponível. Para x86, o valor pode variar de 8 a 16 bits ou 28-32 (para a versão x64). Os parâmetros padrão podem ser definidos ao construir o kernel.
Configurando ASLR no novo kernel Os recursos de driver DRM para placas de vídeo NVIDIA (Nouveau) e Intel foram expandidos (suporte para a futura geração de chips Kaby Lake), suporte para novas placas de som, controladores USB e aceleradores de criptografia foram adicionados. Os fabricantes de placas de vídeo Intel e NVIDIA abandonaram há muito tempo o uso de UMS (Userpace Mode Setting) em seus drivers de código aberto em favor de KMS (Kernel Mode Setting), agora é a vez do driver ATI Radeon, no qual o código do modo UMS foi removido. Desde a 3.9, é possível habilitá-lo com o parâmetro DRM_RADEON_UMS ou configurando radeon.modeset \u003d 0 no GRUB. Agora, apenas KMS (Kernel Mode Setting) permanece. Isso deve ser levado em consideração se você precisar usar drivers antigos ou o modo UMS (UMS às vezes mostra melhor desempenho). O driver AMDGPU adiciona suporte experimental para a tecnologia de gerenciamento dinâmico de energia PowerPlay para melhorar o desempenho da GPU para as GPUs Tonga e Fiji e Carrizo e Stoney integrados. No modo PowerPlay, a GPU inicia no modo de baixo consumo de energia, mas aumenta automaticamente a frequência se a carga no subsistema gráfico aumentar. O PowerPlay está desabilitado por padrão; para habilitá-lo, passe o parâmetro amdgpu.powerplay \u003d 1 para o kernel. A nova versão da API do controlador de mídia amplia o suporte para dispositivos Video4Linux e permite usar a funcionalidade do controlador de multimídia em outros subsistemas como DVB, ALSA e IIO. KVM (Kernel-Based Virtual Machine) fez muito para suportar a arquitetura s390 (agora pode usar até 248 vCPUs), ARM / ARM64 e melhorar o desempenho x86 no Hyper-V.

Instalando o kernel 4.5 no Ubuntu

A maneira mais fácil de se familiarizar com o novo kernel é usar a compilação da equipe do Ubuntu Kernel. Após testes extensivos, o novo kernel termina em ppa: canonical-kernel-team / ppa, mas geralmente leva tempo. $ wget -с http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb http: // kernel .ubuntu.com / ~ kernel-ppa / mainline / v4.5-wily / linux-headers-4.5.0-040500_4.5.0-040500.201603140130_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline /v4.5-wily/linux-image-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb $ sudo dpkg -i linux * .deb Depois de reiniciar, podemos trabalhar.

Suporte ARM

Os computadores ARM são usados \u200b\u200bcomo minisservidores para tarefas específicas ou como controladores de automação, o que os torna muito populares e procurados. A comunidade ARM Linux cresceu e se tornou uma das mais ativas nos últimos cinco anos, com uma enorme quantidade de trabalho apoiando a participação de mercado de plataformas ARM de 32 bits, que é amplamente concluída no ramo 4.5. Anteriormente, cada dispositivo ARM precisava construir seu próprio kernel para suportar apenas alguns dispositivos. Mas o problema era que os dispositivos estavam ficando mais complexos, era possível alterar a configuração e os próprios usuários de dispositivos ARM queriam usar distribuições comuns sem gestos desnecessários. Mas, no final, tínhamos várias centenas de opções para construir o kernel, o que torna muito difícil usar o Linux. Como resultado da limpeza e refatoração de uma grande quantidade de código, foi possível incluir suporte para ARMv6 e ARMv7 no kernel, ou seja, agora podemos construir um kernel universal que pode inicializar em ambos os sistemas. Aqui, talvez, devamos lembrar também a especificação Device Tree recentemente promovida, que surgiu como parte do desenvolvimento do Open Firmware. A árvore de dispositivos permite que você configure o hardware no momento da inicialização usando arquivos dts especiais armazenados em / boot / dtbs e altere as configurações sem reconstruir o kernel. O uso da árvore de dispositivos está se tornando uma obrigação para todos os novos designs de ARM e além. Tudo isso junto dá a confiança de que as distribuições do Linux no futuro podem ser facilmente executadas em qualquer dispositivo ARM. Paralelamente, Greg Kroah-Hartman, da Linux Foundation, lançou um patch que implementa um recurso semelhante para as primeiras versões do kernel. Em arch / arm64, encontraremos o código que fornece suporte para a nova arquitetura ARM de 64 bits (ARMv8). Novos recursos adicionados para todas as arquiteturas ARM populares - Allwinner, Amlogic, Samsung, Qualcomm e suporte para novas placas ARM de vários fornecedores.

Serviços do sistema

Para acessar os dados do firmware UEFI (Unified Extensible Firmware Interface) no Linux, um sistema de pseudo-arquivos especial efivars (configurado por EFIVAR_FS) é usado, que é montado em / sys / firmware / efi / efivars. Em algumas implementações, a execução do comando rm -rf / * também excluiu o conteúdo desse diretório, resultando na destruição do firmware. As empresas de dispositivos não consideram isso uma desvantagem séria, porque a situação, é claro, não é a mais comum e é improvável que qualquer usuário pense em verificá-la. No entanto, há um problema e os criadores de vírus podem aproveitar essa oportunidade de maneira bastante realista. O kernel 4.5 agora adiciona uma proteção especial para o diretório / sys / firmware / efi / efivars, que não permite a exclusão de arquivos dentro dele.

A continuação está disponível apenas para participantes

Opção 1. Participe da comunidade "site" para ler todos os materiais no site

Ser membro da comunidade durante o período especificado permitirá que você tenha acesso a TODOS os materiais do Hacker, aumentará seu desconto pessoal cumulativo e permitirá que você acumule uma Pontuação Xakep profissional!

Por que alguém iria querer compilar um novo kernel? Geralmente não é necessário, pois o kernel padrão enviado com o Debian lida com a maioria das configurações. Além disso, o Debian geralmente oferece vários kernels alternativos. Portanto, você pode querer verificar primeiro se existe um pacote de imagem de kernel alternativo que melhor corresponda ao seu hardware. No entanto, pode ser útil compilar um novo kernel para:

Não tenha medo de tentar compilar o kernel. É divertido e lucrativo.

Para compilar um kernel do jeito Debian, você precisa de alguns pacotes: e alguns outros que provavelmente já estão instalados (veja para a lista completa).

Este método criará um .deb da sua fonte do kernel e, se você tiver módulos não padrão, também fará um .deb dependente sincronizado. É a melhor maneira de gerenciar imagens de kernel; manterá o kernel, o System.map e um log do arquivo de configuração ativo para a compilação.

Observe que você não ter compilar seu kernel da “maneira Debian”; mas descobrimos que usar o sistema de empacotamento para gerenciar seu kernel é na verdade mais seguro e fácil. Na verdade, você pode obter as fontes do kernel diretamente do Linus em vez de usar o método de compilação.

Observe que você encontrará a documentação completa sobre o uso em. Esta seção contém apenas um breve tutorial.

A partir de agora, nós assumiremos que você tem controle total sobre sua máquina e irá descompactar o fonte do kernel em algum lugar do seu diretório pessoal. Também assumiremos que sua versão do kernel é 3.16. Certifique-se de que está no diretório para onde deseja descompactar os fontes do kernel, extraia-os usando e mude para o diretório que foi criado.

Agora, você pode configurar seu kernel. Executar se o X11 estiver instalado, configurado e em execução; execute de outra forma (você precisará instalar). Reserve um tempo para ler a ajuda on-line e escolha com cuidado. Em caso de dúvida, geralmente é melhor incluir o driver de dispositivo (o software que gerencia periféricos de hardware, como placas Ethernet, controladores SCSI e assim por diante) sobre o qual você não tem certeza. Cuidado: outras opções, não relacionadas a um hardware específico, devem ser deixadas com o valor padrão se você não as compreender. Não se esqueça de selecionar “Carregador de módulo de kernel” em “Suporte a módulo carregável” (não é selecionado por padrão). Se não estiver incluído, sua instalação do Debian terá problemas.

Limpe a árvore de origem e redefina os parâmetros. Para fazer isso, faça.

Agora, compile o kernel :. O número da versão “1.0” pode ser alterado à vontade; este é apenas um número de versão que você usará para rastrear suas compilações de kernel. Da mesma forma, você pode colocar qualquer palavra que desejar no lugar de "personalizado" (por exemplo, um nome de host). A compilação do kernel pode demorar um pouco, dependendo do poder da sua máquina.

Depois que a compilação estiver concluída, você poderá instalar seu kernel personalizado como qualquer pacote. Como root, faça. A parte é uma subarquitetura opcional, dependendo de quais opções de kernel você configurou. irá instalar o kernel, junto com alguns outros arquivos de suporte legais. Por exemplo, o será instalado corretamente (útil para depurar problemas do kernel) e será instalado, contendo seu conjunto de configurações atual. Seu novo pacote de kernel também é inteligente o suficiente para atualizar automaticamente seu gerenciador de inicialização para usar o novo kernel. Se você criou um pacote de módulos, também precisará instalá-lo.

É hora de reiniciar o sistema: leia atentamente qualquer aviso que a etapa acima possa ter produzido.

Para obter mais informações sobre kernels Debian e compilação de kernel, consulte o Debian Linux Kernel Handbook. Para obter mais informações sobre, leia a bela documentação em.

Se você se lembra, não faz muito tempo aprendemos como compilar o kernel do FreeBSD a partir dos fontes. A questão é: por que não aprender a fazer o mesmo com o kernel Linux? As razões para construir o kernel Linux a partir da fonte são, em geral, as mesmas - obter a versão mais recente do kernel, aplicar patches de segurança com urgência, otimizar para tarefas específicas e hardware específico, bem como o desejo de participar do desenvolvimento do kernel, até mesmo na função de QA.

Importante! Seguir as instruções desta postagem pode resultar na perda de seus dados. Faça backups e lembre-se de que você está fazendo tudo por sua própria conta e risco. Tudo descrito a seguir foi testado no Ubuntu 14.04 LTS. Mas em outras versões do Ubuntu, bem como em outras distribuições Linux, as diferenças devem ser mínimas.

Configurando o bootloader

Editamos / etc / default / grub assim:

GRUB_DEFAULT \u003d 0
# GRUB_HIDDEN_TIMEOUT \u003d 10
# GRUB_HIDDEN_TIMEOUT_QUIET \u003d true
GRUB_TIMEOUT \u003d 10
GRUB_DISTRIBUTOR \u003d `lsb_release -i-s2\u003e / dev / null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT \u003d "splash silencioso"
GRUB_CMDLINE_LINUX \u003d ""

Após a edição, dizemos:

sudo update-grub

Como resultado, antes de inicializar o sistema, você será solicitado por 10 segundos para selecionar o kernel com o qual deseja inicializar. Muito útil se você bagunçou algo com a configuração do kernel e deseja inicializar a partir da versão anterior!

Adicionar dependências

Precisamos de pelo menos os seguintes pacotes:

sudoapt-get installgitgccmakebc fakeroot dpkg-dev \\
libncurses5-dev libssl-dev

Em muitos sistemas, no entanto, todos eles já estarão presentes.

Nós pegamos as fontes

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.6.4.tar.xz
tar - xz-xvf linux-4.6.4.tar.xz
cd linux-4.6.4

Ou, se você quiser o mais recente, pode obter as fontes diretamente do Git:

# Mirror: https://github.com/torvalds/linux
git clone'git: //git.kernel.org/pub/scm/linux/kernel/git/ '\\
'Torvalds / linux.git'
cd linux

Julgando pelo fato de que não consegui encontrar a tag v4.6.4 no Git, os lançamentos do kernel do Linux são feitos exclusivamente na forma de arquivos tar compactados.

Se, em vez de um kernel vanilla, você gostaria de construir um kernel com patches da Canonical:

git clone git: //kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
cd ubuntu-trusty
tag git | menos
git checkout Ubuntu-lts-4.4.0-31.50_14.04.1

De minha própria experiência, se você estiver usando o Ubuntu, pode usar com segurança o kernel vanilla. É improvável que você tenha problemas com isso.

Nota: Curiosamente, das distribuições Linux relativamente populares por aí, apenas Gentoo, Slackware e Arch Linux parecem estar usando um kernel sem seus próprios patches.

De qualquer forma, agora você tem as fontes.

Montagem e instalação do kernel

Selecionamos as opções com as quais o kernel será construído:

Se necessário, altere as configurações, clique em Salvar e, em seguida, em Sair. Isso criará um arquivo contendo os parâmetros que selecionamos.

Quando atualizando kernels (você já está usando algum tipo de kernel mesmo?) É conveniente pegar a configuração do kernel atual e definir os valores padrão para as novas opções:

zcat / proc / config.gz\u003e ./.config
make olddefconfig

Finalmente, coletamos:

make-j4 bindeb-pkg LOCALVERSION \u003d -custom

Demora muito para montar o núcleo. No meu laptop, a construção levou 1 hora e 15 minutos. No entanto, a partir desse momento b sobrea maior parte é gasta construindo um pacote gigante de kernel com símbolos de depuração.

Construindo e configurando manualmente o kernel Linux

A montagem deste pacote pode ser desabilitada comentando o parâmetro CONFIG_DEBUG_INFO na configuração. Esteja ciente de que este pacote é requerido pelo SystemTap e outras ferramentas úteis.

Além do próprio kernel, você também pode coletar documentação:

# há também `make pdfdocs` e outros, veja` make help`
fazer htmldocs
chromium-browser Documentation / DocBook / index.html

No final da assembleia em filha diretório, vemos algo como:

linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

Instalamos todos os pacotes deb exceto a versão dbg do kernel com o usual e reinicializamos. Após a reinicialização, examinamos a saída do comando. Certifique-se de realmente inicializar com o novo kernel. Se algo está errado com o novo kernel, no bootloader simplesmente selecionamos aquele com o qual o sistema foi inicializado antes. Depois de inicializar com o kernel antigo, removemos rapidamente os pacotes do novo kernel, e voila - o sistema voltou ao estado anterior.

Além disso, depois de carregar um novo kernel, você pode executar testes nele:

sudomake kselftest
sudomake kselftest-clean

Parabéns, agora você pode construir um kernel Linux!

Conclusão

Componentes internos do kernel Linux:

  • KernelNewbies.org, um site para iniciantes no kernel do Linux com sua lista de discussão, canal IRC, fórum, wiki e muito mais;
  • LKML.org, um site para leitura confortável da lista de discussão de desenvolvedores do kernel do Linux por meio de um navegador. Tenha cuidado, muitas vezes estraga a formatação das letras! Nesse sentido, o arquivo da lista de discussão em marc.info é muito melhor;
  • Linux Cross Reference, um site para leitura confortável do código do kernel Linux por meio de um navegador;
  • O livro Linux Kernel Development, 3rd Edition é o livro mais recente sobre o kernel Linux em inglês (2010, kernel 2.6.x), há uma tradução para o russo;
  • Linux-Treiber entwickeln, 4ª edição é mais recente (2015, kernel 4.x), mas foi escrito em alemão e não tem tradução;
  • O livro gratuito Linux Insides, de Alexander Kuleshov a.k.a @ 0xAX, parece o mais acessível e relevante, mas, no momento, ainda está em processo de escrita;
  • Às vezes, você pode encontrar algo útil na documentação HTML do kernel do Linux, a documentação oficial das fontes do kernel do Linux;
  • Exemplos do livro Linux Device Drivers, 3rd Edition, que estão tentando manter-se atualizados, além do código fonte da 4ª edição, que ainda está sendo escrita;

Você está compilando o kernel a partir do código-fonte e, em caso afirmativo, por quê? 🙂

Adição: Você pode também estar interessado em The Scandalous Truth About Debugging Linux Kernel Code.

Tags: Linux, Ring0.

Compilação do kernel Linux


Muitos consideram uma perda de tempo inútil provar que são um "Linuxoid" inteligente e avançado. De fato, compilar o kernel é muito importante. Digamos que você comprou um laptop novo e sua webcam não funciona. Suas ações? Você olha em um mecanismo de busca e procura uma solução para um problema desse assunto. Muitas vezes pode acontecer que sua webcam esteja rodando em um kernel mais recente que o seu. Se você não sabe qual versão possui, digite uname -r no terminal, como resultado você obterá a versão do kernel (por exemplo, linux-2.6.31-10). A compilação do kernel também é amplamente usada para aumentar o desempenho: o fato é que por padrão nas distribuições os kernels são compilados "para todos", e é por isso que inclui um grande número de drivers dos quais você pode não precisar. Portanto, se você conhece bem o hardware que está usando, pode desabilitar drivers desnecessários no estágio de configuração. Também é possível ativar o suporte para mais de 4 Gigabytes de RAM sem alterar a profundidade de bits do sistema.

Como construir um kernel linux? Construindo o kernel Linux

Então, se você ainda precisa ter seu próprio kernel, vamos começar a compilar!


A primeira coisa a fazer é obter o código-fonte da versão correta do kernel. Normalmente, você precisa obter a versão estável mais recente. Todas as versões oficiais do kernel estão disponíveis em kernel.org.

Se você já tem um servidor X (computador residencial) instalado, pode acessar o site em seu navegador favorito e baixar a versão necessária em um arquivo tar.gz (gzip compactado). Se você estiver trabalhando no console (por exemplo, ainda não instalou o servidor X ou está configurando o servidor), pode usar um navegador de texto (por exemplo, elinks).

Você também pode usar o gerenciador de download wget padrão:


tar -zxvf path_to_archive

Configuração do kernel.

Compilação.
make && make install
Aguardamos de 20 minutos a várias horas (dependendo da potência do computador). O kernel está instalado. Para fazê-lo aparecer na lista do grub (2), digite (do superusuário)
update-grub


Arquivo de artigos:
Maio de 2017
Março de 2017
Abril de 2016
Março de 2016
outubro 2013
Setembro de 2013
Maio de 2013
Março de 2013
Novembro 2012
Julho de 2012
Junho de 2012
Abril 2012
Março de 2012
Fevereiro de 2012
Abril de 2011
Março de 2011
Fevereiro de 2011
Janeiro de 2011
Dezembro 2010
Novembro de 2010
Outubro de 2010
Setembro de 2010
Agosto de 2010
Julho de 2010
Junho de 2010
Maio de 2010
Abril de 2010
Março de 2010

Aleatória:

Stellarium Virtual Planetarium: uma visão geral dos novos recursos

BOINC: Computing for Science

Gambas: Desenvolvimento básico em linux

Diagramas sequenciais do SSH 2.0

Linuxnow.ru: Planos para o futuro

De repente, você está com pouco espaço em disco? Talvez o problema esteja nos logs.

Colegas: todos
Linux para todos

Nossos banners:


Definir banner

Configuração do kernel Linux

Verificando pacotes de origem

Para recompilar o kernel, você precisa de seus fontes.

Blog de administração do sistema. Artigos sobre Linux, Windows, armazenamento NetApp e virtualização.

O Red Hat hospeda as fontes do kernel em um único pacote rpm, mas não é instalado por padrão. O nome deste pacote:

kernel-source-2.4.2-2.1386.rpm

Além do código-fonte, é necessário um compilador para recompilar o kernel, que consiste em dois componentes:

faça utilidade;

o compilador C real é gcc ou egcs.

A criação de uma cópia de backup do kernel atual é realizada em três etapas:

1. Criação de uma cópia de backup do código fonte do kernel, que permite restaurá-lo se a configuração estiver danificada.

2. Fazer backup do próprio kernel como um iniciador de sistema em funcionamento conhecido.

3. Criando uma nova entrada para o carregador do sistema operacional, que pode ser usada para inicializar a partir do backup do kernel.

A criação de uma cópia de backup das fontes é feita copiando o diretório com os códigos-fonte do kernel para o disco. A recuperação é executada copiando na direção oposta.

Quando um kernel é recompilado, o kernel antigo é gravado em um arquivo com a extensão .old. No entanto, esta cópia do kernel ainda não pode ser usada para inicializar o sistema. Isso explica a necessidade de executar as operações acima.

Um carregador de sistema operacional como o LILO, comumente usado para inicializar o Linux, é configurado definindo uma referência a um arquivo de kernel no sistema de arquivos raiz.

Após o backup do kernel, outra entrada deve ser adicionada a /etc/lilo.conf para iniciar o Linux com o kernel antigo:

abra o arquivo / etc / lilo. conf em um editor de texto;

crie uma cópia de toda a seção;

mude duas posições na cópia:

substitua o nome do arquivo do kernel pelo nome da sua cópia de backup (junto com a extensão);

substitua o rótulo da partição por algo como linux. original (Linux original) ou linux-previous (Linux antigo).

as linhas que começam com initrd devem ser substituídas pelas linhas de backup correspondentes, por exemplo, initrd-2 .4.2-2. orig. Img;

grave as mudanças no arquivo / etc / lilo. conf.

digite o comando / sbin / lilo para injetar uma nova entrada no carregador de inicialização. O comando lilo exibe os rótulos das imagens inseridas no carregador do sistema operacional.

Na próxima vez que o sistema for reiniciado, o novo ID do kernel aparecerá na tela na dica de ferramenta gráfica do carregador LILO.

Configurando um novo kernel

Durante a configuração, é decidido quais funções incluir no kernel, quais não incluir, etc. Você pode escolher entre configurar o kernel antigo e instalar / configurar o novo. Por exemplo, usando Red Hat Linux 7.1, você pode reconfigurar um kernel 2.4.2 existente definindo novos parâmetros. Você também pode baixar e instalar o novo kernel 2.4.4. Embora os detalhes da configuração sejam diferentes nesses dois casos, os utilitários usados \u200b\u200be a metodologia de configuração são os mesmos.

O Linux tem três utilitários de configuração separados, cada um com suas especificidades.

Utilitário de linha de comando. O usuário responde consistentemente a perguntas sobre os recursos a serem incluídos no kernel. Este utilitário é conveniente para aqueles com experiência no kernel e para aqueles que possuem scripts de configuração para o utilitário.

Utilitário com menu de modo de texto. O menu multinível desse utilitário permite definir e redefinir os parâmetros do kernel em qualquer ordem.

Utilitário GUI. Este é o utilitário mais atraente, mas só funciona no X Window System gráfico.

Os utilitários listados criam o mesmo arquivo de configuração usado pelo utilitário make ao compilar total ou parcialmente o kernel.

Parâmetros do kernel

Ao olhar para os parâmetros em qualquer programa de configuração (linha de comando, interface textual ou gráfica), é necessário entender claramente o efeito desses parâmetros no funcionamento do kernel.

A identificação dos parâmetros em cada programa é diferente, mas nos três o mesmo conjunto deles é apresentado. Os parâmetros são divididos em dois grupos principais:

modular;

não modular.

Se o bloco de programa correspondente a este parâmetro não for carregado como um módulo do kernel, pode ser uma de duas coisas:

[*] uma parte integrante do kernel;

Parte não integrante do núcleo.

Os símbolos entre colchetes (junto com colchetes) correspondem a rótulos de parâmetros no menu de programas de configuração (exceto para o utilitário de linha de comando).

Para parâmetros modulares, três opções de instalação são possíveis (de acordo com sua apresentação no menu de utilitários de configuração):

<> não está incluído no kernel e não é criado como um módulo que pode ser carregado posteriormente:

<*> está incluído no kernel, portanto, não há necessidade de carregá-lo posteriormente como um módulo:

<М> Incluído como um módulo, mas não como parte do kernel. O bloco pode ser instalado ou removido do kernel a qualquer momento.

Às vezes, o valor de um parâmetro não pode ser alterado antes de definir outro parâmetro. Por exemplo, você só pode instalar o suporte para um dispositivo SCSI específico depois de habilitar o suporte geral para esses dispositivos.

Quando as ferramentas necessárias (o utilitário make e o compilador gcc) e os fontes são instalados no sistema, você pode executar um dos utilitários de configuração e começar a configurar o kernel.

Configurador de GUI

O utilitário de configuração com interface gráfica é iniciado na sequência a seguir.

Inicie o sistema X Windows (com qualquer ambiente gráfico e desktop).

Abra uma janela do emulador de terminal (janela da linha de comando).

Assim como na inicialização do utilitário anterior, várias mensagens sobre a compilação do utilitário piscarão na tela e, após alguns minutos, sua janela principal será aberta.

FIG. 8. Utilitário para configurar o kernel com uma interface gráfica: botões de menu para definir os valores dos parâmetros

O utilitário gráfico não é muito diferente do utilitário menuconf ig. Os parâmetros também são categorizados aqui; após clicar em uma determinada categoria, uma caixa de diálogo se abre com uma lista de parâmetros, cada um dos quais pode ser definido com um valor que determina que a ferramenta correspondente deve ser usada como parte do kernel, como um módulo carregável ou não.

Essa caixa de diálogo é mostrada na Fig.

FIG. 9. Caixas de diálogo como esta definem parâmetros de configuração do kernel

O kernel 2.4.2 no Red Hat Linux suporta uma arquitetura multiprocessador simétrica por padrão. Você deve definir a opção correspondente para n se o seu computador tiver apenas um processador.

À direita de cada opção, há um botão Ajuda.

Uma grande vantagem do utilitário de configuração gráfica (especialmente apreciado por quem configura o kernel pela primeira vez) é que o menu reflete as dependências entre os vários parâmetros. Por exemplo, em Dispositivos de bloco, você não pode instalar o suporte RAID embutido no kernel até que o Suporte a driver de dispositivo múltiplo seja habilitado.

Se no utilitário menuconfig a dependência dos parâmetros uns dos outros é mostrada por indentação dos nomes dos parâmetros no menu, então no utilitário gráfico é simplesmente impossível definir combinações não autorizadas de parâmetros. Trabalhar com o utilitário gráfico ajuda a entender as dependências entre os diferentes módulos.

No final do menu principal do utilitário gráfico, existem comandos semelhantes aos comandos correspondentes do utilitário com o menu do modo de texto.

Salvar e sair. Cria um arquivo de configuração do kernel e sai do utilitário.

Saia sem salvar. Saindo do utilitário sem criar um arquivo de configuração do kernel.

Sem criar um arquivo de configuração do kernel usando um dos utilitários listados, a recompilação do kernel é impossível.

Carregar configuração do arquivo. Carregando o arquivo de configuração criado anteriormente.

Armazenar configuração em arquivo. Gravar dados de configuração em um arquivo com o nome especificado (para uso posterior ou transferência para um colega). Isso não afeta a necessidade do comando Salvar e Sair, que cria um arquivo de configuração para recompilação do kernel.

Compilando e executando um novo kernel

Depois de completar a configuração, você precisa verificar se há um novo arquivo de configuração (.config) localizado no diretório / usr / src / linux-2 .4.2 (dependendo do número da versão). Se o arquivo .config estiver instalado, você pode usar o comando make para recompilar o kernel.

Normalmente, a recompilação do kernel dura de 15 minutos a várias horas. Depende da velocidade do processador, da quantidade de RAM e de vários outros fatores, por isso é conveniente combinar todos os comandos inseridos durante a compilação em um, separados por ponto e vírgula, para que sejam executados sequencialmente.

Iniciando o processo de recompilação

Os comandos abaixo têm como objetivo criar um novo kernel, recompilar todos os seus módulos e gravá-los nos diretórios de sistema apropriados. (Lá eles estarão disponíveis para comandos do kernel.)

Para recompilar o sistema, digite os seguintes comandos.

# make dep; tornar limpo; make bzlmage; fazer módulos; make modules__install

Cada comando make pode ser inserido separadamente após o término do anterior.

Depois de inserir esses comandos, linhas com uma descrição dos diretórios acessados \u200b\u200bpelo programa make, iniciando o compilador gcc, começarão a piscar na tela. para compilar vários arquivos de origem e vincular diferentes blocos. Cada um desses comandos levará vários minutos para ser concluído.

Agora você pode criar um disco de inicialização para o novo kernel usando o comando

Antes de executar este comando, você deve inserir um disquete formatado na unidade. O disco de inicialização finalizado precisa ser testado. Reinicie o computador sem remover o disquete da unidade.

Após executar os comandos de compilação do kernel e retornar à linha de comando, um novo kernel é criado. Para inicializar o sistema com um novo kernel, ele deve ser movido para o diretório padrão a partir do qual será executado. Isso é feito digitando o comando

# cf /usr/src/linux-2.4.2/arch/i386/boot/bzlmage /boot/vmlinuz-2.4.2-2

Por fim, execute o comando lilo para atualizar o mapa de inicialização:

Você pode especificar o número da versão no nome da imagem copiada do kernel. É importante que o nome deste arquivo corresponda ao nome especificado no arquivo /etc/lilo.conf.

Testando um novo kernel

Após mover o novo arquivo do kernel para o diretório padrão (especificado no arquivo lilo. Conf), o sistema pode ser reiniciado com esse kernel.

Imediatamente após a reinicialização, verifique o funcionamento das novas ferramentas para as quais a recompilação foi iniciada. Você pode fazer o seguinte.

Comparação dos volumes dos kernels antigos e novos. Verifique a quantidade de memória ocupada pelo sistema operacional digitando o comando free.

Instalar o sistema de arquivos ou tentar acessar um dispositivo sem carregar um módulo do kernel para suportá-lo (se o suporte para este dispositivo estiver embutido no kernel).

Usando recursos de rede (por exemplo, aliases de IP) que não estavam disponíveis no kernel anterior.

Pode ser necessário verificar o carimbo de data / hora do arquivo kernel atual. Para fazer isso, digite o comando uname. Isso permite garantir que o sistema esteja atualmente trabalhando com o kernel recompilado. A data e hora do kernel devem corresponder à hora de recompilação do kernel.

Se a resposta de uname indicar que o sistema não foi inicializado com um novo kernel, lide com o carregador de inicialização do LILO. Verifique se o nome do kernel que está sendo carregado está correto no arquivo /etc/lilo.conf.

VER MAIS:

Compilando e instalando o kernel do Linux a partir da fonte no Debian

Material do Bryansk Linux Users Group e www.rm.pp.ru

Cada distribuição tem suas próprias especificações para construir um kernel, e este artigo enfoca exatamente como fazer isso no Debian Etch. A questão de como aplicar este ou aquele patch ao kernel quando você precisa suportar uma certa funcionalidade ou novo hardware em seu sistema também é revelada. O artigo destina-se principalmente a usuários mais avançados e não há garantia de que esse método funcionará como deveria e que todas as ações e responsabilidades descritas recaiam sobre você.

  1. Nota
  2. Método um. Construindo o kernel em pacotes .deb
  3. Aplicar patches
  4. Configuração do kernel
  5. Compilando o kernel
  6. Instalando um novo kernel
  7. Método dois. "caminho tradicional
  8. Problemas
  9. Ligações

Nota

Duas maneiras de construir um kernel serão descritas. O primeiro será descrito a versão dos pacotes assembly .deb que podem ser instalados em seu ou em outro sistema.

O segundo método é a chamada via "tradicional".

Método um. Construindo o kernel em pacotes .deb

Instalando os pacotes necessários para compilar o kernel

Primeiro, vamos atualizar as listas de pacotes:

# apt-get update

Instale os pacotes de que precisamos:

# apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

Baixando fontes do kernel

Vá para o diretório / usr / src, vá para www.kernel.org e selecione a versão do kernel necessária. Nesse caso, a versão linux-2.6.23.1.tar.bz2 será considerada. Baixando:

# cd / usr / src # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2

Vamos descompactar as fontes e criar um link simbólico:

# tar xjf linux-2.6.23.1.tar.bz2 # rm linux (remova o link simbólico anterior) # ln -s linux-2.6.23.1 linux # cd / usr / src / linux

Aplicando patches

Opcional e desnecessariamente, não faça isso!

Às vezes, são necessários drivers ou ferramentas que não são suportados no kernel existente, como tecnologia de virtualização ou outra especificidade que não está na versão atual. De qualquer forma, isso é corrigido pela aplicação dos chamados patches (se houver).

Então, digamos que você baixou o patch necessário (vamos chamá-lo de patch.bz2, por exemplo) em / usr / src. Vamos aplicar o patch baixado em nossas fontes (você ainda deve estar no diretório / usr / src / linux):

# bzip2 -dc /usr/src/patch.bz2 | patch -p1 —dry-run # bzip2 -dc /usr/src/patch.bz2 | patch -p1

O primeiro comando é apenas um teste e nenhuma alteração será aplicada às fontes. Se nenhum erro for relatado após o primeiro comando, você pode executar o segundo comando para aplicar o patch. Em nenhuma circunstância execute o segundo comando se houver erros após o primeiro!

Desta forma, você pode corrigir as fontes do kernel. Por exemplo, existem alguns recursos que estão disponíveis apenas no kernel 2.6.23.8, e as fontes não continham a funcionalidade necessária, mas o patch-2.6.23.8.bz2 foi lançado. Você pode aplicar este patch às fontes de kernel 2.6.23, mas não 2.6.23.1 ou 2.6.23.3, etc. Você pode ler mais sobre isso em:

Pré-correções (prepatch) - equivalente a versões alfa; os patches devem ser aplicados à versão anterior completa com uma versão de 3 dígitos (por exemplo, o patch 2.6.12-rc4 pode ser aplicado a fontes 2.6.11, mas não 2.6.11.10.)

Isso significa que se quisermos construir o kernel 2.6.23.8, precisamos baixar as fontes 2.6.23 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.gz) aplicado da segunda forma "tradicional" maneira!

Aplique patch-2.6.23.8.bz2 ao kernel 2.6.23:

# cd / usr / src # wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.22.8.bz2 # cd / usr / src / linux # bzip2 -dc / usr / src / patch-2.6.23.8.bz2 | patch -p1 —dry-run # bzip2 -dc /usr/src/patch-2.6.23.8.bz2 | patch -p1

Configuração do kernel

Não é uma má idéia usar o arquivo de configuração existente do kernel em execução para o novo também. Portanto, copiamos a configuração existente para / usr / src / linux:

# make clean && make mrproper # cp / boot / config-`uname -r` ./.config

# make menuconfig

após o qual o menu gráfico de configuração do kernel será carregado. Selecione o item “Carregar um Arquivo de Configuração Alternativa” no menu do configurador e clique em “Ok”. Em seguida, (se necessário) faça as alterações necessárias na configuração do kernel navegando no menu (detalhes da configuração do kernel podem ser encontrados em www.google.com). Quando terminar e clique em "Sair", a pergunta "Deseja salvar sua nova configuração do kernel?" Será solicitada a resposta afirmativa "Sim".

Construindo o kernel Linux

Compilando o kernel

O kernel é construído em apenas dois comandos:

# make-kpkg clean # fakeroot make-kpkg —initrd —append-to-version \u003d -cybermind kernel_image kernel_headers

Depois de --append-to-version \u003d, você pode escrever qualquer nome que desejar, mas deve começar com um sinal de menos (-) e não deve ter espaços.

O processo de compilar e construir pacotes .deb pode levar muito tempo. Tudo dependerá da configuração do kernel e das capacidades do seu processador.

Resolvendo o problema com a criação de initrd.img

Recentemente, um bug apareceu no Debian, que é que depois de instalar pacotes com kernels compilados da maneira descrita aqui, o arquivo correspondente /boot/initrd.img não é criado. Para corrigi-lo para um kernel já instalado, você deve criar o initrd.img manualmente:

update-initramfs -c -k<полная-версия-ядра>

Para resolver o problema "para o futuro" - comente, como mostrado, a segunda das linhas citadas abaixo no arquivo /etc/kernel/postinst.d/initramfs-tools:

# kernel-package passa um argumento extra; hack para não rodar no kernel-package # [-z "$ 2"] || saída 0

Instalando um novo kernel

Quando a compilação do kernel for concluída com êxito, dois pacotes .deb serão criados no diretório / usr / src:

# cd / usr / src # ls -l

linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - o próprio kernel e linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - cabeçalhos kernels necessários para construir outros módulos (por exemplo, ao criar módulos de driver da nVidia). Instale-os:

# dpkg -i linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb # dpkg -i linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb

(Esses pacotes agora podem ser instalados em outro sistema e não haverá necessidade de compilá-los novamente.)

É isso, a instalação está completa, o menu do bootloader, a instalação de um novo disco RAM e kernel será feita automaticamente. Tudo o que resta é reiniciar:

Método dois. "caminho tradicional

Realizamos todos os pontos descritos acima ANTES do ponto "Compilando o kernel".

# make all # make modules_install # make install

Como de costume, a construção pode levar muito tempo, dependendo da configuração do kernel e dos recursos do processador.

A principal desvantagem desse método é que, se você atualiza frequentemente os kernels, depois de um tempo um grande número deles se acumula e você deseja excluir os não utilizados. Para facilitar, você pode construir o kernel e outros arquivos instalados no sistema usando os comandos "make modules_install" e "make install" no pacote deb (ou melhor, dois iniciando no kernel 2.6.27) semelhantes ao primeiro método, mas usaremos aqui pelos scripts do próprio kernel:

# make all # make deb-pkg

Dois arquivos .deb aparecerão no diretório um nível acima do diretório de origem. Compilei o kernel no diretório /usr/src/linux-2.6.27.10 e os arquivos apareceram no diretório / usr / src /

# linux-2.6.27.10_2.6.27.10-1_amd64.deb # linux-firmware-image_2.6.27.10-1_all.deb

O kernel é instalado com o comando

# dpkg -i linux-2.6.27.10_2.6.27.10-1_amd64.deb

Kernels antigos podem ser removidos, por exemplo, do synaptic'a

Próximos passos

O kernel foi construído e instalado, mas agora você precisa criar um disco RAM (sem o qual o kernel simplesmente não inicializa) e precisa atualizar o carregador de inicialização GRUB. Para fazer isso, faça o seguinte:

# depmod 2.6.23.1 # apt-get install yaird

Instale o disco RAM:

# mkinitrd.yaird -o /boot/initrd.img-2.6.23.1 2.6.23.1

Vamos atualizar o bootloader facilmente e sem dor:

Tudo, o bootloader e o novo kernel estão prontos, você só precisa reiniciar:

Problemas

Se, após a reinicialização, o novo kernel que você escolheu não inicializar, reinicie e selecione o kernel anterior e você pode tentar repetir todo o processo para construir um kernel funcional. Neste caso, não se esqueça de deletar as linhas do kernel não funcional em /boot/grub/menu.lst.

Compilação do kernel Linux

Por que compilar o kernel sozinho?
Talvez a principal pergunta que se faz sobre a compilação do kernel seja: "Por que devo fazer isso?"
Muitos consideram uma perda de tempo inútil provar que são um "Linuxoid" inteligente e avançado. De fato, compilar o kernel é muito importante. Digamos que você comprou um laptop novo e sua webcam não funciona. Suas ações? Você olha em um mecanismo de busca e procura uma solução para um problema desse assunto. Muitas vezes pode acontecer que sua webcam esteja rodando em um kernel mais recente que o seu. Se você não sabe qual versão possui, digite uname -r no terminal, como resultado você obterá a versão do kernel (por exemplo, linux-2.6.31-10). A compilação do kernel também é amplamente usada para aumentar o desempenho: o fato é que por padrão nas distribuições os kernels são compilados "para todos", e é por isso que inclui um grande número de drivers dos quais você pode não precisar. Portanto, se você conhece bem o hardware que está usando, pode desabilitar drivers desnecessários no estágio de configuração.

Também é possível ativar o suporte para mais de 4 Gigabytes de RAM sem alterar a profundidade de bits do sistema. Então, se você ainda precisa ter seu próprio kernel, vamos começar a compilar!

Obtendo o código-fonte do kernel.
A primeira coisa a fazer é obter o código-fonte da versão correta do kernel. Normalmente, você precisa obter a versão estável mais recente. Todas as versões oficiais do kernel estão disponíveis em kernel.org. Se você já tem um servidor X (computador residencial) instalado, pode acessar o site em seu navegador favorito e baixar a versão necessária em um arquivo tar.gz (gzip compactado). Se você estiver trabalhando no console (por exemplo, ainda não instalou o servidor X ou está configurando o servidor), pode usar um navegador de texto (por exemplo, elinks). Você também pode usar o gerenciador de download wget padrão:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.gz
Porém, observe que você deve saber o número exato da versão que deseja.

Descompactando o arquivo de origem.
Depois de receber o arquivo com o código-fonte, você precisa descompactar o arquivo em uma pasta. Isso pode ser feito a partir de gerenciadores de arquivos gráficos (golfinho, nautilus, etc.) ou via mc. Como alternativa, use o comando tar tradicional:
tar -zxvf path_to_archive
Agora que você tem uma pasta e o código-fonte, navegue até ela usando o comando cd kernel_source_directory (para listar os diretórios em uma pasta, use o comando ls).

Configuração do kernel.
Depois de navegar até o diretório de origem do kernel, você precisa realizar uma configuração de kernel de "20 minutos". Seu objetivo é deixar apenas os drivers e funções necessários. Todos os comandos já precisam ser executados em nome do superusuário.

make config - modo de console do configurador.

make menuconfig - modo de console como uma lista.

faça xconfig - modo gráfico.

Após fazer as alterações necessárias, salve as configurações e saia do configurador.

Compilação.
É hora da etapa final da montagem - compilação. Isso é feito com dois comandos:
make && make install
O primeiro comando irá compilar todos os arquivos para o código de máquina, e o segundo irá instalar o novo kernel em seu sistema.
Aguardamos de 20 minutos a várias horas (dependendo da potência do computador).

Configurando e compilando o kernel do Linux

O kernel está instalado. Para fazê-lo aparecer na lista do grub (2), digite (do superusuário)
update-grub
Agora, após reiniciar, pressione "Escape" e você verá o novo kernel listado. Se o kernel não ligar, apenas inicialize com o kernel antigo e configure com mais cuidado.

KernelCheck - compilando o kernel sem entrar no console.
KernelCheck permite que você construa o kernel em um modo totalmente gráfico para Debian e distribuições baseadas nele... Após o lançamento, KernelCheck oferecerá as últimas versões do kernel e patches e, após seu consentimento, fará o download do código-fonte e iniciará o configurador gráfico. O programa irá construir o núcleo em pacotes .deb e instalá-los. Você apenas tem que reiniciar.

Arquivo de artigos:
Maio de 2017
Março de 2017
Abril de 2016
Março de 2016
outubro 2013
Setembro de 2013
Maio de 2013
Março de 2013
Novembro 2012
Julho de 2012
Junho de 2012
Abril 2012
Março de 2012
Fevereiro de 2012
Abril de 2011
Março de 2011
Fevereiro de 2011
Janeiro de 2011
Dezembro 2010
Novembro de 2010
Outubro de 2010
Setembro de 2010
Agosto de 2010
Julho de 2010
Junho de 2010
Maio de 2010
Abril de 2010
Março de 2010

Aleatória:

Aurora: motor de decoração de janelas para KDE

Sblog será reescrito para .NET

Linuxnow.ru: Planos para o futuro

Bolgenos. Refutação de "Telekon"

Recuperação rápida do GRUB 2

Fundação de Software Livre e copyleft.

Colegas: todos
Linux para todos

Nossos banners:


Definir banner

Os novatos que estão apenas começando a se familiarizar com o Linux, antes de mais nada se perguntam uma questão razoável: como e onde baixar o Linux? Parece que isso é difícil, mas a questão surge, e muitas vezes me perguntam.

Escolha 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 e qualquer distribuição Linux. Posteriormente neste artigo, às vezes usarei essas duas palavras como equivalentes. A questão de escolher um kit de distribuição está além do escopo deste artigo. Você pode ver as distribuições do Linux no diretório de distribuições do Linux.

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

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

O 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 você escolhe depende principalmente da quantidade de bits do seu processador. Como regra, todos os processadores modernos são de 64 bits.

As versões do Linux de 32 bits 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 encontrar nomes como arm, mips, ppc e outros. Estas são versões do Linux especialmente montadas para processadores Arm, Mips, PowerPC.

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

Onde baixar a 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 uma seção de download, que pode ser chamada de Downloads, Obtê-lo, Obter ISO, Baixar, Baixar.

Uma das maneiras mais rápidas de baixar o Linux é usar arquivos torrent. Funciona da seguinte maneira. Você baixa um arquivo torrent por conta própria e usa o cliente torrent para começar a baixar o próprio Linux. Clientes de Torrent para Linux podem ser encontrados no catálogo do programa em "Clientes de Torrent".

A mesma versão de uma distribuição Linux pode ser hospedada em servidores diferentes (espelhos). Quanto mais próximo o servidor estiver geograficamente de você e quanto maior 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

Vou considerar vários lugares onde você pode baixar distribuições populares do Linux gratuitamente:

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

Onde baixar o kernel Linux

Qualquer versão da fonte do kernel Linux sempre pode ser baixada do kernel.org.

Como pedir um disco Linux

Se nenhum dos métodos lhe convier, você poderá encontrar na sua cidade entusiastas que concordarão em fornecer a você um disco Linux. Além disso, existem muitas comunidades Linux diferentes agora.

Acima