Como compilar o kernel de baunilha linux da fonte no Fedora

Como compilar o kernel de baunilha linux da fonte no Fedora

O kernel é o componente mais importante de um sistema operacional: entre as outras coisas, fornece suporte para diferentes tipos de hardware e gerencia alocações de recursos.

Linux é um kernel monolítico: embora suas funcionalidades possam ser incluídas estaticamente ou construídas e carregadas como separadas módulos, Ele sempre funciona como uma "peça única" no mesmo espaço de endereço. Neste tutorial, veremos como baixar, compilar e instalar um kernel de baunilha linux. As instruções fornecidas devem funcionar em todas as distribuições Linux, no entanto, este guia está focado em compilar o kernel em um sistema de Fedora.

Neste tutorial, você aprenderá:

  • Como configurar, compilar e instalar um kernel de baunilha linux
  • Como empacotar o kernel compilado e seus módulos


O menu de configuração baseado em ncurses para o kernel Linux

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Fedora
Programas
  • GCC
  • flex
  • fazer
  • búfalo
  • OpenSSL-devel
  • Elfutils-Libelf-Devel
  • Ncurses-devel (necessário para usar o menu baseado em Ncurses para configurar o kernel)
  • Qt-devel (necessário para usar a interface gráfica QT para configurar o kernel)
  • RPM-Build (necessário para empacotar o kernel em formato RPM)
Outro Permissões radiculares para instalar as dependências necessárias e o kernel compilado
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Instalando as dependências

Para poder compilar o kernel Linux da fonte, precisamos instalar alguns pacotes em nosso sistema:

$ sudo dnf install gcc flex make bison OpenSSL-devel elfutils-libelf-devel


Os acima são apenas os pacotes 'núcleos' que precisamos. Para invocar metas de configuração específicas, alguns pacotes extras devem ser instalados: o ncurses-devel e qt-devel Pacotes, por exemplo, são necessários para configurar o kernel que utiliza, respectivamente, da interface gráfica baseada em Ncurses e QT, enquanto o RPM-Build é necessário o pacote para construir um RPM contendo o kernel compilado.

Baixando o tarball de origem

No início, precisamos obter o tarball contendo as mais recentes fontes de kernel linux estável. Podemos baixar e extrair o tarball com apenas um comando:

$ curl https: // cdn.núcleo.org/pub/linux/kernel/v5.X/Linux-5.1.5.alcatrão.xz | tar -xj

No final do processo de download, dentro do nosso diretório de trabalho atual, devemos encontrar uma nova pasta que contém o código -fonte do kernel. Precisamos entrar, neste caso:

$ CD Linux-5.1.5

Neste ponto, podemos configurar o kernel. No próximo parágrafo, vamos dar uma olhada nos alvos de configuração mais comuns usados ​​para realizar a tarefa.

Configurando o kernel

Existem várias maneiras pelas quais podemos configurar o kernel e eles correspondem a diferentes alvos de configuração. Quando um alvo de configuração é invocado, se um arquivo nomeado .Config Contendo uma configuração válida do kernel é encontrada no diretório de fontes, é usado como ponto de partida para a configuração. Isso torna a possibilidade de atualizar ou modificar uma configuração já existente, talvez a que vem com o kernel instalado por padrão em nossa distribuição (ele pode ser encontrado dentro do /bota diretório, nomeado após o kernel em uso).

Se o arquivo não for encontrado, a configuração começará do zero e o .Config O arquivo será gerado assim que salvarmos nossa configuração. Vamos ver parte do alvos de configuração podemos usar:

Config

Se esse alvo for chamado, o usuário será solicitado a configurar o kernel, respondendo a uma série de perguntas, da maneira seguinte:

* * Linux/x86 5.1.5 Configuração do kernel * * * Compilador: GCC (GCC) 9.1.1 20190503 (Red Hat 9.1.1-1) * * * Configuração geral * Compile também drivers que não carregarão (compile_test) [n/y/?] 

Menuconfig

Este alvo usa um bom e fácil de usar ncurses Interface para nos deixar gerar ou atualizar a configuração do kernel. Como dito antes, poder usar esta interface o ncurses-devel o pacote deve ser instalado no sistema.



A configuração baseada em Ncurses

Usando esta interface, podemos pressionar o h Chave ao destacar uma opção específica para obter informações e sugestões sobre isso:



Obter informações sobre uma opção é apenas uma questão de selecioná -las e pressionar a tecla H pressionando Y em uma opção, incluirá no kernel estaticamente (a opção será marcada com um *), pressionando N excluirá e pressionando o M a chave o incluirá como um módulo (a opção será marcada com um M). Para procurar uma opção específica, podemos usar o / Chave e forneça a string ou regex para pesquisar:

A interface do NCURSses para procurar uma opção específica

xconfig

Ao invocar esse alvo, é possível configurar o kernel por meio de uma interface gráfica com base no Qt Kit de ferramentas se o qt-devel o pacote está instalado no sistema.



A interface de configuração baseada no QT

OldConfig

Esse alvo é útil quando queremos usar uma configuração de kernel já existente como ponto de partida. Quando invocamos esse alvo, somos solicitados a configurar apenas os recursos disponíveis no kernel que estamos configurando, mas não incluídos no arquivo de configuração original.

LOCALMODCONFIG

Invocar esse alvo irá gerar ou atualizar um novo arquivo de configuração do kernel na base dos módulos atualmente carregados no sistema. Somente eles serão incluídos na configuração, os outros serão desativados. Isso pode ser usado como uma maneira rápida de obter um kernel personalizado com base no estado atual de uma máquina.

LocalyesConfig

Este alvo funciona de maneira semelhante a LOCALMODCONFIG Com uma grande diferença: as funcionalidades fornecidas pelos módulos atualmente carregados no sistema serão estaticamente incluídos no kernel.

Compilando e instalando o kernel

Depois que terminamos de configurar o kernel, podemos compilar o código -fonte. Tudo o que precisamos fazer é executar:

$ make


A operação pode demorar um pouco, dependendo dos recursos que decidimos incluir no kernel. Para acelerar o processo que podemos executar fazer com o -j opção e especifique o número de trabalhos para executar simultaneamente: um valor frequentemente usado para esta opção é o número de núcleos lógicos da CPU + 1. Em uma máquina com 4 núcleos lógicos, funcionaríamos: portanto, funcionaríamos:

$ make -j5

Uma vez compilado, para instalar o kernel, podemos simplesmente executar:

$ sudo fazer instalar

Os arquivos do núcleo do kernel serão copiados dentro do /bota diretório. Para compilar e instalar os módulos do kernel, em vez disso, podemos executar:

$ sudo make modules_install

Os módulos do kernel serão instalados em um diretório em /lib/módulos Nomeado após a versão do kernel. Finalmente, para que o novo kernel esteja disponível e selecionado na inicialização, devemos regenerar a configuração do GRUB:

$ sudo grub2 -mkconfig -o/boot/grub2/grub.cfg

Embalagem o kernel

Em vez de instalar o kernel compilado diretamente como fizemos acima, para poder gerenciar sua instalação e remoção através do gerenciador de pacotes do sistema, podemos criar um pacote de rpm. Para realizar a tarefa, devemos usar uma entre o RPM-PKG e Binrpm-pkg alvos. O primeiro construirá os pacotes de RPM de origem e binários, o segundo somente o binário. Para que este alvo seja executado corretamente, o RPM-Build o pacote deve ser instalado. Para construir apenas o pacote binário de RPM, nós executaríamos:

$ Make Binrpm-Pkg

Se as operações forem realizadas sem erros, o rpMbuild A árvore do diretório será criada em nosso diretório doméstico. O pacote RPM construído estará disponível em um subdiretório de ~/rpmbuild/rpms nomeado após a arquitetura do sistema.

Outra opção é empacotar o kernel e seus módulos dentro de um tarball comprimido, usando um entre o Targz-pkg, Tarbz2-pkg e Tarxz-pkg alvos, dependendo da compressão que queremos usar. O tarball será criado dentro do diretório de origem do kernel.



Conclusões

Neste tutorial, aprendemos a saber por que o Linux é chamado de kernel monolítico e como seus componentes podem ser configurados estaticamente ou como módulos. Vimos como baixar um kernel de baunilha e os vários métodos que podemos usar para configurá -lo. Finalmente, vimos como compilá -lo, empacotá -lo e instalá -lo em nosso sistema. Um último conselho: se você decidir recompilar o kernel, é sempre uma boa ideia invocar um dos alvos de limpeza antes de proceder:

  • limpar: Remove a maioria dos arquivos gerados, mas mantenha a configuração e o suporte suficiente para criar módulos externos
  • MRPROPER: Remove todos os arquivos gerados + configuração + vários arquivos de backup
  • distclean: Executa o MrProper e também remove os arquivos de backup e patch do editor

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Download do Linux
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Coisas para fazer depois de instalar o Ubuntu 22.04 Jellyfish…
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Linux pode obter vírus? Explorando a vulnerabilidade do Linux…
  • Coisas para instalar no Ubuntu 22.04
  • Como fazer bota dupla kali linux e windows 10