file kernel.img
Quando si utilizza il kernel Linux, il kernel.img
file 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.img
file di scorta non contiene initramfs
while kernel_emergency.img
.
Nota: la guida ufficiale alla compilazione del kernel nella wiki di eLinux suggerisce di usare lo imagetool-uncompressed.py
strumento per preparare il kernel.img
file. Era necessario nei primi giorni di RaspberyPi ma oggi il bootloader può gestire file regolari Image
e 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.org
sito) non è compatibile con RaspberryPi. Inoltre, versatil_config
non va bene per RaspberryPi, dovresti bcmrpi_defconfig
invece usarlo (disponibile sui sorgenti del kernel compatibili con RaspberryPi) o bcmrpi_emergency_defconfig
se 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_COMPILE
opzione in tutti i tuoi make
comandi.
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'
git
utilità e puoi farlo anche su RapsberryPi stesso): fai clic ZIP
sull'icona, un po 'sotto la Code
scheda nella parte superiore del sito. Ciò dovrebbe consentirti di scaricare file sorgente di lates come zip
file. 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 git
dell'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 1
argomento 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 oldconfig
e 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 Image
file 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 initramfs
può 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 iniramfs
immagine, prova a crearne uno tuo. Tutto ciò che dovrebbe essere necessario per questo è puntare alla directory scaricata usando l' CONFIG_INITRAMFS_SOURCE
opzione di configurazione del kernel.
Note finali
Quindi dovresti farlo in 3 passaggi:
- Prova a
initramfs
compilare e avviare il kernel senza file.
- Prova ad aggiungere
initramfs
contenuti pronti al tuo kernel.
- Modifica questo
initramfs
contenuto in base alle tue esigenze.