Saya telah membangun kernel Linux (3.0.1) untuk Raspberry Pi saya dengan langkah-langkah berikut:
1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot
Pertanyaan saya adalah, bagaimana saya bisa membangun kernel.img? Saya pikir ini berisi zImage + ramdisk tetapi bagaimana saya bisa membangun ini?
Adakah yang bisa membimbing saya untuk membuat ramdisk dan mengemas keduanya ke file kernel.img? Saya ingin mem-boot kernel ini pada Raspberry Pi saya.
cross-compilation
linux
kernel
arm
Shantanu Banerjee
sumber
sumber
kernel.org
situs?Jawaban:
file kernel.img
Saat menggunakan kernel Linux,
kernel.img
file baru saja diganti namanyalinux/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 terintegrasiinitramfs
(ramdisk) tetapi tidak diperlukan. Sebagai contoh,kernel.img
file stok tidak mengandunginitramfs
sementarakernel_emergency.img
tidak.Catatan: Panduan kompilasi kernel resmi pada eLinux wiki menyarankan Anda untuk menggunakan
imagetool-uncompressed.py
alat untuk menyiapkankernel.img
file. Itu diperlukan pada hari-hari awal RaspberyPi tetapi saat ini bootloader dapat menangani file biasaImage
danzImage
.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 menggunakanbcmrpi_defconfig
(ditemukan pada sumber kernel yang kompatibel RaspberryPi) ataubcmrpi_emergency_defconfig
jika rencana Anda menggunakan buildininitramfs
.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 mengubahCROSS_COMPILE
opsi di semuamake
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:
git
utilitas dan Anda dapat melakukan ini bahkan di RapsberryPi sendiri): KlikZIP
ikon,Code
tab di bawah ini sedikit di bagian atas situs. Ini seharusnya memungkinkan Anda mengunduh file sumber sebagaizip
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):Gunakan konfigurasi default yang disediakan oleh yayasan:
Jalankan
make oldconfig
dan jawab beberapa pertanyaan (itu boleh saja untuk menekan enter di setiap pertanyaan meninggalkan jawaban default):Kompilasi kernel:
Salin modul kernel ke
/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 bahwainitramfs
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 dikernel_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 menggunakanCONFIG_INITRAMFS_SOURCE
opsi konfigurasi kernel.Catatan akhir
Jadi Anda harus melakukan ini dalam 3 langkah:
initramfs
file.initramfs
konten siap ke kernel Anda.initramfs
konten ini sesuai dengan kebutuhan Anda.sumber
zip
;git
efisien mentransfer file dan Anda dapat menggunakandepth=1
untuk mencegah riwayat pengunduhan (saya pikir).Jika Anda menjalankan versi Debian yang sama pada keduanya, menggunakan X-Apt, dpkg-cross dll ... dan alat emdebian dapat bekerja dengan sangat baik.
Sumber: digunakan untuk mengembangkan aplikasi c ++ untuk sistem ARM tertanam yang menjalankan emdebian.
sumber