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

De Caninos Loucos
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
Linha 13: Linha 13:


= Kernel Linux =
= Kernel Linux =
Para obter o kernel, acesse [https://github.com/caninos-loucos/labrador-linux 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.
Para obter o kernel, acesse [https://github.com/caninos-loucos/labrador-linux 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:
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:
Linha 26: Linha 26:
* lib/modules
* lib/modules


== Gerando o Sistema de Arquivos ==


 
Você pode baixar qualquer rootfs compatível com a arquitetura arm ou usar o [https://wiki.debian.org/pt_BR/Debootstrap debootstrap] para criar seu próprio. Abaixo damos um exemplo de como utilizar o debootstrap para baixar uma versão do Debian buster, por enquanto prosseguiremos assumindo que o rootfs.img já está baixado.
* Um arquivo bootloader.bin e um arquivo logo.bmp
* Os arquivos de Kernel para o seu sistema
* Um sistema de arquivos rootfs do sistema operacional que deseja instalar.
 
Os dois primeiros podem ser encontrados no [http://github.com/caninos-loucos/labrador-linux-64 Github], o sistema de arquivo pode ser encontrado no site de diversas distribuições diferentes de linux. Você também pode utilizar o [https://wiki.debian.org/pt_BR/Debootstrap debootstrap] para gerar seu próprio rootfs. Recomendamos o uso de sistemas de arquivo [https://pt.wikipedia.org/wiki/Ext4 ext4] mas outros sistemas ext funcionarão também.
 
= Criando sua imagem =
 
== Compilando o Kernel ==
Após baixar os últimos arquivos de Kernel do Github o Kernel Linux deve ser compilado conforme as instruções do arquivo README.md. Basta rodar o comando make na pasta linux-source. Qualquer dependência de pacotes do sistema será alertada pelo compilador. Outras dúvidas gerais podem ser encontradas no mesmo arquivo readme.
Os arquivos de saída dessa compilação serão:
* Uma pasta /lib
* Um arquivo Image
* Dois arquivos de extensão .dtb (caso nenhuma mudança tenha sido feita no processo descrito estes se chamarão v3emmc.dtb e v3sdc.dtb)
 
== Criando um sistema bootável ==
 
Você pode baixar qualquer rootfs compatível com a arquitetura arm64 ou usar o [https://wiki.debian.org/pt_BR/Debootstrap debootstrap] para criar seu próprio. Abaixo damos um exemplo de como utilizar o debootstrap para baixar uma versão do Debian buster, por enquanto prosseguiremos assumindo que o rootfs.img já está baixado.


Para iniciar o processo deve-se montar o arquivo rootfs, neste caso o montaremos no destino /media/mountpoint
Para iniciar o processo deve-se montar o arquivo rootfs, neste caso o montaremos no destino /media/mountpoint

Edição das 20h56min de 16 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

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ê deverá 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 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ê deve ter:

  • kernel.dtb
  • uImage
  • lib/modules

Gerando o Sistema de Arquivos

Você pode baixar qualquer rootfs compatível com a arquitetura arm ou usar o debootstrap para criar seu próprio. Abaixo damos um exemplo de como utilizar o debootstrap para baixar uma versão do Debian buster, por enquanto prosseguiremos assumindo que o rootfs.img já está baixado.

Para iniciar o processo deve-se montar o arquivo rootfs, neste caso o montaremos no destino /media/mountpoint

$ mount -o rootfs.img /media/mountpoint

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:

$ 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

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.

$ sudo rm -r /media/mountpoint/rootfs/lib/modules 
$ sudo cp -r /media/caninos/kernel/lib/modules /media/mountpoint/ rootfs/lib/

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 Arquivo config.json

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