Açılış Süreci
Raspberry Pi için ARM işlemci ana işlemci olarak değil daha çok bir yardımcı işlemci (coprocessor) olarak tasarlanmıştır. Ana işlemci ise VideoCore grafik işlemcisidir. Bu sebeple cihazın açılış süreci gömülü cihazların genel olarak izlediği yoldan bir miktar ayrışmaktadır.
Tipik bir ARM işlemcili cihaz (kitabımızda incelediğimiz diğer örnek cihazlar dahil olmak üzere) açılış sürecinde genel olarak aşağıdaki adımları izlemektedir:
- Cihaza enerji verildikten sonra ARM işlemci çalışır.
- ARM işlemci, ilk olarak, bünyesindeki ROM bellekteki ilk önyükleyici (ROM bootloader) çalıştırır.
- ROM bootloader kendinden sonraki işletim sistemini yüklemekten sorumlu önyükleyiciyi yükler.
- İşletim sistemi belleğe yüklenir ve ARM işlemci tarafından çalıştırır.
Cihaza enerji verilmesinden işletim sisteminin yüklenmesine kadar geçen tüm aşamalarda ARM işlemcinin rol aldığını görmekteyiz. Raspberry Pi için ise açılış süreci temel olarak aşağıdaki gibidir.
- Cihaza enerji verildiğinde ARM işlemci reset modundadır, yani aktif olarak çalışmamaktadır.
- ROM bellekteki ilk önyükleyici (first-stage bootloader, ROM bootloader) VideoCore GPU içindeki küçük bir RISC (Reduced Instruction Set Computer) işlemci tarafından çalıştırılır.
- İlk önyükleyici tarafından SD karttaki FAT32 boot bölümü mount edilir ve ikinci önyükleyici (second-stage bootloader) bootcode.bin, GPU içindeki L2 cache'e çekilerek, çalıştırılır. Bu aşamada ARM işlemci hala reset durumundadır.
- İkinci önyükleyici tarafından aslında GPU firmware'i olan son önyükleyici (third-stage bootloader) start.elf yüklenir ve çalıştırılır. Bu aşamada ekrana gökkuşağı logosu bastırılmaktadır.
- start.elf tarafından SD kart boot bölümündeki config.txt dosyası okunur. Bu ayar dosyası ile bazı sistem ayarları değiştirilebilmekte (ARM ve GPU frekansları, RAM paylaşımları) ayrıca önyükleyiciye müdahale edilebilmektedir.
- SD kart boot bölümünde dtb (bcm2709-rpi-2-b.dtb) ve kernel (kernel.img) dosyalarının bulunması durumunda start.elf tarafından sırasıyla 0×100 ve 0×8000 adreslerine yüklenmektedir. Ayrıca cmdline.txt dosyasının bulunması halinde dosya içeriğindeki komut satırı argümanları çekirdeğe geçirilmektedir.
- Son olarak ARM işlemci reset durumundan çıkarılır ve işletim sistemini çalıştırması sağlanır.
Cihaza enerji verilmesinden, işletim sisteminin çalıştırılmasına kadar geçen süreç aşağıdaki diagramda özetlenmiştir.
Bu sürece diğer cihazların açılış sürecinden aşina olduğumuz u-boot önyükleyicisinin karışmadığını görmekteyiz, kernel GPU firmware'i start.elf tarafından yüklenmekte ve ardında ARM işlemci reset durumundan çıkarılmaktadır. config.txt dosyasına müdahale ederek start.elf tarafından işletim sistemi çekirdeğinin değil u-boot önyükleyicisinin yüklenmesini sağlayabilir, bu sayede sistemimizi u-boot üzerinden açabiliriz. Bu işlemin nasıl yapıldığına daha sonra değineceğiz.