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)
Sem resumo de edição
Linha 19: Linha 19:
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:
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:


<pre>
<pre>$ export PATH=$PATH:$HOME/labrador-uboot-32/toolchain/arm-linux-gnueabihf/bin</pre>
$ export PATH=$PATH:$HOME/labrador-uboot-32/toolchain/arm-linux-gnueabihf/bin
</pre>


Ao final desse processo você terá:
Ao final desse processo você terá:
Linha 35: Linha 33:


Para gerar um sistema base Debian Stretch:
Para gerar um sistema base Debian Stretch:
<pre>
<pre># mkdir  debootstrap --arch=armhf --foreign stretch rootfs</pre>
# mkdir  debootstrap --arch=armhf --foreign stretch rootfs
</pre>


Para gerar um sistema base Ubuntu :
Alternativamente, para gerar um sistema base Ubuntu :
<pre>
<pre># mkdir  debootstrap --arch=armhf --foreign stretch rootfs</pre>
# mkdir  debootstrap --arch=armhf --foreign stretch rootfs
</pre>


=== ii) debootstrap segundo estágio ===
=== ii) debootstrap segundo estágio ===
Linha 76: Linha 70:


=== v) definindo o hostname ===
=== v) definindo o hostname ===
<pre>
<pre># echo labrador > /etc/hostname</pre>
# echo labrador > /etc/hostname
</pre>


=== vi) adiocionar o hostname ao hosts ===
=== vi) adiocionar o hostname ao hosts ===
Linha 95: Linha 87:
</pre>
</pre>


=== Exemplo do debootstrap ===
=== vii) criar um usuário e adicioná-lo ao grupo sudo ===
Para gerar um arquivo de sistema via debootsrap inicialmente ele deve ser instalado. Num sistema Debian isso pode ser feito com o comando
Criaremos um usuário chamado caninos:
<pre>$sudo apt install debootstrap</pre>
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.
<pre>$ sudo debootstrap --arch=arm64 --foreign buster <pasta_de_destino></pre>
 
=== 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.
 
{| class="wikitable"
|-
! 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.
 
<pre>
<pre>
config.json:
# useradd -m caninos
    {
# usermod -aG sudo caninos
    "mode": "normal",
    "default_boot_device": "emmc",
    "screen_resolution":
    "1920x1080x60"
    }
</pre>
</pre>
Definiremos uma senha para esse usuário:
<pre># passwd caninos</pre>


== Salvando o sistema num cartão SD ==
== Salvando o sistema num cartão SD ==

Edição das 00h17min 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

Alternativamente, 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

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

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