file kernel.img
Quando si utilizza il kernel Linux, il kernel.imgfile viene semplicemente rinominato linux/arch/arm/boot/Image. Dovrebbe anche essere possibile (o almeno è stato possibile l'ultima volta che ho controllato) utilizzare la versione compressa di questo file - zImage. Può contenere integrato initramfs(ramdisk) ma non è necessario. Ad esempio, il kernel.imgfile di scorta non contiene initramfswhile kernel_emergency.img.
Nota: la guida ufficiale alla compilazione del kernel nella wiki di eLinux suggerisce di usare lo imagetool-uncompressed.pystrumento per preparare il kernel.imgfile. Era necessario nei primi giorni di RaspberyPi ma oggi il bootloader può gestire file regolari Imagee zImage.
Problema delle fonti del kernel
Ciò che è molto importante è che quando si crea il kernel per RaspberryPi, non è possibile utilizzarne solo una versione. Funzionerà solo la versione speciale trasferita su RaspberryPi. Sfortunatamente, l'attuale versione upstream (disponibile sul kernel.orgsito) non è compatibile con RaspberryPi. Inoltre, versatil_confignon va bene per RaspberryPi, dovresti bcmrpi_defconfiginvece usarlo (disponibile sui sorgenti del kernel compatibili con RaspberryPi) o bcmrpi_emergency_defconfigse hai intenzione di usare buildin initramfs.
Istruzioni per la compilazione del kernel
Il posto migliore per prendere i sorgenti del kernel per RaspberryPi è su github di fondazione . Puoi anche trovare alcune spiegazioni utili su come ottenerlo e come compilarlo sul wiki ufficiale di RasbperryPi . Ecco la mia piccola versione semplificata dei passaggi coinvolti (NOTA: suppongo che tu voglia compilare il kernel in modo incrociato. È molto più veloce e dovresti creare gli stessi risultati ma è anche possibile costruire il kernel nativamente su RaspberryPi):
Scarica la toolchain ufficiale per crearne una tua. In ogni caso, suppongo che sia installato /usr/bin/arm-linux-gnueabi-*. Se lo hai in un altro posto, dovresti cambiare l' CROSS_COMPILEopzione in tutti i tuoi makecomandi.
Vai al sito https://github.com/raspberrypi/linux dove puoi trovare fonti ufficiali del kernel RapsberryPi. Puoi scaricare il codice in due modi:
- Come file compresso (per utilizzare questa opzione non è necessario installare l'
gitutilità e puoi farlo anche su RapsberryPi stesso): fai clic ZIPsull'icona, un po 'sotto la Codescheda nella parte superiore del sito. Ciò dovrebbe consentirti di scaricare file sorgente di lates come zipfile. Puoi usare git per farlo, ma quello (come descritto nel wiki) richiederà molto più spazio e tempo. Quindi decomprimere il file per ottenere l'albero dei sorgenti.
Uso gitdell'utilità (questo non ha funzionato per me su RaspberryPi poiché probabilmente c'è una piccola quantità di RAM ma dovrebbe funzionare bene sui sistemi desktop (nota l' --depth 1argomento che impedisce a Git di scaricare l'intera cronologia dello sviluppo (che è enorme):
git clone --depth 1 git://github.com/raspberrypi/linux.git
Usa la configurazione predefinita fornita dalla fondazione:
cp arch/arm/configs/bcmrpi_defconfig .config
Esegui make oldconfige rispondi ad alcune domande (dovrebbe essere ok premere invio in ogni domanda lasciando la risposta predefinita):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
Compilare il kernel:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
Copia i moduli del kernel in /tmp/modules:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
Usa il Imagefile comekernel.img
Carica tutti i moduli da /tmp/modules/lib/modules/nel tuo computer nella /lib/modules/directory sui tuoi rootfs RaspberryPi.
Aggiunta di initramfs
Questo non fornisce istruzioni su come creare initramfs, tuttavia. Dal momento che questo è un argomento molto ampio (in pratica, devi creare un ambiente operativo per utenti Linux funzionante e non c'è davvero alcun limite su quanto possa essere complicato), non lo tratterò qui ora. Noterò solo che initramfspuò essere utilizzato in due forme diverse: una autonoma, in cui è un file separato e buildin in cui è integrato con il file di immagine del kernel (come se fosse kernel_emergency.img). La seconda opzione dovrebbe essere supportata dal bootloader di RaspberryPi ma ci sono alcune voci secondo cui è rotta sulla versione corrente del firmware, quindi probabilmente dovresti usare la versione buildin.
Il modo migliore per iniziare è usare il contenuto funzionante di initramfs (che viene usato per kernel_emergency.img) scaricandolo da un altro repository github di base e solo dopo aver avviato il kernel usando questa iniramfsimmagine, prova a crearne uno tuo. Tutto ciò che dovrebbe essere necessario per questo è puntare alla directory scaricata usando l' CONFIG_INITRAMFS_SOURCEopzione di configurazione del kernel.
Note finali
Quindi dovresti farlo in 3 passaggi:
- Prova a
initramfscompilare e avviare il kernel senza file.
- Prova ad aggiungere
initramfscontenuti pronti al tuo kernel.
- Modifica questo
initramfscontenuto in base alle tue esigenze.