Labrador 32 bits - Criando uma imagem: mudanças entre as edições
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. | |||
Você pode baixar qualquer rootfs compatível com a arquitetura | |||
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").