Compilação do kernel Linux: sistema operacional independente

Compilação do kernel Linux: sistema operacional independente

Olá pessoal, sou novo na compilação do kernel Linux, então tenho algumas perguntas: Ao compilar o kernel Linux, estamos construindo um sistema operacional totalmente independente que não depende de nenhuma distribuição do Linux?

Se sim ... Bem, quando eu quero criar o arquivo initrd usando o comando initramfs, por que ele está adicionando algumas informações sobre minha destruição do Linux em execução (estou executando o Ubuntu 10.4)?

Como devo compilar e adicionar módulos ao meu Linux compilado e onde devo colocá-los?

Este é um resumo do que tenho feito:

1.obter a fonte do kernel (3.4.1) e compilá-la usando o comando "make all" (eu uso meu linux .config atual)

  1. Instalando o grub no meu cartão de memória

  2. Colocando o bzImage compilado no diretório /boot do meu cartão de memória

  3. Usando o comando "initramfs" para criar o arquivo initrd e colocá-lo no /boot também.

  4. Inicializando meu PC usando o cartão de memória e entrando no terminal grub>

  5. Usando "root (hd0,0)"; "kernel/boot/bzImage"; "initrd /boot/initrd.img" e depois comandos "boot" para inicializar.

  6. Entrando no terminal (initramfs) após um erro informando que não foi possível encontrar o arquivo "/lib/modules/3.4.1/modules.dep" !!!

O que estou fazendo de errado ?

Responder1

Ao compilar o kernel do Linux, estamos construindo um sistema operacional totalmente independente que não depende de nenhuma distribuição do Linux?

Não. O Linux por si só não é um sistema operacional. É apenas um kernel. Apaís do usuário, que compreende uma coleção de bibliotecas de sistema e software básico, é necessário para facilitar sua interação com o computador. No que normalmente queremos dizer quando nos referimos a “Linux”, isso é fornecido por um projeto separado chamado Projeto GNU. Tecnicamente, deveríamos (e alguns o fazem) chamá-lo de "GNU/Linux".

Bem, quando eu quero criar o arquivo initrd usando o comando initramfs, por que ele está adicionando algumas informações sobre minha destruição do Linux em execução (estou executando o Ubuntu 10.4)?

Porque o seu initrd contém a coleção de programas que inicialmente configuram o seu sistema na inicialização, carregam os drivers e daemons necessários, encontram e montam as partições necessárias no(s) seu(s) disco(s) rígido(s), etc. distribuição, mas para sua instalação, configuração e computador específicos. Geralmente não é intercambiável com o initrd de outra pessoa. É por isso que ele deve ser gerado pelo seu sistema.

Como devo compilar e adicionar módulos ao meu Linux compilado e onde devo colocá-los?

Se você estiver compilando seu próprio kernel, provavelmente você está fazendo isso make menuconfigno diretório de origem do kernel antes da compilação, o que permite selecionar quais recursos serão compilados e se eles serão integrados ao binário do kernel ou disponibilizados como módulos.

Este é um resumo do que tenho feito:

Há vários motivos pelos quais isso não funcionará da maneira que você deseja.

obtendo a fonte do kernel (3.4.1) e compilando-a usando o comando "make all" (eu uso meu linux .config atual)

Se você estiver executando o Ubuntu 10.04, que é um pouco anterior ao ramo 3.x do kernel Linux, quanto mais ao 3.4. Provavelmente não funcionará corretamente, pelo menos não sem uma enorme quantidade de trabalho extra. Os arquivos de configuração também mudaram um pouco, e estou francamente surpreso por não estar lançando erros a torto e a direito sobre coisas em seu arquivo de configuração (presumivelmente para Linux 2.6) que não correspondem à forma como as coisas são feitas no 3.4. Além disso, você provavelmente deseja baixar o pacote fonte do kernel do Ubuntu e não a fonte simples do kernel vanilla em kernel.org, já que o Ubuntu corrige o kernel para incluir os recursos necessários e fazê-lo funcionar bem com todo o resto do sistema. Finalmente, você está perdendo uma série de etapas, que abordarei mais tarde.

Colocando o bzImage compilado no diretório /boot do meu cartão de memória

Não tenho certeza de qual é sua intenção com isso, mas se for para ter uma instalação completa do Linux inicializável em seu cartão de memória, há um pouco mais do que isso - você não tem nenhum material de usuário nessa memória colar, por exemplo. O que isso realmente fará, se configurado corretamente, é (tentar) executar a instalação do Ubuntu no seu disco rígido com o kernel no seu cartão de memória. Acredito que isso deveria funcionar, mas por que fazer isso em vez de apenas instalar o kernel no seu disco rígido? Você pode instalá-lo lado a lado com o existente para poder alternar livremente entre eles.

Entrando no terminal (initramfs) após um erro informando que não foi possível encontrar o arquivo "/lib/modules/3.4.1/modules.dep" !!!

Isso remete às etapas perdidas que mencionei anteriormente. Você precisa do make modules_installseu novo kernel para colocar seus módulos no /lib/modules.

NO ENTANTO...

Nada disso realmente importa, porque idealmente você não deveria compilar um kernel da maneira "tradicional", a menos que tenha uma necessidade muito específica. Hoje em dia, se você realmente precisar compilar seu próprio kernel, a maioria das distribuições tem uma maneira de fazer isso que usa sua versão personalizada do kernel (se aplicável), automatiza o processo de construção, instala o kernel como um pacote para que você possa instalar e remover de forma limpa conforme necessário e configura seu bootloader para lhe dar a opção de kernel(s) novo(s) ou antigo(s). No Ubuntu você deve seguir estas instruções:Kernel/Compilação - Ubuntu Wiki

O que não quer dizer que você não possa compilar um kernel da maneira "antiquada" apenas por diversão/para fins educacionais - compilei meu primeiro kernel dessa maneira, mas isso foi antes de haver maneiras melhores de fazê-lo. Se o seu sistema não estar quebrado é importante para você, use o método recomendado para sua distribuição, use sua fonte e use seu gerenciamento de pacotes.

Responder2

Ao recompilar ou compilar o kernel Linux, você NÃO está criando uma nova distribuição. Você está criando apenas uma versão mais recente ou diferente do kernel. O kernel é um único arquivo que é carregado e executado pelo bootloader após o seu PC concluir o processo POST.

Uma distribuição consiste em muitos outros arquivos, incluindo os utilitários padrão do UNIX, geralmente um gerenciador de pacotes e outros. Nada disso será alterado se você (re)compilar seu próprio kernel.

Já faz algum tempo que compilei meu próprio kernel, mas acho que você precisa executar depmod -aapós o makecomando.

informação relacionada