Labrador 32 bits - Criando uma imagem
Nesta página você encontrará instruções de como criar uma imagem mínima para Labrador 32 bits. Esse processo 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 baixar 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 Stretch:
# mkdir debootstrap --arch=armhf --foreign stretch rootfs
Para gerar um sistema base Ubuntu :
# mkdir debootstrap --arch=armhf --foreign stretch 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/ stretch main contrib non-free deb-src http://ftp.br.debian.org/debian/ stretch main contrib non-free deb http://security.debian.org/debian-security stretch/updates main contrib non-free deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free # stretch-updates, previously known as 'volatile' deb http://ftp.br.debian.org/debian/ stretch-updates main contrib non-free deb-src http://ftp.br.debian.org/debian/ stretch-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
Exemplo do debootstrap
Para gerar um arquivo de sistema via debootsrap inicialmente ele deve ser instalado. Num sistema Debian isso pode ser feito com o comando
$sudo apt install debootstrap
Após isto, o comando criará um arquivo de sistema. Neste caso, um arquivo do Debian Buster, é possível substituir a versão para qualquer uma desejada.
$ sudo debootstrap --arch=arm64 --foreign buster <pasta_de_destino>
Arquivo config.json
O arquivo config.json deve ser criado na pasta boot do rootfs, basta criá-lo e preenchê-lo com os parâmetros necessários, conforme tabela abaixo.
| Parâmetro | Descrição | Formato de entrada | Padrão |
|---|---|---|---|
| ”mode” | Configura o modo de boot da imagem (Mais informação na seção Modos de Boot) | Normal, Upgrade, Produce | Normal |
| ”default_boot_device” | Configura a fonte primária do boot | SDcard, Emmc | Sdcard |
| ”screen_resolution” | Define a resolução e frequência do display | [horizontal]x [vertical]x[freq] | 1920x1080x60 |
| ”sdcard_dtb” | Nome do arquivo dtb na pasta de boot referente ao cartão SD. | *.dtb | v3sdc.dtb |
| ”emmc_dtb” | Nome do arquivo dtb na pasta de boot referente à eMMC. | *.dtb | v3emmc.dtb |
| ”kernel” | Nome do arquivo de kernel na pasta de boot. | * | Image |
| ”source” | Caminho do arquivo de bootloader utilizado nos modos Upgrade e Produce (ignorada no modo Normal) | *.bin | bootloader.bin |
| ”image” | Caminho da imagem a ser gravada na eMMC no modo Produce (ignorada nos modos Normal e Upgrade) | *.tar | rootfs.tar |
| ”label” | Rótulo de partição do sistema de arquivos ext4 no modo Produce (ignorado nos modos Normal e Upgrade) | * | rootfs |
Abaixo temos um exemplo para este arquivo, considerando o modo de boot Normal, boot através da eMMC, resolução de tela 1920x1080@60Hz. Como sdcard_dtb, emmc_dtb e kernel não são explicitados, seus valores padrão são utilizados automaticamente.
config.json:
{
"mode": "normal",
"default_boot_device": "emmc",
"screen_resolution":
"1920x1080x60"
}
Salvando o sistema num cartão SD
Para utilizar um cartão SD no boot da labrador, o cartão deve ser formatado com os seguintes parâmetros:
- Partição MBR (EFI não funcionará)
- A primeira partição precisa ter offset de 1MB
- Sistema de arquivo EXT4
Após formatar o cartão SD neste formato, basta copiar o sistema rootfs, é recomendado o uso da ferramenta rsync seguindo o comando abaixo:
$ rsync -r /media/mountpoint/rootfs /media/SDCARD/partition
Finalizado isto, basta copiar o arquivo bootloader.bin para o início do cartão SD não é no início da primeira partição, mas sim no offset deixado antes da mesma. Os parâmetros conv, seek e bs recomendados seguem abaixo.
$ sudo dd if=/src/bootloader.bin of=/dev/SDCARD conv=notrunc seek=1 bs=512
Modos de boot
No arquivo de configuração 3 modos de boot são possíveis: Normal, Upgrade e Produce.
Modo Normal
O modo Normal criará um cartão SD bootável, similar ao disponível na nossa seção de downloads. Para utilizar seu sistema no modo Normal o arquivo config.json disponibilizado nas seções anteriores é suficiente e não requer nenhuma mudança adicional. O sistema irá iniciar de acordo com o parâmetro "default_boot_device". Para pular esta escolha e iniciar o sistema estritamente do cartão SD o botão de recuberação da Labrador Coreboard deve ser pressionado.
Modo Upgrade
O modo Upgrade fará uma atualização do bootloader e do logo de início conforme arquivo indicado no parâmetro "source" do config. A maioria dos passos listados é desnecessário para este modo, portanto, para criá-lo é recomendado:
- Formatar o cartão SD conforme instrução deste artigo.
- Pular a instrução de cópia do sistema para a primeira partição.
- Copiar o arquivo bootloader.bin para o início do cartão SD.
- Criar uma pasta /boot vazia na primeira partição.
- Copiar os arquivos logo.bmp e bootloader.bin para esta pasta.
- Criar um arquivo config.json nesta pasta. (Parâmetros válidos deste modo são "mode", "source" e "screen_resolution").
Atenção: o bootloader transferido para a placa será o bootloader da basta boot, não o colocado no início do cartão SD.
Modo Produce
O modo Produce, além de substituir o bootloader como no Upgrade, substituirá também o sistema gravado na memória interna da labrador pelo sistema indicado no parâmetro "image". Para utilizar o modo produce uma imagem do sistema conforme gerada nas seções anteriores é necessária, esta deve estar no formato .tar. É possível criar esta imagem rodando os seguintes comandos após os passos de criação da imagem:
$ export org=/media/mountpoint/rootfs $ sudo tar cvfp rootfs.tar --format=ustar --exclude=lost+found --exclude=dev --exclude=proc --exclude=sys -C $org .
Após gerar o sistema .tar os seguintes passos são recomendados para a criação de um cartão de modo Produce:
- Formatar o cartão SD conforme instrução deste artigo.
- Pular a instrução de cópia do sistema para a primeira partição.
- Copiar o arquivo bootloader.bin para o início do cartão SD.
- Criar uma pasta /boot vazia na primeira partição.
- Copiar os arquivos logo.bmp, bootloader.bin e rootfs.tar para esta pasta.
- Criar um arquivo config.json nesta pasta. (Parâmetros válidos deste modo são "mode", "source", "image", "label" e "screen_resolution").