O que acontece em cada passo do processo de construção do kernel do Linux?

25

Eu li muitos tutoriais sobre como construir kernels customizados e inicializar o Ubuntu usando esses kernels, e com sucesso segui os guias e inicializei kernels customizados, mas eu não entendo o que cada um dos comandos nos guias faz e o que é realmente acontecendo com cada comando.

O procedimento descrito em o site do Ubuntu funciona muito com fakeroot , dpkg , make-kpkg , alguns initramfs e outras coisas horríveis que funcionam, mas simplesmente não me ajudam a entender o que está acontecendo.

  • Qual é a saída de make em um diretório do kernel do Linux?
  • Cria uma "imagem do kernel compactada"?
  • Qual é o nome do arquivo "imagem do kernel compactado" e onde ele é colocado?
  • O que o make modules faz?
  • O make modules deve ser feito antes ou depois de make ?
  • Não make cria meus módulos automaticamente?
  • Qual é o processo (em inglês, não apenas a lista de comandos) de adicionar kernels recém-construídos à lista de kernels inicializáveis?
  • O que o make install faz?
  • O make install irá adicioná-lo à minha lista de kernels inicializáveis para que eu não precise fazer mais nada?
  • Existe um equivalente make modules_install ?
por AnkurVj 16.09.2011 / 16:05

1 resposta

32

Do topo ...

  • make compila e vincula a imagem do kernel. Este é um único arquivo chamado vmlinuz .
  • make modules compila arquivos individuais para cada pergunta que você respondeu M durante a configuração do kernel. O código objeto está ligado ao seu kernel recém-criado. (Para perguntas respondidas Y , estas já fazem parte de vmlinuz , e para perguntas respondidas N elas são puladas).
  • make install instala seu kernel construído em /vmlinuz .
  • make modules_install instala seus módulos do kernel em /lib/modules ou /lib/modules/<version> .

Quanto a adicioná-lo à lista de kernels disponíveis, isso é feito pelo gerenciador de inicialização. É diferente para cada gerenciador de inicialização, mas grub é o mais comum em x86 e amd64, então vou descrever isso. Na verdade é bem simples. O Grub procura em / , /boot e /lib/modules para qualquer coisa que pareça que possa ser um kernel funcional e adiciona-o. E sim, esta é uma descrição supersimplificada.

Esse "material horrível" extra na documentação do Ubuntu é um material extra para criar um pacote deb . Quando você está fazendo isso por mais que você, é muito melhor empacotá-lo. Você vai mudar no tempo.

A criação do kernel e dos módulos é mantida separada porque, para as pessoas que precisam (ou seja, desenvolvedores de kernel), elas geralmente fazem alterações em apenas um módulo. Eles podem aplicar suas alterações, reconstruir e instalar apenas os módulos. Isso economiza muito tempo quando tem que ser feito 20 vezes por dia. Ele nunca será atualizado para ter um único comando make everything . Você, em vez disso, executa make && make modules && make install && make modules_install exatamente como a documentação diz para fazer . O processo de construção favorece os desenvolvedores do kernel, não você. E é assim que deve ser.

Na realidade, não há quase nenhuma razão para ninguém, exceto desenvolvedores do kernel ou distribuidores de distros, compilar um kernel. Em quase todas as circunstâncias, o recurso do kernel que você deseja já foi construído para você e está disponível em um dos kernels pré-empacotados. Há exceções, mas são extremamente raras nos dias de hoje.

Não que eu esteja desencorajando você a construir seu próprio kernel, eu realmente encorajo você a fazer isso. Acho que construir seu kernel a partir do zero é uma prática valiosa para aprender como tudo funciona lá embaixo. Em parte, porque talvez um dia você será a exceção que precisa. Mas também ensina muito sobre o kernel & processo de inicialização em geral. Você será uma pessoa melhor por ter feito isso.

    
por 16.09.2011 / 17:06