ARM Mimarisinde Açılış Süreci
ARM mimarisinde açılış süreci aşağıdaki sıra ile gerçekleşir:
Boot ROM üzerinden dahili kodun çalışması
Birinci harici boot yükleyicinin çalışması (
X-loader
)Daha gelişmiş ikinci boot yükleyicinin çalışması (
U-boot
)Linux kernel'ın çalışmaya başlaması
Dahili Boot ROM adresi ilgili donanım için sabit olacaktır. Buradaki kodun temel amacı, birinci harici boot yükleyici kodunu yüklemektir
Bu noktada çoğu zaman donanım üzerinde, birinci harici boot yükleyicinin hangi ortamdan yükleneceğine dair (seri port, NAND flash, SD kart vb.) boot konfigürasyon pin'leri sağlanır.
Boot Yükleyicinin Görevleri: Bellek
Sistemdeki bellek alanlarının tespit edilmesi ve ilklendirilmesi Linux çekirdeğinden önce boot yükleyici uygulaması tarafından yapılmalıdır.
Bu işlem için bir takım otomatik algılama rutinleri, özel algoritmalar veya ilgili donanım için sabit değerler bulunabilir, tamamen boot yükleyici uygulamanın geliştirimine göre değişir.
Boot Yükleyicinin Görevleri: Kernel
Linux kernel imajı, boot yükleyici tarafından belleğe yüklenmelidir.
Boot yükleyici uygulama ne kadar yetenekli ise, o kadar farklı şekilde Linux kernel imajı yüklenebilir. Örneğin, boot yükleyici uygulamada TCP ve HTTP protokolü destekleniyorsa, herhangi bir web sunucuda barındırılan kernel imajı da download edilip belleğe aktarılabilir.
Öte yandan boot yükleyici uygulamanın olabildiğince küçük ve basit olması beklenir. TCP gibi kompleks bir protokolün dahil edilmesi iyi bir fikir değildir.
Pratik kullanımda boot yükleyiciler genellikle kernel imajını NAND flash bellekten, SD Kart üzerinden, seri porttan, network üzerindeki bir TFTP sunucudan veya USB disk üzerinden okurlar. Bu desteklerden bir veya birden fazlası kullandığınız boot yükleyici içerisinde aynı anda bulunabilir.
Boot Yükleyicinin Görevleri: Initial Ramdisk
Linux tabanlı sistemde, iki aşamalı initrd
açılış yöntemi kullanılıyor ise, initrd imajını barındıran dosyanın da bulunduğu ortamdan belleğe yüklenmesi boot yükleyici uygulamanın görevleri arasındadır.
Tıpkı Linux imajını yüklerken olduğu gibi, boot yükleyici uygulama içerisindeki destekler, initrd imajının yüklenme opsiyonlarını da belirleyecektir
Oldukça benzer konseptler olmasına rağmen bu durum initramfs
imajıyla karıştırılmamalıdır. Initramfs imajı doğası itibariyle zaten kernel imajının sonuna eklenmiş olduğundan, ayrıca yüklenmesine ihtiyaç bulunmamaktadır. initrd
imajının ise boot yükleyici tarafından yüklenip, yüklendiği adresin kernel tarafına bildirimi şarttır.
Boot Yükleyicinin Görevleri: Kernel Parametreleri
Boot yükleyicinin bir diğer temel görevi, Linux çekirdeğine parametrelerin geçirilmesini sağlamaktır. Bu işlem için ATAGS
sistematiği kullanılır
Fiziksel belleğin 0x100
offsetinden başlayarak ATAGS veriyapıları yerleştirilir. Başlangıç adresi aynı zamanda Linux imajını çalıştırmaya başlamadan önce R2
yazmacına kaydedilecektir.
ATAG_CORE
tipi ile başlayıp ATAG_NONE
tipine kadar birbirini takip eden değerler kullanılır.
ATAGS
Veri Tipleri
ATAGS
Veri TipleriTag
Değer
Açıklama
ATAG_NONE
0x00000000
Tag listesinin sonunu gösterir
ATAG_CORE
0x54410001
Liste başlangıcını gösterir
ATAG_MEM
0x54410002
Bellek üzerinde kullanılabilecek alanları gösterir
ATAG_VIDEOTEXT
0x54410003
VGA metin konsoluyla ilgili parametreleri gösterir
ATAG_RAMDISK
0x54410004
Ramdisk kullanımına ilişkin parametreleri gösterir
ATAG_INITRD2
0x54420005
Initrd imajının nerede bulunacağını gösterir
ATAG_SERIAL
0x54410006
64 bit board seri numarasını tutar
ATAG_REVISION
0x54410007
32 bit board versiyon numarasını tutar
ATAG_VIDEOLFB
0x54410008
Vesa frame buffer için değerleri tutar
ATAG_CMDLINE
0x54410009
Kernel tarafına aktarılacak komut satırı argümanlarını tutar
ATAGS
Veri Tipleri
ATAGS
Veri TipleriATAGS veri tipleri aşağıdaki gibi başlık ve veri alanlarından oluşmaktadır
Geleneksel Boot Yöntemi
Kernel 3.8 ve sonrasında kullanılmaya başlanan Device Tree modeliyle çalışanların dışında kalan tüm sistemler, geleneksel yöntemle boot sürecini gerçekleştirirler.
Bu yöntemde, her board ailesi için değil, her bir board için özgün bir ID
alınması gereklidir. Bu ID değeri ARM mimarisi için Linux kernel tarafındaki ana sorumlu olan Russell King üzerinden kayıt ettirilmelidir. Güncel listeye http://www.arm.linux.org.uk/developer/machines adresinden ulaşabilirsiniz. 2014 sonu itibariyle 4981 adet board kaydı bulunmaktadır
Board Numarasının Çekirdeğe Aktarımı
Bootloader uygulamasının, özgün board numarasını R1
yazmacına geçmesi zorunludur.
Linux çekirdeği, boot sürecinde bu yazmaca özgün board numarasının yazıldığını varsayar ve tüm akış bu şekilde ilerler.
Linux çekirdeğinin derlenmesi aşamasında da R1
yazmacındaki özgün makine numarasıyla ilgili donanım spesifik kısımların seçilmiş ve çekirdek içerisine dahil edilmiş olması zorunludur. Aksi takdirde aşağıdaki gibi bir hata mesajı alınacaktır:
Uncompressing Linux... done, booting the kernel. Error: unrecognized/unsupported machine ID (r1 = 0x000007d9).
Özet: Boot Süreci
Boot ROM üzerinden dahili kod çalışır ve birinci boot yükleyici yüklenir (
X-loader
)X-loader tarafından ek ilklendirmeler yapılır ve daha gelişkin ikincil boot yükleyici yüklenir (
U-boot
)Boot yükleyici tarafından Linux çekirdeği bulunduğu ortamdan belleğe aktarılır
Eğer initrd imajı kullanılıyorsa, aynı şekilde initrd imajı da belleğe aktarılır
Sisteme ait özgün numara,
R1
yazmacına yazılırInitrd imajının bellekteki yeri ve uzunluğu, kernel açılış parametreleri vb. parametreler için fiziksel belleğin başlangıcına yakın yerlerde
ATAGS
veri yapıları oluşturulurATAGS
veri yapısının başlangıç adresiR2
yazmacına yazılır (Genellikle 0x100)Bellekteki kernel imajındaki ilk makine kodu çalıştırılır
Device Tree
Yöntemi
Device Tree
YöntemiDevice Tree yönteminde (detaylar için ilgili konu başlığını inceleyiniz) açılış sürecinde bir miktar farklılık bulunmaktadır.
Bu modelde her bir board versionu için özgün bir numara belirtmek yerine, her bir board ailesi için özgün bir Device Tree numarası bulunur.
Geleneksel modele oranla çok daha az numara kullanılır zira bir DT modeli ile bir çok farklı board versiyonu adreslenebilir.
İlgili DT veri yapısı boot yükleyici tarafından belleğe aktarılır ve adresi R2
yazmacına yazılır
Bu yöntemi desteklemeyen eski boot yükleyicileri için Linux kernel içerisinde CONFIG_ARM_APPENDED_DTB
özelliği kullanılarak DT veri yapısı kernel imajının sonuna eklenebilir
Last updated
Was this helpful?