Labrador 32 bits - Criando uma imagem
Nesta página você encontrará instruções de como criar uma imagem mínima para Labrador 32 bits. Se você deseja usar uma imagem mínima pronta, clique aqui.
O processo para criar uma imagem compreende compilar o bootloader, o Kernel Linux e gerar um sistema de arquivos de uma distribuição GNU/Linux Debian-like. Compreende também os passos para escrever essa imagem em um cartão SD.
Para encontrar a versão mais atualizada dos softwares aqui citados, acesse nosso Github.
Para a versão 64 bits acesse a seguinte página: Labrador 64 bits - Criando uma imagem
Pré-requesitos
Bootloader
O primeiro passo é obter o bootloader. É possível usar um binário pré-compilado ou compilá-lo a partir do código-fonte, seguindo as instruções da página do github/labrador-uboot-32.
Ao final desse processo você terá um arquivo u-boot-dtb.img ou u-boot-dtb-no-UART3-console.img.
Obs.: Se você quer ter a UART3 (/dev/ttyS3) ativada para console de debug, que é o recomendado para a maior parte dos casos, use o u-boot-dtb.img. Caso você tenha intenção de usar o UART3 para alguma outra finalidade, use o u-boot-dtb-no-UART3-console.img.
Kernel Linux
Para obter o kernel com a versão 6, acesse github/labrador-linux-6. Há outras versões do kernel no git da caninos-loucos, mas a mais moderna é recomendada. Novamente aqui você tem a opção de usar binários pré-compilados ou compilá-los a partir do código-fonte, conforme as instruções do arquivo README.md.
Obs.: Se você está fazendo compilação cruzada do kernel, é possível usar o arm-linux-gnueabihf-gcc disponível no repositório do bootloader. Nesse caso adicione o caminho para o compilador ao PATH. Por exemplo, se você fez o clone do u-boot em $HOME:
$ export PATH=$PATH:$HOME/labrador-uboot-32/toolchain/arm-linux-gnueabihf/bin
Ao final desse processo você terá um arquivo labrador-kernel6-armhf-v*.tar.gz com os arquivos:
kernel.dtbuImagelib/modules/6.1.76(pode ser diferente caso esteja usando outra versão do kernel)
Distro
Você pode usar qualquer sistema compatível com a arquitetura ARM. Nesse procedimento descreveremos o processo para criação de um sistema Debian usando o debootstrap.
É necessário instalar também o emulador QEMU caso a imagem esteja sendo criada em uma máquina de arquitetura não ARM, como x86. Este pacote pode ser instalado no Debian pelo comando
# apt install qemu-user-static
Escolha um diretório para criação do sistema. É recomendável que seja feito diretamente em um cartão SD, mas é possível também criar em uma pasta local e apenas copiar o sistema para o cartão.
Neste exemplo usaremos uma pasta rootfs no diretório /home do seu usuário para criar um sistema Debian 12 (bookworm), mas a versão pode ser alterada se necessário.
# debootstrap --arch=armhf --foreign --components=main,contrib,non-free-firmware bookworm /home/[usuário]/rootfs
Assim que o sistema tiver concluído o primeiro estágio de instalação, entraremos no sistema e realizaremos o segundo estágio.
# cp /usr/bin/qemu-arm-static rootfs/usr/bin # cp /etc/resolv.conf rootfs/etc # chroot rootfs # export LANG=C # /debootstrap/debootstrap --second-stage
Com o segundo estágio completo, alteraremos a lista de pacotes para ficarem o mais completa possível.
# cat << EOT > /etc/apt/sources.list deb https://ftp.debian.org/debian/ bookworm contrib main non-free non-free-firmware deb-src https://ftp.debian.org/debian/ bookworm contrib main non-free non-free-firmware deb https://ftp.debian.org/debian/ bookworm-updates contrib main non-free non-free-firmware deb-src https://ftp.debian.org/debian/ bookworm-updates contrib main non-free non-free-firmware deb https://ftp.debian.org/debian/ bookworm-backports contrib main non-free non-free-firmware deb-src https://ftp.debian.org/debian/ bookworm-backports contrib main non-free non-free-firmware deb https://security.debian.org/debian-security/ bookworm-security contrib main non-free non-free-firmware deb-src https://security.debian.org/debian-security/ bookworm-security contrib main non-free non-free-firmware EOT
Com isso feito, atualize o apt e instale outras dependências.
# apt update # apt upgrade # apt install sudo firmware-realtek systemd-timesyncd locales
Para o sudo funcionar corretamente, devemos alterar o hostname da máquina
# echo labrador > /etc/hostname
Você deve adicionar o nome definido no passo anterior à primeir a linha do arquivo /etc/hosts, da seguinte forma:
# nano /etc/hosts 127.0.0.1 localhost labrador ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Com isso já feito, pode-se criar um usuário comum e adicioná-lo a todos os grupos necessários. Neste exemplo, criamos um usuário 'caninos' pertencente ao grupo sudo e criamos uma senha. É *altamente recomendado* criar uma senha para o root também.
# useradd -m -G sudo -s /bin/bash caninos # passwd caninos # passwd
Assim, podemos limpar o cache do apt.
# apt-get autoclean # apt-get clean
Para sair do chroot, apenas escrever ou teclar Ctrl + D.
# exit
Limpando a máquina:
# rm -f rootfs/root/.bash_history rootfs/usr/bin/qemu-arm-static # cat /dev/null > rootfs/etc/resolv.conf
Passos Opcionais
1. Ethernet
Para configurar o Ethernet é necessário alterar o arquivo /etc/network/interfaces para
auto end0 iface end0 inet dhcp
e usar o comando ifup end0 para ligá-la da primeira vez.
Gravando o sistema num cartão SD
i) Criar a tabela de partições
Obs.: Você deve substituir mmcblkX pelo descritor correto para o seu caso.
# parted /dev/mmcblkX Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt (parted) unit s (parted) mkpart primary 16384 114687 (parted) mkpart primary 114688 -1 Warning: You requested a partition from 114688s to AAAs (sectors 114688..AAA). The closest location we can manage is 114688s to BBBs (sectors 114688..BBB). Is this still acceptable to you? Yes/No? yes (parted) print Model: (file) Disk /dev/mmcblkX: DDDs Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 16384s 114687s 98304s primary 2 114688s BBBs CCCs primary (parted) q
ii) Gravar o bootloader
# dd if=/path/to/u-boot-dtb.img of=/dev/mmcblkX bs=512 seek=66 status=progress
iii) Formatar as partições
# mkfs.vfat /dev/mmcblkXp1 # mkfs.ext4 /dev/mmcblkXp2
iv) Gravar o kernel na partição 1
# mount /dev/mmcblkXp1 /mnt # cp /path/to/kernel.dtb /mnt # cp /path/to/uImage /mnt # cat << EOT > /mnt/uEnv.txt uenvcmd=setenv ramdisk_addr_r -; setenv os_type linux; bootargs=clk_ignore_unused selinux=0 scandelay root=/dev/mmcblk0p2 rw console=ttyS3 rootfstype=ext4 console=tty0 loglevel=6 rootwait EOT # sync # umount /mnt
v) Gravar o rootfs na partição 2
# mount /dev/mmcblk0p2 /mnt # cp -rp /path/to/rootfs/* /mnt # cp -r /path/to/lib/modules /mnt/lib # sync # umount /mnt