Cihazın Açılması
Raspberry Pi 2 yalnız microSD üzerinden açılabilmektedir. Bu sebeple SD kart üzerinde, biri boot dosyaları diğeri ise dosya sistemi için gerekli, iki adet bölümlendirme (partition) bulunmalıdır. FAT32 formatlı boot bölümlendirmesinde önyükleyiciler, çekirdek ve gerekli diğer dosyalar bulunurken, diğer bölüm cihazın tanıyabileceği formatta bir dosya sistemini içermektedir.
SD kart üzerine gerekli dosyaları kendimiz yazabileceğimiz gibi Raspberry Pi desteği olan bir dağıtımı da kullanabiliriz. Şimdi sırayla bu yöntemlere bakalım.
SD Karta Gerekli Dosyaların Kopyalanması
İlk olarak, SD kart üzerinde boot dosyalarını alabilecek büyüklükte (FAT32 dosya sisteminde minimum disk bölümü 32MB olabilir bununla birlikte boot yükleyici FAT16 ile de çalışmaktadır) bir FAT32 bölümü ve dosya sistemi için ext4 bölümü oluşturmalıyız. Bu amaçla Linux altında fdisk veya gparted gibi uygulamaları kullanabilirsiniz.
Linux altında SD kartları /dev/mmcblk0
, /dev/mmcblk1
vb. şeklinde tanınmaktadır. İlk tanına SD kart üzerinde oluşturularak birinci disk bölümünün aygıt ismi de /dev/mmcblk0p1
şeklinde olacaktır (0 değil 1'den başladığına dikkat ediniz).
Disk bölümlendirmek genel olarak konumuzun dışında olsa da, örnek olması açısından aşağıda disk bölümlendirme tablosu (partition table) tamamen boş olan ve /dev/mmcblk0
şeklinde algılanmış bir SD kart için gereken fdisk
komutlarının pipe yöntemiyle verilip FAT32 türünde formatlanması gösterilmektedir:
FAT32 boot bölümünde asgari aşağıdaki dosyalara ihtiyaç duymaktayız.
Dosya
Görevi
bootcode.bin
Alt seviye önyükleyici
start.elf
GPU firmware
fixup.dat
SDRAM'in GPU ve CPU arasında bölümlendirilmesinde kullanılıyor
kernel.img
Kernel imajı
config.txt
start.elf tarafından okunan ayar dosyası
cmdline.txt
Kernel'a geçirilecek komut satırı argümanlarını barındıran dosya
bcm2709-rpi-2-b.dtb
Kernel derleme aşamasında üretilmiş olan Device Tree Block dosyası
Daha önce de söylediğimiz gibi config.txt dosyası ile sistem ayarları değiştirilebilmekte (ARM ve GPU frekansları, RAM paylaşımları) ayrıca önyükleyiciye müdahale edilebilmektedir. Bu dosyanın içeriğini BIOS ayarlarına benzetebiliriz. config.txt içinde yüklenecek çekirdeğe ilişkin herhangi bir atıf bulunmadığı sürece start.elf, kernel.img dosyasını yüklemekte ve ARM işlemciyi reset modundan çıkarmaktadır. Çekirdek imajı olarak önyükleyicilerle beraber gelen kernel.img dosyasını kullanabileceğiniz gibi daha önce derlediğimiz zImage dosyasını da kernel.img olarak kopyalayıp kullanabilirsiniz.
Örnek bir config.txt
içeriği aşağıdaki gibidir:
Örnek bir cmdline.txt
dosyasının içeriği ise aşağıdaki gibidir:
ÖNEMLİ NOT: Raspberry Pi için diğer kaynaklarda da yukarıdaki gibi bir örnek
cmdline.txt
dosyası ile karşılaşacaksınız. Burada verilen çekirdek açılış parametrelerindeconsole
bölümünün 2 defa yer aldığına dikkat ediniz. Örneğimizdeconsole
öncelikle seri konsola atanmış, sonra bir detty1
aygıtı üzerine atanmış. Bu şekilde boot edilen bir çekirdek konsola gidecek mesajları her iki aygıta da gönderir (örneğimizde seri port ve HDMI üzerindeki tty konsolu) ancak sonuncuconsole
parametresi olarak hangi aygıt belirtilmişse sadece oradan girdi alır. Yani yukarıdaki argümanlarla boot edecek olursanız konsol çıktıları hem seri portta hem de bağlı ise HDMI monitorde görünecek, Linux açıldıktan sonra ise seri konsoldan giriş yapamayacak, sistemdeki USB portuna takacağınız bir USB klavye ile giriş yapmak durumunda kalacaksınız. Giriş işlemleri için de seri konsolu kullanmak istiyorsanızcmdline.txt
içerisinde sıralamayı uygun şekilde değiştirebilir veyaconsole=tty1
bölümünü tamamen kaldırabilirsiniz.
Temel bir dosya sisteminin nasıl oluşturulduğunu kitabımızın Kök Dosya Sistemi Oluşturma bölümünde bulabilirsiniz.
Kök Dosya Sisteminin SD Karta Aktarımı
Cihazı SD kart üzerindeki bir kök dosya sistemi ile açmak için, önceki aşamalarda hazırlamış olduğumuz kök dosya sistemini SD kartın ilgili bölümüne kopyalamamız gerekiyor.
Bunun için eğer henüz yoksa fdisk
vb. bir disk bölümlendirme aracı ile SD kart üzerinde Linux tipinde (83) ikinci bir disk bölümü oluşturmalı, bu bölümü kullanmak istediğimiz dosya sisteminin türüne göre biçimlendirmeli ve sonrasında ilgili bölümü sistemimize mount edip hazırlamış olduğumuz kök dosya sistemini bu alana kopyalamalıyız.
Disk bölümünün /dev/mmcblk0p2
ismiyle oluşturduğumuzu ve kök dosya sistemini /opt/rpi
dizininde oluşturduğumuzu, geçici mount dizini olarak da /mnt/tmp
'yi kullanacağımızı varsayarsak komutlarımız şu şekilde olacaktır:
Artık sistemimiz SD kart üzerindeki kök dosya sistemi üzerinden açılmak için hazır.
Cihazın U-Boot Üzerinden Açılması
config.txt içine aşağıdaki gibi bir giriş eklediğimizde start.elf kernel yerine u-boot'u yükleyecek ve sonrasına ARM işlemciyi çalıştıracaktır. Öncesinde, SD kartın boot bölümüne daha önce derlediğimiz zImage ve u-boot.bin dosyalarını kopyalamalıyız.
u-boot komut satırına düştükten sonra çekirdek ve ilgili dtb dosyasını belleğin güvenli bir alanına çekip, çekirdeğe kök dosya sistemi ve konsolla ilgili değerleri geçirdikten sonra aşağıdaki gibi çalıştırabiliriz.
DİKKAT: 20 Haziran 2015 itibariyle Raspberry Pi 2 modeli için hazırlanmış u-boot uygulaması ile SD kart üzerinden okuma işlemi 80 KB/s gibi oldukça düşük bir hızda çalışmaktadır. Bu nedenle çekirdek imajının yüklenmesi 40-50 saniye arasında zaman almakta olup yakın gelecekte sorunun giderilmiş olması beklenmektedir.
U-Boot Ortam Değişkenlerinin Düzenlenmesi
Bir önceki örneğimizde u-boot konsolu üzerinden komutlar girerek sistemin açılması gösterildi. Eğer her defasında komutları girmek yerine öntanımlı açılışın bu şekilde gerçekleşmesini istiyorsak, u-boot ortam değişkenlerini düzenleyerek non-interactive açılış sürecini yönlendirebiliriz.
Buraya kadar olan çalışmalarınızda dikkatinizi çekti ise, u-boot ilk açılırken aşağıdaki gibi mesajlar çıkmaktaydı:
Görüleceği üzere ilk çalıştırmada uboot.env
adlı bir dosya aranmakta ve bulunamadığı için öntanımlı ortam değişkenlerinin kullanılacağına dair bilgi verilmektedir.
uboot.env
dosyasının formatı basit olmakla birlikte, bir metin dosyası olarak hazırlanması mümkün değildir (NULL değerler ve padding yapılması gerekecektir)
Bununla birlikte u-boot kodu içerisindeki tools
dizini altında mkenvimage
adlı yardımcı bir uygulama çıkmaktadır. Bu uygulama ile istenen uboot.env
dosyasını oluşturabiliriz.
Öncelikle istediğimiz ortam değişkenlerini bir metin dosyasını yazmalıyız. Bunun için aşağıdaki satırları /tmp/uboot.env.txt
adlı yeni bir geçici dosya oluşturup içerisine kopyalayın:
Ardından mkenvimage
komutunu u-boot kaynak kod ana dizininde bulunduğunuzu varsayacak olursak aşağıdaki gibi çalıştırın:
Örneğimizdeki -s
parametresi oluşacak dosyanın boyutunu belirlememizi sağlamaktadır. Dosyanın 4 KB ve katları şeklinde olması beklenir. Biz burada 16 KB (0x4000) şeklinde belirtmiş olduk. Ortam değişkenlerimiz bu kadar yer kaplamıyor, kalan alan 0xFF
ile doldurulacak ve uygun checksum değeri hesaplanacaktır.
İşlem bitiminde oluşan uboot.env
dosyasını SD kartımızın u-boot'u barındıran ilk bölümüne kopyaladığımızda bir sonraki açılışta yeni değerlerin aktifleştiğini (printenv
komutuyla u-boot ekranında teyit edilebilir) göreceksiniz.
Cihazın Bir Dağıtım Üzerinden Açılması
Raspberry Pi, Raspbian, Ubuntu MATE, Ubuntu Snappy Core, OpenELEC ve RISC OS olmak üzere birçok sürüm tarafından desteklenmektedir. Biz incelememizde Debian tabanlı Raspbian dağıtımını kullanacağız. Aşağıdaki bağlantıdan Rasbian veya başka bir dağıtımı indirebilirsiniz.
Sonrasında elde ettiğimiz 2015-05-05-raspbian-wheezy.zip dosyasını açmalı ve işletim sistemi imajını SD karta yazmalıyız. Sisteminizde SD karta ilişkin dosya düğümünü belirledikten sonra yazma işlemini dd ile yapabilirsiniz. Sistemimiz için örnek bir yazma aşağıdaki gibidir.
Not: sudo fdisk -l ile sisteminizdeki bölümlendirme tablosunu listeleyebilirsiniz.
Yazma işleminden önce SD kartınızın dosya sisteminize mount edilmemiş olduğundan emin olunuz.
Not: dd ile yapılan kopyalama işleminin ilerleyişini izlemek için başka bir terminalde aşağıdaki komutu girebilirsiniz.
pkill -USR1 -n -x dd
Bu işlem sonrasında SD kartınızda daha önce bizim elle kopyaladığımız dosyaları da içeren bir boot bölümü ve dosya sistemine ilişkin ikinci bir bölüm oluşmuş olmalıdır. SD kartı cihaza takıp çalıştırdığımızda işletim sistemi açılmalıdır.
Benzer işlem Raspberry Pi işletim sistemi yükleyicisi NOOBS ile de yapılabilmektedir. NOOBS, Raspbian dağıtımının içermekte ayrıca internet üzerinden indirdiği başka dağıtımları da cihaz üzerine kurabilmektedir. NOOBS yükleyicisini yine aşağıdaki adresten indirip, .zip dosyasını açtıktan sonra bir önceki adımda yaptığımız gibi dd ile SD karta yazabilirsiniz.
SD kartı cihaza takıp enerji verdiğinizde cihaz recovery modda açılacaktır. Cihazı HDMI üzerinden bir ekrana bağladıktan sonra, GUI üzerinden istediğiniz dağıtımı seçebilir ve cihaza yükleyebilirsiniz.
Last updated
Was this helpful?