Esse artigo irá explicar o básico de como você pode utilizar o buildroot para construir o seu próprio sistema linux de forma fácil.
meus créditos ao canal nir lichtman, que foi por onde eu descobri o buildroot e também o que eu usei de base para criar esse artigo.
link do vídeo: https://www.youtube.com/watch?v=ey3sKdOmPa8
O buildroot é um projeto que visa facilitar a construção de sistemas embarcados utilizando o linux, já deu pra entender que nesse artigo iremos fazer algo um pouco diferente do que é o objetivo original do buildroot, mas isso será feito apenas para aprendizado.
O site do buildroot possui uma ampla e vasta documentação. Se por acaso for do seu interesse, eis aqui o link:
não há uma definição muito clara do que exatamente é um sistema embarcado, mas dá pra se dizer que é um software que está bastante ligado com o hardware com o qual ele está inserido. Ou seja, o sistema depende daquele hardware e o hardware depende daquele sistema. Outra característica que dá pra citar é que geralmente os sistemas embarcados eles são feitos para cobrir objetivos específicos e não são de propósitos gerais.
Um exemplo disso é aqueles sistemas básicos que vinham nas televisões antes das smartTV existirem, trazendo o android para dentro delas.
Dava para você ver vídeos e outras coisas através de um pendrive e tinha um menu com algumas opções que a TV disponibilizava, aquele sistema só existe para cumprir as funções daquela TV.
Já deve ter visto que tenho os arquivos "pré-cozidos" no repositório, mas não seja um molenga e tente fazer do zero seguindo o passo a passo, isso vai tornar o seu aprendizado mais rico e você verá que será um processo bem divertido!
faça o download do buildroot no site oficial:
https://buildroot.org/downloads/buildroot-2024.02.1.tar.gz
descompacte os arquivos:
tar xv buildroot-2024.02.1.tar.gz
configure o kernel:
make menuconfig
compile o kernel:
make
beleza, essa primeira etapa está pronta.
se entrarmos em output/images, veremos dois arquivos.
- bzImage
- rootfs.tar
esses arquivos são importantes para a construção da nossa distro.
o bzImage é a imagem do nosso kernel compilado, e o rootfs toda a arvore de arquivos que será colocada no root e que o kernel precisa para funcionar adequadamente.
quando eu construi o meu, decidi separá-los em pastas para deixar mais organizado, faremos o mesmo aqui.
vamos voltar para o diretório de trabalho onde descompactamos o buildroot e criar alguns diretórios:
mkdir image rootfs mounted distro bootImg
agora copiamos os arquivos para as respectivas pastas:
cp buildroot-2024.02.1/output/image/bzImage image
cp buildroot-2024.02.1/output/image/rootfs.tar rootfs
Explicando rapidamente, o diretório image é o que irá guardar a nossa bzImage, o rootfs irá guardar o rootfs e o mounted irá ser o ponto de montagem da nossa imagem inicializável, o diretório distro irá conter todos os arquivos necessários para construir o sistema, tanto a bzImage quanto o rootfs, será lá dentro que eles serão unidos e em seguida todos os arquivos lá dentro serão copiados para dentro de mounted.
certo, agora que organizamos as coisas iremos descompactar o rootfs
tar xv rootfs/rootfs.tar
vamos mover os arquivos para dentro do diretório distro e copiar o bzImage
mv rootfs/rootfs.tar distro
cp image/bzImage distro
agora iremos criar a imagem inicializável do nosso sistema.
para isso usaremos o comando truncate:
truncate -s 100MB boot.img
mova ele para bootImg:
mv boot.img bootImg
certo, o próximo passo é criar o filesystem da imagem, para que ela possa receber os arquivos.
mkfs bootImg/boot.img
por fim, tenha certeza de ter o extlinux instalado, que será o bootloader do nosso linux.
para archlinux:
sudo pacman -S syslinux
para debian based
sudo apt install extlinux
agora que temos o bootloader, vamos montar a imagem ao diretório mounted para copiar os arquivos para lá e por fim instalar o bootloader.
sudo mount boot.img mounted
sudo extlinux --intall mounted
sudo cp -r distro/* mounted
agora desmonte o diretório.
sudo umount mounted
pronto! agora você tem uma imagem inicializável do seu sistema!
basta executar isso em uma maquina virtual e fazer o processo de boot.
quando o boot iniciar, ele irá perguntar como deve proceder.
então digite
/bzImage root=/dev/sda
e você deve ver a tela de login.
parabéns! você acabou de montar um sistema linux do zero :)