file kernel.img
Saat menggunakan kernel Linux, kernel.imgfile 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.imgfile stok tidak mengandung initramfssementara kernel_emergency.imgtidak.
Catatan: Panduan kompilasi kernel resmi pada eLinux wiki menyarankan Anda untuk menggunakan imagetool-uncompressed.pyalat untuk menyiapkan kernel.imgfile. Itu diperlukan pada hari-hari awal RaspberyPi tetapi saat ini bootloader dapat menangani file biasa Imagedan 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.orgsitus) tidak kompatibel dengan RaspberryPi. Selain itu, versatil_configini tidak baik untuk RaspberryPi, Anda sebaiknya menggunakan bcmrpi_defconfig(ditemukan pada sumber kernel yang kompatibel RaspberryPi) atau bcmrpi_emergency_defconfigjika 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_COMPILEopsi di semua makeperintah 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
gitutilitas dan Anda dapat melakukan ini bahkan di RapsberryPi sendiri): Klik ZIPikon, Codetab di bawah ini sedikit di bagian atas situs. Ini seharusnya memungkinkan Anda mengunduh file sumber sebagai zipfile. 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 gitutilitas (ini tidak bekerja untuk saya di RaspberryPi karena mungkin ada sedikit RAM tetapi harus bekerja dengan baik pada sistem desktop (perhatikan --depth 1argumen 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 oldconfigdan 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 Imagefile 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 initramfsdapat 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 iniramfsgambar ini , coba buat sendiri. Semua yang diperlukan untuk ini adalah menunjuk ke direktori yang diunduh menggunakan CONFIG_INITRAMFS_SOURCEopsi konfigurasi kernel.
Catatan akhir
Jadi Anda harus melakukan ini dalam 3 langkah:
- Cobalah membangun dan mem-boot kernel tanpa
initramfsfile.
- Coba tambahkan
initramfskonten siap ke kernel Anda.
- Ubah
initramfskonten ini sesuai dengan kebutuhan Anda.