4 saniye’de açılan Raspberry Pi yapalım mı? —Part 1

Metin KOC
6 min readFeb 7, 2018

--

Bu aralar uzun bir süredir tecrübe etmiş olduğum “Custom Build Linux” konusunda bir şeyler yazmaya karar verdim. Bu yazı serisini adım adım uygularsanız eğer, finalde 4 saniye açılış süresi olan, özel bir logoya sahip, üzerinde Qt5, Python vs koşturabilen bir cihaz ortaya çıkarmış olacağız. Makalenin geniş bir kitleye hitap edebilmesi adına yer yer basit komutlara da değinilecektir.

Uygulamaya geçmeden önce yardımcımız Buildroota değinmemiz gerekiyor.

Buildroot Nedir?

Buildroot, Cross Compile (Çapraz derleme) kullanarak gömülü bir sistem için eksiksiz bir Linux sistemi oluşturma sürecini basitleştiren ve otomatikleştiren bir araçtır. Bu araç otomatik olarak bir cihaz için gerekli olan kernel ve kök dosya sistemini oluşturabilir. x86 mimarisinden Arm mimarisine kadar birçok mimariyi destekleyen bu araç sayesinde piyasada bulunan birçok tek kart bilgisayar için Custom Build Linux oluşturabilirsiniz.

Başlangıç için yararlanabileceğiniz bu videoyu da izlemenizi tavsiye ederim.

#1 Hazırlık Aşaması

İşlemlerimize başlamadan önce neler gerekli bunlardan biraz bahsedelim.

1- Ubuntu Linux 14.04.x LTS veya 16.04.x LTS (Kurulu bir bilgisayar edinmelisiniz. Anlatacağım komutlar Linux’un bu sürümlerinde geçerli ve stabil olarak çalışacaktır.)

2- Raspberry Pi 3
https://www.robotistan.com/raspberry-pi-3-model-b-plus

3- SD Kart (4GB ve üzeri)
https://www.robotistan.com/sandisk-16gb-microsdhc-hafiza-karti-class10-48mbsn-okuma-hizi-kart-adaptorlu

4- SD Kart Okuyucu (Bilgisayarınızda bulunan mevcut kart okuyucu işinizi görecektir.)

#2 Derleme ortamı

Öncelikle buildroot kaynak dosyasını indirelim. Buildroot anasayfasından stabil ve LTS (Long Time Support) sürümü olan 2017.02.9 sürümünü Downloads klasörüne indirelim.

tar -xvf ~/Downloads/buildroot-2017.02.9.tar.gz -C ~/buildroot

İndirilen bu dosyayı $HOME klasörü altına çıkartalım. Bunun için üstteki komutu kullanabiliriz ve komutu gerçekleştirdikten sonra artık tüm derleme işlemlerimizi ~/buildroot klasörü altında gerçekleştireceğiz.

Derleme aşamasına geçtiğimizde buildroot birtakım kütüphanelere ihtiyaç duyacaktır. Bunları ilk olarak yüklediğimizde derleme aşamasındaki hatalardan kurtulmuş olacağız, aksi taktirde derleme aşamasında hata ayıklamak zorunda kalabiliriz. Bu kütüphaneleri de aşağıdaki komut ile yükleyebiliriz.

sudo apt-get install git build-essential libncurses5-dev

Eğer derlediğiniz makina 64 bit ise aşağıdaki kütüphaneyi de yüklemeniz gerekiyor.

sudo apt-get install lib32z1

# Default config ayarların yüklenmesi

Buildroot ile derlemeye başlamadan önce bu araca hangi sistemi kullanacağımızı, bu donanımın özelliklerinin ne olduğunu, kernel dosyalarının hangi adreste bulunduğunu, hangi yazılımları üzerine kuracağımızı vb. birçok şeyi göstermemiz gerekiyor. Bunun için bize bir güzellik yapıp default config ayarlarını bir klasör altında tutmuşlar. ~/buildroot/configs altında birçok donanımın defconfig dosyaları yer alıyor. Biz bunlardan “raspberrypi3_defconfig” dosyasını kullanacağız. Bunu aşağıdaki komut ile birlikte gerçekleştirebiliriz. Unutmayalım bu komutları aksini belirtmedikçe ~/buildroot klasörü altında çalıştıracağız.

make raspberrypi3_defconfig

Başarılı bir işlem olduğunda göreceğiniz çıktı

Bu komut sonrasında Raspberrypi 3 için birçok ayar gerçekleştirilmiş oldu. Bundan sonra yapacağınız her bir değişiklik ~/buildroot/.config dosyasına yansıyacaktır. Tüm işlemlerimiz bittiğinde bu dosyanın yedeğini alarak daha sonrasında kullanabiliriz. Yedeğimizi örnek olarak mydefault_defconfig ismiyle adlandırıp ~/buildroot/configs/ klasörüne atabilir ve aşağıdaki komutla kendi default config ayarlarımızı kullanabiliriz.

make mydefault_defconfig

# Toolchain ayarları

Yukarıda da belirttiğim gibi kendi makinemiz üzerinde Raspberry Pi için derleme işlemi gerçekleştireceğiz ve bunun ismine Cross Compiling( Çapraz derleme ) işlemi diyoruz. Toolchain’de ARM mimarisine ait Gcc derleyicisi içeren bir tool. Buildroot default’ta size bir toolchain sunuyor fakat biz daha güvenilir olduğunu düşündüğümüz Linaro firmasının toolchain’ini kullanıyoruz. Bunun için aşağıdaki komutla birlikte buildroot menüsüne giriyoruz. Bundan böyle buildroot ayarlarında değişiklik yapmak istediğimiz bu komutu kullanacağız. Menüye girdiğinizde kolayca aşina olabileceğinizi umuyorum. Menüde yön tuşlarıyla yukarı aşağı gidebilir, Enter tuşu ile sekmelerin içine girebilir, Space tuşu ile seçim işlemi gerçekleştirebilir, Sağ-Sol tuşları ile Select/Exit gibi komutlar arasında yer değiştirebilir ve aynı zamanda herhangi bir sekme üzerinde H tuşuna basarak o sekme hakkında bilgi alabilirsiniz. Ayrıca H harfinde olduğu gibi komutlar üzerindeki kırmızı harfler yardımıyla da o komutları işletebilirsiniz.

make menuconfig

Bu komutu girdiğiniz karşınıza gördüğünüz gibi bir ekran çıkacak ve toolchain ayarları için Toolchain sekmesine girmeniz gerekecek.

make menuconfig yazdığınızda karşınıza gelecek olan ekran
Default config’te Buildroot toolchain seçili durumda
External Toolchain seçiyoruz ve görüldüğü gibi Linaro ARM 2017.08 seçili duruma geliyor.

Bu ekranda ekstra olarak [*]Copy gdb server to the Target seçiyoruz, Bu sayede Raspberry Pi üzerinde remote debugging işlemi gerçekleştirebileceğiz, özellike Qt ile kod yazarken çok işimize yarayacak.

# Sistem Konfigürasyonu

Derleme sonucunda ortaya çıkacak olan sistemimizin birtakım ayarlarını ise bu sekmeden halledeceğiz. Adım adım resimlerin altında bahsedelim.

System hostname: cihazımızın networkte alacağı ismi göstermektedir. Buraya yazacağımız yazı /etc/hostname dosyasına yazılacaktır.
System banner: /etc/issue dosyasına yazılacak ve sistem açıldığında bizi karşılacayacak yazıdır. Değiştirilmesi çok önemli değildir.
Menü’de aşağılara doğru indiğinizde göreceksiniz. Default’ta gelecek olan root kullanıcı adına bir şifre vermeniz iyi olacaktır. Ben defaultta şifreyi 1 olarak verdim.
Zaman bilgisi için gerekli bir özellik, açmanız yararlı olacaktır.

# Kernel ayarları

Raspberry Pi için kernel derleme işleminin ayarlarını ise bu sekmeden gerçekleştiriyoruz. Default ayarlarında bırakmanız yeterli olacaktır.

Görüldüğü gibi kernel source olarak raspberry git hesabı üzerindeki dosyalar kullanılıyor. Dileğinizce farklı bir repository versiyonuna geçebilirsiniz.

Not: Kernel default olarak gelen Ahududu resmini kendi logomuzla değiştirme işleminden ilerki adımlarda bahsedeceğim.

# Sisteme uygulama eklemek

Sistemimiz default’ta neredeyse boş halde gelmektedir. Sadece standart linux komutlarını içermektedir. O sebeple Python, Qt gibi kütüpheneler, nano gibi text editörler gibi birçok şeyi bu sekme altından ekleyeceğiz. Sırayla eklememiz gerekenleri ele alalım.

Target Packages -> Hardware handling -> rpi-userland: Raspberry Pi için önemli bir pakettir. Raspberry Pi’ın videocore sürücüsünü kullanmanız için bu paketi mutlaka eklemeniz gerekmektedir.
Target Packages -> Graphic libraries and applications -> Qt5: Sonraki yazılarımda uygulamalarına değineceğim Qt5 kütüphanesini bu sekmeden ekleyebilirsiniz. Qt5 altında kendi paketlerini de seçmeyi unutmayın.
Target Packages -> Graphic libraries and applications -> Qt5: Derleme sırasında sistemin sizden onay beklememesi için baştan ücretsiz lisans onayını vermeniz gerekiyor.
Target Packages -> Graphic libraries and applications -> Qt5: Gui modülünü ekleyelim. Bu görsel arayüz yapmamız için gerekli bir modül. Bunun yanı sıra widgets ve opengl modülünü de eklememiz gerekiyor. Çok önemli olan eglfs support’u da eklememiz gerekiyor. Çünkü Raspberry Pi videocore eglfs destekli olarak çalışmaktadır. Bu seçimden sonra da Default graphical platform olarak eglfs yi seçmeyi unutmayalım!
Target Packages -> Graphic libraries and applications -> Qt5: Uygulamalarımız da dokunmatik ekran kullanacağımız için Tslib desteğini açmamız gerekiyor. Bir de Uart(Seriport) işlemleri gerçekleştireceğimiz için qt5serialport modülünü eklememiz gerekiyor.
Target Packages -> Libraries -> Hardware Handling -> wiringPi : Çok işimize yarayacak olan wiringPi kütüphanesini de ekleyelim.
Target Packages -> Text editors and viewers -> nano : Dosyaları düzenlerken kullanacağımız vi/vim alternatifi nano’yu ekleyelim.
Target Packages -> Networking applications -> wpa_supplicant : Son olarak kablosuz ağa bağlanmamız için bize yardımcı olarak tool wpa_supplicant’ı ekleyelim.

# Ayarların kaydedilmesi

Artık tüm ayarlarımızı yaptık ve Exit yaptığımızda bizden Yes cevabını bekliyor, eğer ki yaptığınız değişikliklerin uygulanmasını istemiyorsanız No cevabını verebilirsiniz.

Başarılı kaydetme işleminden sonra aşağıdaki gibi bir çıktı göreceksiniz.

# Derleme İşlemi

Artık derleme işlemine geçebiliriz. Bunun için make komutunu kullanacağız. Paralel derleme için -j parametresini kullanabiliriz. Eğer makineniz 4 çekirdekli ise -j4 kullanabilirsiniz.

make -j4

Derleme sırasında birçok indirme işlemi gerçekleşecek, bu sebeple internet bağlantınızın devamlı aktif olması gerekiyor. Eğer yarım kalırsa tekrar aynı komutu kullanarak devam ettirebilirsiniz.

Ayrıca diskinizde yaklaşık 10 GB boş yerinizin olması iyi olacaktır, zira Qt gibi paketler büyük paketlerdir.

Derleme işleminin süresi; bilgisayarınızın hızı, sabit diskinizin hızı, internet bağlantınızın hızına göre değişkenlik gösterecektir. Ama 1 saatten önce bitmesini beklemeyiniz :)

Derleme işlemi bittiğinde göreceğiniz ekran

# Sd Card hazırlama işlemi

Artık imajımız hazır ve derlenen imaj ~/buildroot/output/images altında sdcard.img adıyla bulunmaktadır. Raspberry Pi 3 sdcard üzerinden çalışan bir tek kart bilgisayar olduğu için imajı sdcard’a yazdırmamız gerekiyor. Bunun için Linux’taki dd komutunu kullanacağız.

Öncelikle dd komutunun parametrelerine bir göz atalım.

  • bs ( block size ) : Raspberry Pi sdcard’ları için önerilen block size 4096B(4M) tır.
  • if ( input file ) : Sdcard imajının bulunduğu dosya ve yolu
  • of ( output file ) : Sdcard’ın bulunduğu dosya ve yolu. Bunu df -h komutuyla bulabilirsiniz. Genellikle /dev/sdb olacaktır.

cd ~/buildroot/output/images

sudo dd bs=4M if=sdcard.img of=/dev/sdb && sync

# İlk açılış

Artık Raspberry Pi 3'ü ayağı kaldırma vaktidir. Yazdığımız imajla şu anda 7 saniyede açıldı sistem. Yazımızın bir sonraki bölümlerinde yapacağımız ayarlar ve yeni derlemeler ile birlikte sistemimizi 4 saniyede açılabilir hale getireceğiz. Ayrıca yukarıda da belirttiğim gibi kendi logomuzda ahududu resminin yerini alacaktır.

Keyifli çalışmalar.

Part 2 için bu linki kullanabilirsiniz.

--

--