2015-06-08 11 views
5

Bootloader come U-Boot che non implementano l'API Open Firmware, si prevede di passare al kernel una forma binaria della struttura dei dispositivi appiattito - LinuxFDTBlobPerché il file DTS (Device Tree Structure) è necessario sia nel bootloader sia nel codice sorgente del kernel?

Perché sono i file DTS presenti nel kernel anche? Non è ridondante?

A titolo di esempio, il codice sorgente di U-boot è il file seguente:
arch/arm/dts/tegra124-jetson-tk1.dts

Questo file può anche essere trovato sotto il codice sorgente di Linux:
arch/arm/boot/dts/tegra124-jetson-tk1.dts

Anche se la versione del kernel è 4 volte le Versione U-boot, mi piacerebbe sapere la ragione di questa ridondanza. Credo sia più difficile da mantenere e utilizzare sia per i manutentori che per gli sviluppatori

+1

È un problema che [le persone hanno cercato di capire come risolvere per un po 'di tempo] (http://thread.gmane.org/gmane.comp.devicetree.compiler/14). – Notlikethat

+0

sembra che non abbiano completato la migrazione quando hanno quasi trovato una soluzione: | – Hamzahfrq

+1

Sono per scopi diversi. La versione * u-boot * consente a diverse versioni di * u-boot * di funzionare su più schede. Fa parte di un'infrastruttura [tag: kbuild] o * config * che è un WIP. Le versioni di Linux sono per l'avvio di Linux. Ovviamente, * u-boot * è una versione ridotta perché non ci sono tante periferiche necessarie per l'avvio. Puoi fare lo stesso argomento per tutti i driver * u-boot *; la maggior parte sono copie dei driver Linux con interrupt sostituiti da routine di polling. Perché esistono BSD e Linux? Non si duplicano? Perché ogni progetto ha il proprio elenco collegato? –

risposta

1

Di seguito è la risposta dai commenti di Artlessnoise:

La fonte u-boot utilizza il DTB u-boot, mentre Linux utilizza Linux DTB all'avvio di kernel. La versione u-boot è una versione ridotta perché non ci sono tante periferiche necessarie per l'avvio. Usi sempre la versione del kernel per Linux, cioè u-boot passa questo a Linux (così come carica bzImage o vmlinux).

Molti dei driver di avvio u sono quasi identici a Linux. Ovviamente, puoi fare lo stesso argomento per tutti i driver u-boot; la maggior parte sono copie dei driver Linux con interrupt sostituiti da routine di polling. L'utilizzo della stessa interfaccia open-firmware consente loro di avvicinarsi.

+0

Quindi Linux ignora completamente la struttura del dispositivo passata da u-boot? Oppure la struttura del dispositivo linux è sovrapposta alla struttura del dispositivo u-boot, e quindi Linux usa quell'albero unito? Sembra che questa domanda non abbia mai avuto risposta. –

+0

Sì linux ignora l'albero dei dispositivi che si trova in u-boot. l'albero del dispositivo linux arriva dopo la parte del kernel. è come u-boot-> Kernel-> dtb-> rootfs –

+0

@ChrisWarth kernel Linux _uses_ il DTB passato da u-boot. Ma il DTB passato da u-boot non è il DTB di uboot. È il DTB del kernel (presente nelle fonti del kernel). Il DTB uboot viene utilizzato da uboot durante l'avvio, per configurare i dispositivi, prima che il kernel venga caricato in memoria – Hamzahfrq

3
  1. UBoot e Linux Kernel sono due progetti diversi. Quindi avrebbero bisogno di copie diverse per gestire i loro progetti separati.
  2. I kernel di Linux possono essere avviati anche con altri bootloader. Ci sono altri modi per passare DTB al kernel di Linux, ad es. l'immagine del kernel può essere aggiunta con DTB che deve essere utilizzata.

A causa delle ragioni sopra citate, ha senso replicare le copie del DTS.

+0

sì, ma ha più senso per me se il bootloader e il kernel sono indipendenti dai dettagli dell'hardware, cioè lo stesso albero dei dispositivi che è correttamente gestito dovrebbe funzionare per entrambi – Hamzahfrq

+0

In un ideale mondo sì, avrebbero dovuto essere condivisi. La struttura dei dispositivi era la risposta di linux alle porte SOC ARM non gestibili da parte di diverse società. Tecnicamente gli utenti di Linux mantengono i propri file DTS. Uboot si preoccuperà solo di alcuni aspetti del DTS come il tipo di arco, la memoria, il meccanismo di archiviazione ecc. Mentre il DTS di Linux deve essere esaustivo. Quindi ora diventa una questione di politica e di logstica; chi manterrà cosa e dove; piuttosto che fattibilità tecnica. Opinione personale, questa duplicazione continuerà ad esserlo, fino a quando la scoperta del dispositivo di arm è standardizzata (come PCI) –

0

Uboot ha un file DTS separato, che può essere impostato come CONFIG_DEFAULT_DEVICE_TREE in uboot defconfig. Questo file DTS è costruito con immagine uboot, il che significa che fa parte dell'immagine uboot. La sintassi del file DTS uboot è la stessa del file DTS del kernel di Linux. Il file DTS di Linux è compilato in un file DTB e utilizzato separatamente per l'analisi della configurazione hardware da parte del kernel Linux. L'immagine DTB di Linux viene visualizzata separatamente dall'immagine del kernel di Linux.

Problemi correlati