Eu li muitos tutoriais sobre como criar kernels personalizados e inicializar o Ubuntu usando esses kernels, e segui com êxito os guias e os kernels personalizados de inicialização, mas não entendo o que cada comando dos guias faz e o que realmente está acontecendo. cada comando.
O procedimento descrito no site da Ubuntu faz um monte de trabalho com fakeroot
, dpkg
, make-kpkg
, alguns initramfs, e outras coisas horríveis que obras, mas simplesmente não me ajudar a entender o que está acontecendo.
- Qual é a saída de
make
um diretório do kernel do linux? - Ele cria uma "imagem de kernel compactada"?
- Qual é o nome do arquivo "imagem compactada do kernel" e onde ele é colocado?
- O que
make modules
faz? - Deve
make modules
ser feito antes ou depoismake
? - Não
make
constrói meus módulos automaticamente? - Qual é o processo (em inglês, não apenas a lista de comandos) de adicionar kernels recém-criados à lista de kernels inicializáveis?
- O que
make install
faz? - Vou
make install
adicioná-lo à minha lista de kernels inicializáveis para que eu não precise fazer mais nada? - Existe um equivalente
make modules_install
?
ubuntu
linux-kernel
make
AnkurVj
fonte
fonte
Respostas:
Do topo...
make
compila e vincula a imagem do kernel. Este é um único arquivo chamadovmlinuz
.make modules
compila arquivos individuais para cada pergunta que você respondeuM
durante a configuração do kernel. O código do objeto está vinculado ao seu kernel recém-construído. (Para perguntas respondidasY
, elas já fazem partevmlinuz
e, para perguntas respondidasN
, são ignoradas).make install
instala seu kernel construído no/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 é tratado pelo gerenciador de inicialização. É diferente para cada carregador de inicialização, mas
grub
é o mais comum em x86 e amd64, então descreverei isso. Na verdade, é bastante simples. O Grub procura e/
, por qualquer coisa que pareça, pode ser um kernel funcional e o adiciona. E sim, esta é uma descrição simplificada./boot
/lib/modules
Esse "material horrível" extra na documentação do Ubuntu é um material extra para criar um
deb
pacote. Quando você está fazendo isso por mais do que você, é muito melhor empacotá-lo. Você vai mudar a tempo.A construção do kernel e dos módulos é mantida separada porque, para as pessoas que precisam (isto é, desenvolvedores do kernel), elas geralmente estão fazendo 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 deve ser feito 20 vezes por dia. Ele nunca será atualizado para ter um único
make everything
comando. Em vez disso, executemake && make modules && make install && make modules_install
como a documentação diz . O processo de compilação favorece os desenvolvedores do kernel, não você. E é assim que deve ser.Na realidade, quase não há razão para ninguém, exceto os desenvolvedores do kernel ou os distribuidores de distribuição, compilarem um kernel. Em quase qualquer circunstância, o recurso do kernel que você deseja já foi criado para você e está disponível em um dos kernels pré-empacotados. Existem exceções, mas são extremamente raras atualmente.
Não que eu esteja desencorajando você a criar seu próprio kernel, na verdade eu o encorajo a fazê-lo. Eu acho que construir seu kernel do zero é uma prática valiosa para aprender como tudo funciona lá embaixo. Em parte, porque talvez um dia você vai ser a exceção que precisa. Mas também ensina muito sobre o processo de kernel e inicialização em geral. Você será uma pessoa melhor por ter feito isso.
fonte
/vmlinuz
um diretório na pasta raiz? quando eu fizer uma instalação make, esse diretório será criado e o novo kernel será colocado lá? Vaimake modules_install
substituir o meu módulos instalados atualmente? Suponhamos que eu coloco meu vmlinux no diretório / boot, que eu preciso para fazer outra coisa (como arquivos de configuração editar grub e fazer grub-update ou algo depois disso?)make bzimage
é o que faz isso./vmlinuz
é um arquivo binário, não um diretório. Eu tenho feito apenas kernels empacotados nos últimos 5 anos, então não me lembro exatamente do comportamento demodules_install
um kernel instalado diretamente. O Grub encontrará seu kernel/boot
sem ajuda. Sim, você sempre deve executargrub-update
após instalar um novo kernel.make bzimage
vez demake
? Preciso fazer umamake clean
emake bzimage
outra vez? Por/vmlinuz
que você quer dizer o arquivo será criado no diretório raiz ou no diretório de fonte do kernel linux?/
é um caminho absoluto, então sim, esse é um arquivo na raiz.Y
são compilados (ou seja, fazem parte do vmlinuz). Os módulos respondidosM
são compilados como módulos carregáveis. Módulos respondidosN
não são compilados.make modules_install
aplica-se apenas aos que responderamM
.