InitRamFs, U-Boot ve Linux Çekirdeği Derlemek

Bu bilgilerin bende kullanmadıkça eskidiğini ve unutulduğunu göz önünde bulundurarak en azından kalan bilgilerimin kayda geçirilmesinde fayda sağlamayı amaçlıyorum. Öncelikle Linux çekirdeğinin temel mantığı ve yapısı hakkında yazdığım önceki yazılarıma buradan göz atabilirsiniz. Şimdi sırasıyla yukarıdaki terimleri ifade etmeye başlayalım.

InitRamFs, bir dosya dizini oluşturma tekniği veya sürecidir. Linux çekirdekleri, gzip’li bir “cpio” formatında bir arşiv içerir. Bu arşiv içerisinde sistemin kök dosya dizini vardır. Başlangıç(Boot Time) zamanında, Boot Loader(u-boot), InitRamfs’i ve çekirdeği, Ram’e yükleyip, çekirderği çalıştırır. Çekirdek, initramfs’i yüklendiği bölümde bulup onun diske yüklenebilir ve açılmış hali olan rootfs’e çevirecek initRamfs script’ini çalıştırır. Bu script, InitRamfs’i açarak dosya sistemlerini tanımlanmış disk üzerinde oluşturur. Buna “mount” işlemi diyoruz. Daha sonra da sırasıyla çalıştırılması gereken script ve servisler çalıştırılarak linux, kullanılabilir hale getirilir. Aslında Initramfs diye bir şeyin olmasının sebebi, dosya sistemi ile çekirdeğin farklı disk veya hafıza bölümlerde tutulabilir olmasını sağlamaktır. Ve aynı zamanda, çekirdek modüllerinin yazılabilmesine olanak sağlayan yine InitRamfs dir. Initramfs, belli script ve araçlarla ayrıyeten derlenebilir.

U-boot ise bir boot-loader programıdır. Aslında kişisel bilgisayarlardaki BIOS gibidir. Fakat, u-boot genellikle gömülü sistemlerde kullanılan açık kaynak kodlu bir boot-loader dir. Yani çekirdek ve Initramfs i seçilen bir hafızaya yükleyip çekirdeği çalıştırmak gibi hayati bir görevi vardır. Aslında, U-boot, sadece belirli bir mikrodenetleyici veya mikroişlemci kullanıyorken projenin sadece başında yapacağınız ama bir daha hiç elleşmeyeceğiniz bir sistem bileşenidir. Hatta gömülü linux geliştirme kartların hepsinde U-boot gömülü bir şekilde gelir. Size sadece çekirdeği, gerekli gördüğünüz hafıza bölümüne kopyalayıp cihazı açmak kalır.

Eğer kullanığınız denetleyicinin içinde bir u-boot varsa ve siz buna bir Linux işletim sistemi atmak istiyorsanız iki şeye ihtiyacınız var. Biri çekirdek, ikincisi ile InitRamfs. Öncelikle hangi linux çekirdeğini derleyeceğinize karar verdikten sonra onun reposundan ilgili kodları indirirsiniz. Bu kodların içinde çekirdeği derlemeye yarayan bir script veya makefile bulunur. Genel olarak bu script veya makefile, sizin çekirdeğinizi derleyip gzipli initramfs’i de bu derlenmiş çekirdeğe ilişkilendirir. Yani sizin initramfs için yapmanız gereken herhangi ekstra bir şey olmaz. Tabi burada sizin çekirdeği derlemek için daha önceden gereken tool-chain’e sahip olmanız gerekiyor. Tool-Chain, içinde belirli işlemci için gerekli derleyici ve kütüphane barındıran bir pakettir. Geliştirdiğiniz kart hangi işlemci mimarisine ait çip içeriyorsa onun tool-chain’i yani derleyici ve kütüphanelerini indirip bilgisayarınıza kurarsınız.

Linux çekirdeğini derlerken, size sağlanmış olan derlenme script veya make dosyası aracılığı ile ilgili sürücü ve servisleri çekirdeğe dahil edip çekirdekten çıkarabilirsiniz. Aslında bu işlem önemlidir. Çünkü her sürücü ve modül birbiri ile uyumlu olmayabiliyor. Bu da çekirdeğin çökmesine sebep olur. Doğal olarak ekleyip çıkarmanız gereken sürücü ve servisleri iyi biliyor olmanız gerekir. Aynı zamanda kendi yazıdğınız bir sürücü varsa, bu sürücüyü derleme scriptine eklendiğinden ve diğer sürücülerle uyumlu çalışcağından emin olmak gerek. Tabi bu konu bir çok altbaşlık altında toplanabilir. Şimdilik konuya giriş anlamında size yol gösterici ve anahtar noktalara değinmek istedim. Belki bu yazının devamında daha detaylı ele alacağım konular olabilir. Şimdilik kolay gelsin 🙂

Bilgi Paylaştıkça Çoğalır;
Yusuf

Yusuf

Bir Mühendis.

Önerilen makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.