Gömülü Linux
  • Giriş
  • Linux Çekirdeği
    • Gömülü Sistemlerdeki Kullanımı
    • Geliştirme Süreci ve Versiyonlar
    • Kod Sözdizim Rehberi
    • Konfigürasyon Süreci ve Kbuild Sistemi
    • Derleme ve Çapraz Derleme
    • Initramfs İmajının Eklenmesi
    • U-boot İmajı Haline Getirilmesi
  • Gömülü Sistemlerde Boot Yükleyiciler
    • U-boot
    • RedBoot
    • ARM Mimarisinde Açılış Süreci
  • Linux Açılış Süreci
    • Kernel Açılış Süreci
    • Kullanıcı Kipine Geçiş - Init Süreci
  • Kök Dosya Sistemi Oluşturma
  • Initramfs İle Erken Kullanıcı Kipi
  • Devtmpfs Dosya Sistemi
  • NfsRoot Çalışma Yöntemi
  • Çapraz Derleme ve Gerekli Ekipmanlar
  • NOR, NAND, eMMC ve Flash Tabanlı Depolama
  • Memory Technology Device - MTD Katmanı
  • Unsorted Block Images - UBI Katmanı
  • Gömülü Sistemlerde Kullanılan Dosya Sistemleri
    • JFFS2 Dosya Sistemi
    • YAFFS2 Dosya Sistemi
    • UBIFS Dosya Sistemi
    • Cramfs Dosya Sistemi
    • Squashfs Dosya Sistemi
    • Minix Dosya Sistemi
    • FAT Dosya Sistemi
    • Ext2,3,4 Dosya Sistemi
  • Watchdog Kullanımı
  • CPU Frequency Scaling
  • Buildroot
  • Android Platformu
    • Geliştirme Ortamının Hazırlanması
    • İnşa Süreci
  • Sistem Çağrıları
  • I2C Protokolü
    • I2C Protokolünün Tanıtılması
    • Linux Altında I2C İşlemleri
    • Board Seçimi ve İlk İşlemler
    • Sıcaklık Sensörünün Seçilmesi
    • Sıcaklık Değerinin Yazılımsal Olarak Elde Edilmesi
  • Strace Kullanımı
  • GNU Build Sistemi Araçları
    • Make
    • Autoconf, Automake
  • Orange Pi Zero
    • Orange Pi Zero Teknik Özellikleri
    • Gerekli Araçların Elde Edilmesi
    • U-boot Derleme Süreci
    • Kernel Derleme Süreci
    • Wifi Desteği - Problemli Senaryo Örneği
    • Dosya Sisteminin Hazırlanması
    • SD Kartın Hazırlanması
    • Cihazın Açılması
  • Raspberry Pi
    • Raspberry Pi 2 Teknik Özellikleri
    • Açılış Süreci
    • Gerekli Araçların Elde Edilmesi
    • Kernel Derleme Süreci
    • U-boot Derleme Süreci
    • Dosya Sisteminin Hazırlanması
    • Cihazın Açılması
    • NFS Root Çalışma
    • Sistem Konfigürasyonu
    • Raspberry Pi 3
  • Board Spesifik Kılavuzlar
    • Hawkboard
    • Olimex A20
    • TI DM6446 EVM
    • BeagleBoard
    • BeagleBoneBlack
    • Savage Board
  • EKLER
    • Seri Konsol Kullanımı
    • TFTP Sunucu Kurulumu
    • NFS Sunucu Kurulumu
    • TI işlemcilerinde DSP kullanımı
      • C6Run
      • DSP Testi
    • Ubuntu Sanal Makine Performansı
Powered by GitBook
On this page
  • Dosya Sisteminin Hazırlanması
  • Busybox
  • Temel Kütüphanelerin Taşınması
  • Kernel ve DTB Dosyasının Taşınması
  • Kernel Modüllerinin Taşınması
  • Açılış Betiğinin Hazırlanması

Was this helpful?

  1. Orange Pi Zero

Dosya Sisteminin Hazırlanması

Dosya Sisteminin Hazırlanması

Bu bölümde busybox ile temel bir dosya sisteminin nasıl hazırlandığına bakacağız, benzer anlatım bir sonraki konu olan Raspberry Pi bölümünde de bulunmaktadır. Dosya sistemi hazırlanmasıyla ilgili daha detaylı bilgiler için ise Kök Dosya Sistemi Oluşturma başlıklı bölümü inceleyebilirsiniz.

Biz burada konunun bütünlüğünü korumak için kullandığımız derleme seti ile temel bir dosya sistemini /opt/orangepi/RootFS/ altında oluşturacağız.

Busybox

Busybox kodlarını aşağıdaki gibi indirip derleyebiliriz. İstenirse öngörülen ayar dosyası make defconfig işlemi sonrasında make menuconfig ile özelleştirilebilir.

$ cd /opt/orangepi
$ git clone git://busybox.net/busybox.git
$ cd busybox/
$ make defconfig
$ make CROSS_COMPILE=arm-linux-gnueabihf-

Bu işlem sonucunda busybox dosyası oluşacaktır. Bu aşamadan sonra gerekli sembolik linkler oluşturulmadır. Bu işlem için Makefile dosyası install isimli bir hedef barındırmaktadır. Bu işlemden önce dosya sistemini kendi bilgisayarımızda nerede oluşturacağımıza karar vermeliyiz. Biz bu amaçla /opt/orangepi/RootFS dizinini kullanacağız. İlk olarak bu dizin altındaki dosyaların sahibi olarak kendi kullanıcımızı tanımlayalım.

$ sudo chown -R $USER /opt/orangepi/RootFS/

Derleme işleminden sonra make install dediğimizde _install adlı bir dizin altında, ihtiyaç duyduğumuz sembolik linkleri barındıran, /bin, /sbinve /usr dizinleri oluşacaktır. CONFIG_PREFIX değişkenini kullanarak bu dizinleri, _install dizini yerine, RootFS altında aşağıdaki gibi oluşturabiliriz.

$ make CROSS_COMPILE=arm-linux-gnueabihf- CONFIG_PREFIX=/opt/orangepi/RootFS install

Bu işlem sonucunda RootFS dizininde aşağıdaki dosyalar oluşmuş olmalıdır.

drwxrwxr-x 2 serkan serkan 4096 Ağu 17 18:24 bin
lrwxrwxrwx 1 serkan serkan   11 Ağu 17 18:24 linuxrc -> bin/busybox
drwxrwxr-x 2 serkan serkan 4096 Ağu 17 18:24 sbin
drwxrwxr-x 4 serkan serkan 4096 Ağu 17 18:24 usr

Temel Kütüphanelerin Taşınması

Cihaz üzerinde çalışacak busybox ve diğer uygulamalar libc ve libm gibi birtakım temel kütüphanelere ihtiyaç duymaktadır. Bu kütüphaneleri kullandığımız derleyici setinden temin edeceğiz.

Derleyici, derleme esanasında kullandığı hedef sisteme ait kütüphane ve başlık dosyalarını sysroot denilen bir dizin yapısında saklamaktadır. Bu dizin yapısını aşağıdaki gibi öğrenebiliriz.

$ arm-linux-gnueabihf-gcc --print-sysroot

Bu dizinden yapacağımız kopyalama işlemlerini basitleştirmek için bu dizini gösteren bir çevre değişkenini aşağıdaki gibi tanımlayabiliriz.

SYSROOT=$(arm-linux-gnueabihf-gcc --print-sysroot)

RootFS altında /lib dizinini oluşturduktan sonra ilk planda ihtiyaç duyduğumuz kütüphaneleri aşağıdaki gibi kopyalayabiliriz.

$ mkdir -p /opt/orangepi/RootFS/lib
$ cp $SYSROOT/lib/libc.so.6 /opt/orangepi/RootFS/lib/
$ cp $SYSROOT/lib/libm.so.6 /opt/orangepi/RootFS/lib/
$ cp cp $SYSROOT/lib/ld-linux-armhf.so.3 /opt/orangepi/RootFS/lib/

Kernel ve DTB Dosyasının Taşınması

Daha önce derlediğimiz kernel imajını ve dtb dosyasını RootFS altında /boot dizinine aşağıdaki gibi taşıyabiliriz.

$ mkdir /opt/orangepi/RootFS/boot
$ cd /opt/orangepi/RootFS
$ cp ../linux-stable/arch/arm/boot/zImage boot/
$ cp ../linux-stable/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dtb boot/

Kernel Modüllerinin Taşınması

Kernel modülleri dosya sistemi üzerinde /lib/modules/kernel-version şeklinde uygun dizin yapısında bulunmalıdır. Kopyalama işlemini aşağıdaki gibi yapabiliriz.

$ cd /opt/orangepi/linux-stable/
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=../RootFS modules_install

Bu işlem sonrasında RootFS altında lib/modules/4.13.0 gibi bir dizin oluşmalıdır.

Açılış Betiğinin Hazırlanması

İşletim sistemi çekirdeği açılış sürecini tamamladığında, dosya sistemi üzerinde bir takım öntanımlı dizinlere bakarak, init isimli bir uygulamayı aramaktadır. İlk çalışan uygulama olan init /etc/inittab isimli bir dosyayı okuyarak gerekli işlemleri yapmaktadır.

İlk olarakRootFS altında dosya sistemi için temel dizinleri aşağıdaki gibi oluşturalım.

$ cd /opt/orangepi/RootFS
$ mkdir etc dev proc sys tmp var

Basit bir inittab dosyasının içeriği aşağıdaki gibi olabilir.

# /etc/inittab

::sysinit:/etc/rcS

::askfirst:-/bin/sh

::shutdown:/bin/sync
::shutdown:/bin/umount -a -r

inittab içerisinde sysinit ile başlayan satırda rcS açılış betiğinin çalıştırıldığını görüyoruz. Açılışa ilişkin temel işlemler bu betik içinde yapılmaktadır. Temel bir açılış betiği aşağıdaki gibi olabilir.

#!/bin/sh

export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

mount -t proc   proc   /proc
mount -t sysfs  sysfs  /sys
mount -t tmpfs -o mode=1777 tmpfs  /tmp 

mkdir /dev/pts
mount -t devpts -o gid=5,mode=620 devpts /dev/pts 

mkdir /dev/shm
mount -t tmpfs -o mode=0777 tmpfs /dev/shm 

mount -t tmpfs -o mode=0755,nosuid,nodev tmpfs /var 

ifconfig lo 127.0.0.1 up 
route add -net 127.0.0.0 netmask 255.0.0.0 gw 127.0.0.1 lo 

mount -o remount -o rw /

Son durumda RootFS dizinimizin içeriği aşağıdaki gibi olmalıdır.

$ tree  -L 1 RootFS/
RootFS/
├── bin
├── boot
├── dev
├── etc
├── lib
├── linuxrc -> bin/busybox
├── proc
├── sbin
├── sys
├── tmp
├── usr
└── var

Bu aşamadan sonra SD kartın hazırlanması kısmına geçebiliriz.

PreviousWifi Desteği - Problemli Senaryo ÖrneğiNextSD Kartın Hazırlanması

Last updated 5 years ago

Was this helpful?