Labrador 32 bits - Criando uma imagem: mudanças entre as edições

De Caninos Loucos
Ir para navegação Ir para pesquisar
Glhrm (discussão | contribs)
Glhrm (discussão | contribs)
Linha 94: Linha 94:
ff02::2        ip6-allrouters
ff02::2        ip6-allrouters
</pre>
</pre>
Para iniciar o processo deve-se montar o arquivo rootfs, neste caso o montaremos no destino /media/mountpoint
<pre>$ mount -o rootfs.img /media/mountpoint</pre>
Após a montagem do sistema uma pasta boot deve ser criada no mesmo, e os arquivos de compilação e logo.bmp devem ser colocados nesta pasta, os comandos abaixo realizam essa tarefa:
<pre>
$ mkdir /media/mountpoint/rootfs/boot
$ cp -r /media/caninos/kernel/Image /media/mountpoint/rootfs/boot
$ cp -r /media/caninos/kernel/v3emmc.dtb /media/mountpoint/rootfs/boot
$ cp -r /media/caninos/kernel/v3sdc.dtb /media/mountpoint/rootfs/boot
$ cp -r /media/caninos/kernel/logo.bmp /media/mountpoint/rootfs/boot
</pre>
Após finalizar a pasta de boot o próximo passo é editar a pasta /lib/modules. Para isso é necessário remover a pasta original do rootfs e colocar a pasta gerada na compilação do Kernel.
<pre>
$ sudo rm -r /media/mountpoint/rootfs/lib/modules
$ sudo cp -r /media/caninos/kernel/lib/modules /media/mountpoint/ rootfs/lib/
</pre>
Após este processo o sistema estará pronto para ser usado na Labrador, no entanto, ainda temos que criar um arquivo de configuração com as instruções de boot para a Labrador. Essas configurações serão feitas num arquivo config.json na pasta boot. Conforme seção [[Labrador 64 bits - Criando uma imagem|Arquivo config.json]]


=== Exemplo do debootstrap ===
=== Exemplo do debootstrap ===

Edição das 00h13min de 17 de julho de 2020

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").