O que é um arquivo dtb do u-Boot e como usá-lo (BeagleBoard xM)?

11

Estou tentando criar um Linux personalizado para um BeagleBoard xM (Rev. C). Eu faço muito C / C ++, mas sou um iniciante na construção e instalação do Linux a partir do zero.

Eu usei o dispositivo de criação do Yocto Project ( link ) que parecia promissor - ele criava arquivos para o gerenciador de inicialização u-Boot, o Linux kernel e sistema de arquivos raiz.

Esta página fornece instruções para a configuração o cartão micro SD com os arquivos gerados pelo Yocto. No entanto, os arquivos de imagem incluem um arquivo ".dtb" que não é mencionado nas instruções de configuração.

Este arquivo tem algo a ver com o hardware da placa? Vários sites mencionam o carregamento de arquivos dtd (talvez em uEnv.txt?), Mas não encontrei nenhuma informação detalhada.

Eu usei as instruções acima para configurar a partição de inicialização com MLO e u-boot.img e mexi um pouco com o uEnv.txt. Eu também configuro uma segunda partição com o sistema de arquivos raiz.

Consegui inicializar e fazer login (via console da porta serial), mas parecia a maioria do hardware da placa - por exemplo, vídeo e todos os dispositivos USB, incluindo ethernet - não estavam funcionando. Isso pode ser porque eu não estava usando o arquivo .dtb?

Alguém pode explicar o dtb e como usá-lo em uma placa beagle? Obrigado!

    
por Jeremy 01.04.2014 / 23:19

2 respostas

12

Respondendo a minha própria pergunta, depois que eu descobri o que procurar. Um arquivo "dtb" contém um Device Tree Blob (ou Binary) (boa descrição aqui ). É a nova maneira de passar informações de hardware sobre a placa para o kernel do Linux.

Ele pode ser carregado na memória e passado para o kernel pelo u-Boot.

Aqui estão os comandos do u-Boot que usei:

setenv bootargs 'console=tty0 console=ttyO2,115200n8 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw'
fatload mmc 0:1 0x80300000 zImage
fatload mmc 0:1 0x815f0000 beagle-xm.dtb
bootz 0x80300000 - 0x815f0000

zImagem sendo o kernel, e beagle-xm.dtb sendo o blob da árvore do dispositivo. Eu automatizei o processo de inicialização, configurando uma variável "uenvcmd = ..." em uEnv.txt (com o código acima), mas é um pouco feio e provavelmente existem maneiras melhores.

Observe que isso é inicializado e diz que ele carregou a árvore de dispositivos, OK. No entanto, eu ainda não tenho dispositivos USB ou vídeo (tanto quanto eu posso dizer). No entanto, suspeito que possa ser um problema diferente.

    
por 02.04.2014 / 22:34
2

Estou usando o Ubuntu 14.04 no blackbeaglebone, então minha configuração pode ser um pouco diferente, mas aqui está como eu carreguei um dtb personalizado:

Em uEnv.txt, adicione uma linha com: dtb=name-of-desired.dtb

Os locais pesquisados devem ser especificados como aqui . Para mim isso foi /boot/dtbs/linux-kernel/ onde linux-kernel é o nome da versão carregada.

    
por 19.11.2014 / 01:18