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:

$ echo "n
p
1

+64M

t
c
w
" | sudo fdisk /dev/mmcblk0 && sudo mkfs.vfat /dev/mmcblk0p1

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:

kernel=kernel.img

Örnek bir cmdline.txt dosyasının içeriği ise aşağıdaki gibidir:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Ö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ış parametrelerinde console bölümünün 2 defa yer aldığına dikkat ediniz. Örneğimizde console öncelikle seri konsola atanmış, sonra bir de tty1 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 sonuncu console 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ız cmdline.txt içerisinde sıralamayı uygun şekilde değiştirebilir veya console=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:

$ sudo mkfs.ext4 /dev/mmcblk0p2
$ sudo mount /dev/mmcblk0p2 /mnt/tmp
$ sudo cp -a /opt/rpi/* /mnt/tmp/
$ sudo umount /mnt/tmp

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.

kernel=u-boot.bin

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.

mmc dev 0
fatload mmc 0:1 0x01000000 zImage
fatload mmc 0:1 0x02000000 bcm2709-rpi-2-b.dtb
setenv bootargs earlyprintk console=ttyAMA0 console=tty1 root=/dev/mmcblk0p2 rootwait
bootz 0x01000000 - 0x02000000

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ı:

reading uboot.env

** Unable to read "uboot.env" from mmc0:1 **
Using default environment

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:

arch=arm
baudrate=115200
board=rpi_2
board_name=rpi_2
bootargs=earlyprintk console=ttyAMA0 console=tty1 root=/dev/mmcblk0p2 rootwait
bootcmd=run mmcboot
mmcboot=setenv devnum 0; mmc dev 0; fatload mmc 0:1 ${kernel_addr} zImage; fatload mmc 0:1 ${fdt_addr} ${fdtfile}; bootz ${kernel_addr} - ${fdt_addr}
bootdelay=2
cpu=armv7
fdt_addr=0x2000000
fdtfile=bcm2709-rpi-2-b.dtb
kernel_addr=0x1000000
loadaddr=0x00200000
scriptaddr=0x00000000
soc=bcm283x
stderr=serial,lcd
stdin=serial,lcd
stdout=serial,lcd
usbethaddr=b8:27:eb:4c:66:85
vendor=raspberrypi

Ardından mkenvimage komutunu u-boot kaynak kod ana dizininde bulunduğunuzu varsayacak olursak aşağıdaki gibi çalıştırın:

$ tools/mkenvimage -s 0x4000 -o /tmp/uboot.env /tmp/uboot.env.txt

Ö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.

https://www.raspberrypi.org/downloads/

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.

dd bs=4M if=2015-05-05-raspbian-wheezy.img of=/dev/sdb

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.

https://www.raspberrypi.org/downloads/

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.

results matching ""

    No results matching ""