2013-07-26 13 views
7

Ho intenzione di configurare l'ambiente di compilazione per creare il mio sistema linux embedded per la scheda AT91SAM9X25. Sto usando buildroot per fare questo. Il comando make crea tutti i bersagli, il primo costruisce toolchain, quindi pacchetti e quindi rootfs e immagini di rootfs (tar, cpio ...). Per ricostruire rootfs di solito uso make clean e quindi make. Il comando make clean rimuove tutto e include la toolchain.come ricostruire rootfs in buildroot

Quindi la prima domanda è: esiste un modo per rifare rootfs senza creare toolchain? Ci vuole molto tempo.

Inoltre sto costruendo il kernel linux all'interno di buildroot. Ho attivato BR2_LINUX_KERNEL [= y] in buildroot. Il linux configurato per usare il filesystem RAM iniziale, quindi per costruire il kernel ha richiesto l'immagine di rootfs (che dovrebbe essere creata da buildroot). Quando eseguo make sotto root di buildroot l'edificio fallisce con l'errore Impossibile aprire 'buildroot-2013.05/output/images/rootfs.cpio'. Perché (se ho capito bene) la sequenza di costruzione è toolchain - pakages - rootfs - linux kernel - immagini di rootfs. Quando tenta di compilare il kernel di Linux, l'immagine rootfs.cpio non viene creata.

Quindi la seconda domanda è: come creare linux all'interno di buildroot se si desidera utilizzare il filesystem RAM iniziale?

Forse ci sono alternative più efficienti di buildroot?

Grazie in anticipo.

risposta

13

il comando build make tutti gli obiettivi

Se non si desidera farlo (fino Buildroot è configurato).
Prima è necessario configurare Buildroot specificando la scheda di destinazione.
Per il manual si può iniziare da zero, o creare un file di configurazione Buildroot per la scheda AT91SAM9X25 derivato da un tavolo simile come ad esempio configs/at91sam9g20dfc_defconfig

Oltre al file di configurazione Buildroot, avrete anche bisogno di un file di configurazione del kernel Linux (a meno che non vuoi provare a configurare il kernel da zero).
Il file di configurazione del kernel per la pensione eval di Atmel con un'AT91SAM9x5 è at91sam9x5ek_defconfig

Si dovrebbe anche leggere la sezione 3.4.2. Creare il proprio supporto scheda

Quindi la prima la mia domanda è: C'è un modo di rifare rootfs senza costruire toolchain? Ci vuole molto tempo.

La risposta dipende da come si definisce "del remake rootfs". Se si elimina la directory output/images/, i file di rootfs vengono riscritti.
Se si eliminano le directory in output/build/, tali pacchetti o sottosistemi vengono ricompilati dall'origine.

Se si configura Buildroot per utilizzare la propria o una catena di strumenti esterna, quindi make clean non li rimuoverà. Se si configura Buildroot per installare la toolchain che costruisce al di fuori della sua directory, allora può lasciarlo da solo durante un make clean.

Ovviamente il Buildroot make è abbastanza intelligente da sapere cosa è cambiato dall'ultima build e cosa deve essere ricompilato.
Dovrebbe essere il caso raro che sia necessario eliminare le directory in output/build/ per forzare la ricompilazione.

Quindi la seconda domanda è: come creare linux in buildroot se si desidera utilizzare il filesystem RAM iniziale?

È necessario configurare correttamente sia Buildroot che il kernel Linux.

make menuconfig 
    Filesystem images ---> 
make linux-menuconfig 
    General setup ---> 
make 

Informazioni più concise sull'uso Buildroot per AT91SAM9x5 è this Linx4SAM page

Forse ci sono alternative più efficienti rispetto buildroot?

Non ci sono altri strumenti come Open Embedded, ma descrivendoli come "più efficiente" è soggettivo.


ADDENDUM

come ricostruire rootfs in buildroot

per forzare il rootfs da ricostruire (in questo caso un initramfs) eliminare i tre file nascosti nella uscita /build/linux-x.xx.xx directory

.stamp_images_installed 
    .stamp_initramfs_rebuilt 
    .stamp_target_installed 
+0

Lasciatemi riformulare la mia domanda riguardante la costruzione del kernel di linux all'interno di buildroot (potrebbe essere spiegato non abbastanza chiaro). Buildroot rende: 1.Toolchain -> 2.packages -> 3.Linux kernel -> 4.rootfs images. Ma, al passaggio 3 (kernel Linux) sono richieste le immagini rootfs, perché linux configurato come utilizza il filesystem RAM iniziale, ma lo abbiamo ottenuto solo sul passo 4. Che il problema - Vedo messaggio di errore al passo 3: non c'è rootfs.cpio – Yuri

+1

* "linux configurato come utilizza il filesystem RAM iniziale" * - ** Buildroot è configurato anche per initramfs **? L'errore nel passaggio # 3 implica che non hai configurato correttamente Buildroot. Le tue preoccupazioni su come Buildroot gestisce ciò che sembra essere un problema di pollo contro uovo sono affrontate in [descrizione commit per "aggiungi supporto per initramfs"] (http://git.uclibc.org/buildroot/commit/?id=f507921d391bb2578261a9e45c003e72302dc67a) . In sostanza Buildroot esegue il passaggio 3 con un file initramfs * vuoto *, quindi esegue un ulteriore passaggio # 5 per produrre un kernel con initramfs effettivo. – sawdust

+0

La risposta (ovvero la rimozione dei file .stamp_xxx) è stata molto utile per forzare la ricostruzione di rootfs. Tuttavia, ho aggiunto cose extra al rootfs con una sovrapposizione. Quando cambio una (leggermente) diversa configurazione senza l'overlay di rootfs, il file dal vecchio overlay NON viene rimosso dalla struttura sotto "target /", o dall'immagine finale. Ho provato a cancellare il contenuto di "target", ma questo ha causato un errore di compilazione (non è un semplice output di build). C'è un modo per ripulire le cose che sono state rimosse da rootfs senza fare una distflean/ricostruzione completa? – Jeremy

Problemi correlati