Kernel Derleme Süreci
Kaynak Kodun Edinilmesi
Raspberry Pi için kernel patch'leri https://github.com/raspberrypi/linux adresinde yayınlanmaktadır.
Kernel kodunu aşağıdaki gibi git
ile klonlayarak indirebilirsiniz:
$ git clone https://github.com/raspberrypi/linux
Yukarıdaki clone işlemi tüm kernel kaynak kodunu geçmiş commit tarihçesi ile birlikte indireceğinden 1 GB'ın üzerinde download gerektirecektir. Alternatif olarak commit tarihçesinden vazgeçip son halini daha küçük bir download gerekecek şekilde aşağıdaki gibi de indirmeniz mümkündür. Ancak bu şekilde indirme işlemi yaptığınızda sonradan git pull
yapamazsanız.
$ git clone --depth=1 https://github.com/raspberrypi/linux
Derleme
Derleme sürecine başlamadan önce kullanacağınız toolchain'in PATH
ortam değişkeni içerisinde yer aldığından emin olunuz. Eğer değilse öncelikle toolchain ana dizinine geçip aşağıdaki komutları uygulayınız:
$ cd tools
$ export PATH=$PWD/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:$PATH
Sonraki adımda Raspberry Pi 2 board'umuz için kernel kodu içerisinden çıkan öntanımlı konfigürasyonu uygulayalım:
$ make ARCH=arm bcm2709_defconfig
Kernel kodu ile birlikte gelen öntanımlı konfigürasyon dosyasında ihtiyaç duyulmayacak pek çok bileşen bulunmaktadır (Kullanmayacağımız network protokolleri, aygıt sürücüleri, dosya sistemleri gibi). Bu noktada mevcut kernel konfigürasyonu üzerinde ek iyileştirme çalışmaları için menuconfig
aracını aşağıdaki gibi çalıştırıp konfigürasyonu iyileştirebilirsiniz:
$ make ARCH=arm menuconfig
Konfigürasyon süreci tamamlandıktan sonra derleme aşamasına geçebilirsiniz. Öncelikle sıkıştırılmış kernel imaj dosyası olan zImage
'i üretelim:
$ make ARCH=arm CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- -j4 zImage
İşlem bitiminde aşağıda dosya yolunda arch/arm/boot/zImage
dosyası oluşacaktır:
Sonrasında Flattened Device Tree modeli için kullanılacak olan dtb dosyasını üretmek amacıyla aşağıdaki komutu çalıştırın:
$ make ARCH=arm CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- -j4 dtbs
İşlem tamamlandığında arch/arm/boot/dts/bcm2709-rpi-2-b.dtb
dosyası oluşacaktır.
Sıradaki işlem konfigürasyon sürecinde modül olarak derlenmesi seçilen kernel modüllerinin derlenmesidir. Bunun için aşağıdaki komutu çalıştırın:
$ make ARCH=arm CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- -j4 modules
Modüllerin Kök Dosya Sistemine Aktarılması
Derlenmiş olan modüllerin uygun bir dizin hiyerarşisi altında toplanması gereklidir.
İlerleyen bölümde Raspberry Pi 2 board'umuz için kendi kök dosya sistemimizi /opt/rpi
dizini altında oluşturacağız. Kernel modülleri ise çalıştığı sistemde /lib/modules
dizini altında kernel versiyon numarası adıyla oluşturulan dizin ve alt dizinlerinde yer alacaktır.
Modülleri uygun dizin yapısıyla çıkartmak için gereken make
hedefi modules_install
şeklindedir. INSTALL_MOD_PATH
değişkenini geliştireceğimiz kök dosya sistemini barındıracak olan ana dizini gösterecek şekilde ayarlamak suretiyle, modüllerin kurulumunu gerçekleştirebiliriz. Bunun için kullanacağımız komut aşağıdaki gibi olacaktır:
$ make ARCH=arm CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- \
INSTALL_MOD_PATH=/opt/rpi modules_install
İşlem bitiminde /opt/rpi/lib/modules/4.4.13-v7+
ve /opt/rpi/lib/firmware
dizin yapıları oluşacaktır. Derlemiş olduğunuz kernel versiyonuna göre ilkinin ismi değişkenlik gösterebilir. Derleme yaptığınız kernel içerisine dahil etmiş olduğunuz ve kernel kodu ile dağıtıma uygun firmware bileşenleri içeren modüllere ait firmware dosyaları da kendilerine özgü dizin hiyerarşisi içerisinde oluşturulacaktır.
İşlemler tamamlandıktan sonra /opt/rpi/lib/modules/4.4.13-v7+
ve /opt/rpi/lib/firmware
dizinlerini incelemenizi öneririz.