file kernel.img
Saat menggunakan kernel Linux, kernel.img
file baru saja diganti namanya linux/arch/arm/boot/Image
. Seharusnya juga dimungkinkan (atau setidaknya itu mungkin terakhir kali saya periksa) untuk menggunakan versi terkompresi dari file ini - zImage
. Ini dapat berisi terintegrasi initramfs
(ramdisk) tetapi tidak diperlukan. Sebagai contoh, kernel.img
file stok tidak mengandung initramfs
sementara kernel_emergency.img
tidak.
Catatan: Panduan kompilasi kernel resmi pada eLinux wiki menyarankan Anda untuk menggunakan imagetool-uncompressed.py
alat untuk menyiapkan kernel.img
file. Itu diperlukan pada hari-hari awal RaspberyPi tetapi saat ini bootloader dapat menangani file biasa Image
dan zImage
.
Masalah sumber kernel
Yang sangat penting adalah bahwa ketika membangun kernel untuk RaspberryPi, Anda tidak bisa hanya menggunakan versi apa pun darinya. Hanya versi khusus yang porting ke RaspberryPi yang akan berfungsi. Sayangnya, versi hulu saat ini (ditemukan di kernel.org
situs) tidak kompatibel dengan RaspberryPi. Selain itu, versatil_config
ini tidak baik untuk RaspberryPi, Anda sebaiknya menggunakan bcmrpi_defconfig
(ditemukan pada sumber kernel yang kompatibel RaspberryPi) atau bcmrpi_emergency_defconfig
jika rencana Anda menggunakan buildin initramfs
.
Instruksi pembangunan kernel
Tempat terbaik untuk mengambil sumber kernel untuk RaspberryPi ada di yayasan github . Anda juga dapat menemukan penjelasan yang berguna tentang cara mendapatkannya dan cara mengompilasinya di wiki resmi RasbperryPi . Inilah versi kecil saya dari langkah-langkah yang terlibat (CATATAN: Saya berasumsi Anda ingin melakukan crosscompile kernel. Ini jauh lebih cepat dan harus membuat hasil yang sama tetapi membangun kernel secara native di RaspberryPi juga dimungkinkan):
Unduh toolchain resmi di buat sendiri. Cara Eigher, saya asssume itu dipasang di /usr/bin/arm-linux-gnueabi-*
. Jika Anda memilikinya di tempat lain, Anda harus mengubah CROSS_COMPILE
opsi di semua make
perintah Anda .
Pergi ke https://github.com/raspberrypi/linux situs di mana Anda dapat menemukan sumber kernel RapsberryPi resmi. Anda dapat mengunduh kode dengan dua cara:
- Sebagai file terkompresi (untuk menggunakan opsi ini Anda tidak harus menginstal
git
utilitas dan Anda dapat melakukan ini bahkan di RapsberryPi sendiri): Klik ZIP
ikon, Code
tab di bawah ini sedikit di bagian atas situs. Ini seharusnya memungkinkan Anda mengunduh file sumber sebagai zip
file. Anda bisa menggunakan git untuk melakukan ini, tetapi itu (seperti yang dijelaskan pada wiki) akan membutuhkan lebih banyak ruang dan waktu. Kemudian dekompres file tersebut untuk mendapatkan source tree.
Menggunakan git
utilitas (ini tidak bekerja untuk saya di RaspberryPi karena mungkin ada sedikit RAM tetapi harus bekerja dengan baik pada sistem desktop (perhatikan --depth 1
argumen yang mencegah git mengunduh seluruh riwayat pengembangan (yang sangat besar):
git clone --depth 1 git://github.com/raspberrypi/linux.git
Gunakan konfigurasi default yang disediakan oleh yayasan:
cp arch/arm/configs/bcmrpi_defconfig .config
Jalankan make oldconfig
dan jawab beberapa pertanyaan (itu boleh saja untuk menekan enter di setiap pertanyaan meninggalkan jawaban default):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
Kompilasi kernel:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
Salin modul kernel ke /tmp/modules
:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
Gunakan Image
file sebagaikernel.img
Unggah semua modul ke dari /tmp/modules/lib/modules/
di komputer Anda ke /lib/modules/
direktori di rootfs RaspberryPi Anda.
Menambahkan initramfs
Namun ini tidak memberikan instruksi tentang cara membuat initramfs
. Karena ini adalah topik yang sangat luas (pada dasarnya, Anda harus membuat lingkungan pengguna Linux yang berfungsi semut, tidak ada batasan seberapa rumitnya), saya tidak akan membahasnya di sini sekarang. Saya hanya akan mencatat bahwa initramfs
dapat digunakan dalam dua bentuk yang berbeda - satu, di mana file terpisah dan buildin di mana ia terintegrasi dengan file gambar kernel (seperti itu ada di kernel_emergency.img
). Opsi kedua harus didukung oleh bootloader RaspberryPi tetapi ada beberapa rumor bahwa itu rusak pada versi firmware saat ini sehingga Anda mungkin harus menggunakan versi buildin.
Cara terbaik untuk memulai adalah dengan menggunakan konten initramfs yang berfungsi (yang digunakan untuk kernel_emergency.img) dengan mengunduhnya dari repositori github yayasan lain dan hanya setelah Anda dapat mem-boot kernel menggunakan iniramfs
gambar ini , coba buat sendiri. Semua yang diperlukan untuk ini adalah menunjuk ke direktori yang diunduh menggunakan CONFIG_INITRAMFS_SOURCE
opsi konfigurasi kernel.
Catatan akhir
Jadi Anda harus melakukan ini dalam 3 langkah:
- Cobalah membangun dan mem-boot kernel tanpa
initramfs
file.
- Coba tambahkan
initramfs
konten siap ke kernel Anda.
- Ubah
initramfs
konten ini sesuai dengan kebutuhan Anda.