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, acesse github/labrador-linux. 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á:
- kernel.dtb
- uImage
- lib/modules
Sistema de Arquivos
Você pode usar qualquer rootfs compatível com a arquitetura arm. Nesse procedimento descreveremos o processo para criação de um rootfs usando o debootstrap.
i) debootstrap primeiro estágio
Para gerar um sistema base Debian Buster:
# debootstrap --arch=armhf --foreign buster rootfs
ii) debootstrap 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
iii) configurando o repositório de pacotes
# cat << EOT > /etc/apt/sources.list deb http://ftp.br.debian.org/debian/ buster main contrib non-free deb-src http://ftp.br.debian.org/debian/ buster main contrib non-free deb http://security.debian.org/debian-security buster/updates main contrib non-free deb-src http://security.debian.org/debian-security buster/updates main contrib non-free # buster-updates, previously known as 'volatile' deb http://ftp.br.debian.org/debian/ buster-updates main contrib non-free deb-src http://ftp.br.debian.org/debian/ buster-updates main contrib non-free EOT
iv) instalando pacotes adicionais
# apt-get update # apt-get upgrade # apt-get install sudo
v) definindo o hostname
# echo labrador > /etc/hostname
vi) adiocionar o hostname ao hosts
Você deve adicionar o nome definido no passo anterior (hostname) ao arquivo /etc/hosts, da seguinte forma:
127.0.1.1 labrador
Ao final seu arquivo /etc/hosts deve se parecer com esse:
# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 labrador ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
vii) criar um usuário e adicioná-lo ao grupo sudo
Criaremos um usuário chamado caninos:
# useradd -m caninos # usermod -aG sudo caninos
Definiremos uma senha para esse usuário:
# passwd caninos
viii) demais ajustes
Você pode fazer outros ajustes aqui que julgar necessário. Os passos descritos até aqui são os mais essenciais para se ter uma versão mínima em modo texto.
ix) finalizando
# apt-get autoclean # apt-get clean
Para sair do chroot:
# exit
Limpando:
# rm -f rootfs/root/.bash_history rootfs/usr/bin/qemu-arm-static # cat /dev/null > rootfs/etc/resolv.conf
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