Diferenças entre edições de "Compilação do Kernel"
Linha 15: | Linha 15: | ||
== Pré-configuração == | == Pré-configuração == | ||
*Criação de um directório de trabalho | *Criação de um directório de trabalho | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
mkdir MyDistro | mkdir MyDistro | ||
+ | </syntaxhighlight> | ||
+ | *Mover os downloads efectuados para o directório anteriormente criado | ||
− | + | <syntaxhighlight lang="bash"> | |
mv Transferências/linux-4.17.12.tar.xz MyDistro/ | mv Transferências/linux-4.17.12.tar.xz MyDistro/ | ||
mv Transferências/busybox-1.29.2.tar.bz2 MyDistro/ | mv Transferências/busybox-1.29.2.tar.bz2 MyDistro/ | ||
cd MyDistro | cd MyDistro | ||
+ | </syntaxhighlight> | ||
+ | *Descompactar os downloads | ||
− | + | <syntaxhighlight lang="bash"> | |
tar -jxf busybox-1.29.2.tar.bz2 | tar -jxf busybox-1.29.2.tar.bz2 | ||
tar -Jxf linux-4.17.12.tar.xz | tar -Jxf linux-4.17.12.tar.xz | ||
+ | </syntaxhighlight> | ||
== Compilação do Kernel == | == Compilação do Kernel == | ||
*Entrar no directório descompactado do Kernel | *Entrar no directório descompactado do Kernel | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
cd MyDistro/linux-4.17.12 | cd MyDistro/linux-4.17.12 | ||
+ | </syntaxhighlight> | ||
*Limpar a pasta do código fonte de todas as configurações e objectos já construídos. | *Limpar a pasta do código fonte de todas as configurações e objectos já construídos. | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
make mrproper | make mrproper | ||
+ | </syntaxhighlight> | ||
Linha 40: | Linha 53: | ||
*Entrar no menu de configuração do Kernel. | *Entrar no menu de configuração do Kernel. | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
make menuconfig | make menuconfig | ||
+ | </syntaxhighlight> | ||
Linha 46: | Linha 62: | ||
*Compilar o novo Kernel. | *Compilar o novo Kernel. | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
make | make | ||
− | + | </syntaxhighlight> | |
ou | ou | ||
+ | <syntaxhighlight lang="bash"> | ||
make -j4 (em que o 4 corresponde ao número de núcleos que o processador possui) | make -j4 (em que o 4 corresponde ao número de núcleos que o processador possui) | ||
− | + | </syntaxhighlight> | |
ou | ou | ||
+ | <syntaxhighlight lang="bash"> | ||
time make -j4 (onde o time vai permitir contabilizar o tempo que demora a executar o comando) | time make -j4 (onde o time vai permitir contabilizar o tempo que demora a executar o comando) | ||
+ | </syntaxhighlight> | ||
*Verificar tamanho do novo Kernel | *Verificar tamanho do novo Kernel | ||
+ | <syntaxhighlight lang="bash"> | ||
ls -l arch/x86/boot | ls -l arch/x86/boot | ||
+ | </syntaxhighlight> | ||
+ | |||
Verificar o tamanho do ficheiro bzImage. | Verificar o tamanho do ficheiro bzImage. | ||
Linha 71: | Linha 95: | ||
*Entrar no menu de configuração do BusyBox | *Entrar no menu de configuração do BusyBox | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
make menuconfig | make menuconfig | ||
+ | </syntaxhighlight> | ||
Linha 77: | Linha 104: | ||
*Compilar o BusyBox | *Compilar o BusyBox | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
make | make | ||
− | + | </syntaxhighlight> | |
ou | ou | ||
+ | <syntaxhighlight lang="bash"> | ||
make -j4 (em que o 4 corresponde ao número de núcleos que o processador possui) | make -j4 (em que o 4 corresponde ao número de núcleos que o processador possui) | ||
− | + | </syntaxhighlight> | |
ou | ou | ||
+ | <syntaxhighlight lang="bash"> | ||
time make -j4 (onde o time vai permitir contabilizar o tempo que demora a executar o comando) | time make -j4 (onde o time vai permitir contabilizar o tempo que demora a executar o comando) | ||
+ | </syntaxhighlight> | ||
+ | * Verificar o tamanho do novo BusyBox | ||
− | + | <syntaxhighlight lang="bash"> | |
ls -l | ls -l | ||
+ | </syntaxhighlight> | ||
Verificar o tamanho do ficheiro busybox. | Verificar o tamanho do ficheiro busybox. | ||
Linha 102: | Linha 136: | ||
Após a instalação da máquina é necessário executar os comandos de update e upgrade: | Após a instalação da máquina é necessário executar os comandos de update e upgrade: | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
sudo apt update | sudo apt update | ||
sudo apt upgrade | sudo apt upgrade | ||
+ | </syntaxhighlight> | ||
Antes de passar os ficheiros, deverá verificar se a partição onde vão ficar os novos ficheiros do kernel está montada. | Antes de passar os ficheiros, deverá verificar se a partição onde vão ficar os novos ficheiros do kernel está montada. | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
mount | grep "MyDistro" | mount | grep "MyDistro" | ||
− | + | </syntaxhighlight> | |
Deverá, de seguida, passar os ficheiros do kernel, o bzImage, e o do Busybox, busybox, para a partição /MyDistro da máquina virtual. | Deverá, de seguida, passar os ficheiros do kernel, o bzImage, e o do Busybox, busybox, para a partição /MyDistro da máquina virtual. | ||
Linha 115: | Linha 154: | ||
Dentro da partição do MyDistro e em root: | Dentro da partição do MyDistro e em root: | ||
*Modificar dono e grupo dos arquivos anteriormente copiados | *Modificar dono e grupo dos arquivos anteriormente copiados | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
chown root:root busybox bzImage | chown root:root busybox bzImage | ||
+ | </syntaxhighlight> | ||
*Criação dos directórios | *Criação dos directórios | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
mkdir sbin bin dev | mkdir sbin bin dev | ||
+ | </syntaxhighlight> | ||
*Criação de links simbólicos | *Criação de links simbólicos | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
ln -s busybox init | ln -s busybox init | ||
ln -s /busybox sbin/init | ln -s /busybox sbin/init | ||
+ | </syntaxhighlight> | ||
*Criação dos arquivos que representam os dispositivos | *Criação dos arquivos que representam os dispositivos | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
mknod -m 600 console c 5 1 | mknod -m 600 console c 5 1 | ||
mknod -m 666 null c 1 3 | mknod -m 666 null c 1 3 | ||
Linha 132: | Linha 182: | ||
mknod -m 660 sda1 b 8 1 | mknod -m 660 sda1 b 8 1 | ||
mknod -m 660 sda2 b 8 2 | mknod -m 660 sda2 b 8 2 | ||
+ | </syntaxhighlight> | ||
*Criação dos arquivos que representam as consolas | *Criação dos arquivos que representam as consolas | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
cd bin | cd bin | ||
ln -s ../busybox sh | ln -s ../busybox sh | ||
ln -s ../busybox bash | ln -s ../busybox bash | ||
+ | </syntaxhighlight> | ||
*Verificar se o BusyBox está OK | *Verificar se o BusyBox está OK | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
chroot /MyDistro /busybox | chroot /MyDistro /busybox | ||
− | + | </syntaxhighlight> | |
=== Modificação do Grub === | === Modificação do Grub === | ||
Entrar no ficheiro default do grub nano /etc/grub.d/40_custom e colocar no final do ficheiro: | Entrar no ficheiro default do grub nano /etc/grub.d/40_custom e colocar no final do ficheiro: | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
menuentry "MyDistro" { | menuentry "MyDistro" { | ||
set root='hd0,msdos2' | set root='hd0,msdos2' | ||
Linha 149: | Linha 207: | ||
linux /bzImage root=/dev/sda2 | linux /bzImage root=/dev/sda2 | ||
} | } | ||
+ | </syntaxhighlight> | ||
No final, gravar o ficheiro e executar o comando: | No final, gravar o ficheiro e executar o comando: | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
update-grub | update-grub | ||
+ | </syntaxhighlight> | ||
Revisão das 16h31min de 7 de agosto de 2018
Genérico / Vanilla
Fazer o download do kernel e do BusyBox
Instalação de pacotes adicionais
- build-essential
- libncurses-dev
- bison
- flex
- libelf-dev
Pré-configuração
- Criação de um directório de trabalho
mkdir MyDistro
- Mover os downloads efectuados para o directório anteriormente criado
mv Transferências/linux-4.17.12.tar.xz MyDistro/
mv Transferências/busybox-1.29.2.tar.bz2 MyDistro/
cd MyDistro
- Descompactar os downloads
tar -jxf busybox-1.29.2.tar.bz2
tar -Jxf linux-4.17.12.tar.xz
Compilação do Kernel
- Entrar no directório descompactado do Kernel
cd MyDistro/linux-4.17.12
- Limpar a pasta do código fonte de todas as configurações e objectos já construídos.
make mrproper
Nota: Este comando ao ser executado depois de se fazer alguma modificação no kernel, vai apagar tudo o que foi modificado, voltando a colocar o estado inicial.
- Entrar no menu de configuração do Kernel.
make menuconfig
Nota: Neste passo, cada um deve retirar o que achar desnecessário para o kernel que está a construir, ou adicionar. No final, será criado um ficheiro .config com todas as modificações.
- Compilar o novo Kernel.
make
ou
make -j4 (em que o 4 corresponde ao número de núcleos que o processador possui)
ou
time make -j4 (onde o time vai permitir contabilizar o tempo que demora a executar o comando)
- Verificar tamanho do novo Kernel
ls -l arch/x86/boot
Verificar o tamanho do ficheiro bzImage.
Nota: O Kernel original, depois de compilado, tinha +/- 8,4MB. Em algumas experiências, foi possível reduzir o tamanho do Kernel para +/- 5,7MB.
Compilação do BusyBox
Entrar no directório BusyBox previamente descompactado
- Entrar no menu de configuração do BusyBox
make menuconfig
Importante: Adicionar no menu Settings -> Build Options -> Build static binary (no shared libs)
- Compilar o BusyBox
make
ou
make -j4 (em que o 4 corresponde ao número de núcleos que o processador possui)
ou
time make -j4 (onde o time vai permitir contabilizar o tempo que demora a executar o comando)
- Verificar o tamanho do novo BusyBox
ls -l
Verificar o tamanho do ficheiro busybox.
Preparação da máquina de teste
O teste do novo kernel pode ser feita na máquina local. Contudo, neste tutorial foi utilizada uma máquina virtual, com 10GB de disco e duas partições, e uma distribuição linux instalada.
- 8GB para o sistema base
- 2GB para /MyDistro em jfs (ou o sistema de ficheiros que desejar)
Após a instalação da máquina é necessário executar os comandos de update e upgrade:
sudo apt update
sudo apt upgrade
Antes de passar os ficheiros, deverá verificar se a partição onde vão ficar os novos ficheiros do kernel está montada.
mount | grep "MyDistro"
Deverá, de seguida, passar os ficheiros do kernel, o bzImage, e o do Busybox, busybox, para a partição /MyDistro da máquina virtual. Umas das formas utilizadas para passar os ficheiros foi via ssh. E necessário instalar o pacote ssh na máquina virtual (sudo apt install ssh) e na máquina real, basta aceder a uma pasta e ligar a um servidor remoto (sftp://<ip_máquina_virtual>/<pasta>).
Criação da estrutura de directórios e arquivos
Dentro da partição do MyDistro e em root:
- Modificar dono e grupo dos arquivos anteriormente copiados
chown root:root busybox bzImage
- Criação dos directórios
mkdir sbin bin dev
- Criação de links simbólicos
ln -s busybox init
ln -s /busybox sbin/init
- Criação dos arquivos que representam os dispositivos
mknod -m 600 console c 5 1
mknod -m 666 null c 1 3
mknod -m 620 tty1 c 4 1
mknod -m 620 tty2 c 4 2
mknod -m 660 sda b 8 0
mknod -m 660 sda1 b 8 1
mknod -m 660 sda2 b 8 2
- Criação dos arquivos que representam as consolas
cd bin
ln -s ../busybox sh
ln -s ../busybox bash
- Verificar se o BusyBox está OK
chroot /MyDistro /busybox
Modificação do Grub
Entrar no ficheiro default do grub nano /etc/grub.d/40_custom e colocar no final do ficheiro:
menuentry "MyDistro" {
set root='hd0,msdos2'
search --set=root --hint-bios=hd0,msdos2
linux /bzImage root=/dev/sda2
}
No final, gravar o ficheiro e executar o comando:
update-grub
Reiniciar e testar!