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
  • Start.elf Üzerinden NFS Root Açılışı
  • U-Boot Üzerinden NFS Root Açılışı
  • Kernel ve FDT'nin Ağ Üzerinden Yüklenmesi
  • Kernel ve FDT'nin SD Kart Üzerinden Yüklenmesi

Was this helpful?

  1. Raspberry Pi

NFS Root Çalışma

Kök dosya sisteminin cihazın üzerindeki bir depolama biriminde değil de ağ üzerindeki bir NFS paylaşımında yer aldığı senaryo NFS Root olarak adlandırılmakta olup, NFS Root Çalışma başlıklı bölümde ayrıntılarıyla işlenmiştir.

Bu bölümde Raspberry Pi 2 özelinde NFS Root çalışma detaylarını inceleyeceğiz.

NFS Root çalışma yöntemleriyle ilgili destekler (CONFIG_ROOT_NFS=y)kernel imajı içerisine statik olarak eklenmiş olmalıdır.

Start.elf Üzerinden NFS Root Açılışı

Raspberry Pi cihazlarında GPU tarafından yüklenen bootcode.bin ve start.elf adlı boot yükleyiciler bulunmaktadır. Geleneksel u-boot yükleyicisi ile karşılaştırıldığında oldukça farklı olan bu yükleyiciler, nfs root çalışma senaryosu için benzer imkanlar sağlamaktadır.

Cihazla birlikte gelen start.elf boot yükleyicisi, cmdline.txt adlı bir dosya olması halinde burada yer alan kernel commandline parametrelerini ATAGS yöntemiyle çalıştırılacak kernel'a iletmektedir (ARM Mimarisinde Açılış Süreci bölümüne bakabilirsiniz).

NFS üzerinden kök dosya sistemini bağlayabilmek için cmdline.txt dosyasına aşağıdaki satırın girilmesi yeterli olacaktır:

console=ttyAMA0,115200 root=/dev/nfs rw nfsroot=192.168.0.5:/opt/rpi ip=192.168.0.6:::::eth0 rootwait

Eğer DHCP üzerinden ip alınacak ise, ip=dhcp şeklinde de belirtebilirsiniz. Bu senaryonun çalışması için kernel içerisinde CONFIG_IP_PNP_DHCP=y şeklinde seçilmiş olmalıdır.

U-Boot Üzerinden NFS Root Açılışı

Raspberry Pi 2 üzerinde u-boot çalıştırmak, Haziran 2015 itibariyle halen çeşitli önemli sorunlara yol açmaktadır. U-boot içerisinde ethernet kartının çalışır hale getirilmesi her zaman mümkün olmamakta ve cihazı resetleyip yeniden denemek veya u-boot içindeyken dhcp komutuyla ip almayı denemek gerekmektedir. Kernel imajını ağdan yüklemek yerine SD karttan okumak istediğimizde okuma performansı çok düşük olmaktadır.

Bahsettiğimiz olumsuzluklara rağmen u-boot'un kullanım yaygınlığı ve önümüzdeki aylarda bu problemlerin giderilme olasılığı düşünülerek ayrıntılı olarak incelenmiştir.

U-boot üzerinden açılışta en kritik nokta, start.elf örneğinde olduğu gibi doğru command line parametreleri ile kernel imajının çalışmaya başlamasını sağlayabilmektir.

Kernel imajını ve Flattened Device Tree (FDT) tanım dosyasını yükleme yöntemimize göre süreç bir miktar değişmektedir. Aşağıda bu yöntemlerden ağ üzerinden yükleme ve sd kart üzerinden yükleme seçenekleri incelenmiştir.

Kernel ve FDT'nin Ağ Üzerinden Yüklenmesi

Kullanılacak kernel imajı ve fdt dosyası TFTP sunucu ana dizinine konulmalıdır.

U-boot komut satırında ethernet'i kullanmaya başlayabilmek için öncelikle aşağıdaki komut verilmelidir:

usb start

Ardından u-boot'un standart ortam değişkenleri üzerinden ip atama yöntemiyle cihazımızın ve TFTP sunucunun ip adresi belirtilmelidir. Örneğimizde cihaz ip adresi 192.168.0.6, sunucu ip adresi ise 192.168.0.5 şeklindedir.

setenv ipaddr 192.168.0.6
setenv serverip 192.168.0.5

Ardından zImage kernel imaj dosyasını TFTP sunucudan 0x1000000 gibi bir adrese çekelim:

tftp 0x1000000 zImage

Aynı şekilde cihazımız için TFTP sunucu ana dizinine koyduğumuz bcm2709-rpi-2-b.dtb FDT dosyasını 0x2000000 gibi bir adrese çekelim:

tftp 0x2000000 bcm2709-rpi-2-b.dtb

Kernel ve FDT imajları bellekte ve adreslerini biliyoruz. Sonraki adımda command parametrelerini hazırlayabilmek için bootargs u-boot değişkenini aşağıdaki gibi düzenlemeliyiz:

setenv bootargs console=ttyAMA0,115200 root=/dev/nfs nfsroot=192.168.0.5:/opt/rpi ip=192.168.0.6

Son olarak bootz komutuna kernel imajının ve FDT imajının bellekteki adreslerini parametre olarak verip Linux açılış sürecini başlatalım:

bootz 0x1000000 - 0x2000000

Özet olarak aşağıdaki gibi çıktılar almış olmalıyız:

U-Boot> setenv ipaddr 192.168.0.6
U-Boot> setenv serverip 192.168.0.5
U-Boot> tftp 0x1000000 zImage
Waiting for Ethernet connection... done.
Using sms0 device
TFTP from server 192.168.0.5; our IP address is 192.168.0.6
Filename 'zImage'.
Load address: 0x1000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #
         945.3 KiB/s
done
Bytes transferred = 3819416 (3a4798 hex)
U-Boot> tftp 0x2000000 bcm2709-rpi-2-b.dtb
Waiting for Ethernet connection... done.
Using sms0 device
TFTP from server 192.168.0.5; our IP address is 192.168.0.6
Filename 'bcm2709-rpi-2-b.dtb'.
Load address: 0x2000000
Loading: #
         861.3 KiB/s
done
Bytes transferred = 9703 (25e7 hex)
U-Boot> setenv bootargs console=ttyAMA0,115200 root=/dev/nfs nfsroot=172.16.2.64:/opt/rpi,vers=3 ip=192.168.0.6
U-Boot> bootz 0x1000000 - 0x2000000
## Flattened Device Tree blob at 02000000
   Booting using the fdt blob at 0x2000000
   Loading Kernel Image ... OK
   Loading Device Tree to 07b43000, end 07b485e6 ... OK

Starting kernel ...
Uncompressing Linux... done, booting the kernel.
...
[    5.008131] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC1E1
[   10.243929] IP-Config: Complete:
[   10.247276]      device=eth0, hwaddr=66:82:1a:78:a9:2f, ipaddr=192.168.0.6, mask=255.255.255.0, gw=172.16.2.254
[   10.257516]      host=192.168.0.6, domain=, nis-domain=(none)
[   10.263368]      bootserver=192.168.0.5, rootserver=192.168.0.5, rootpath=
[   10.282394] VFS: Mounted root (nfs filesystem) readonly on device 0:14.
[   10.289601] devtmpfs: mounted
[   10.293252] Freeing unused kernel memory: 388K (8072d000 - 8078e000)
Sistem aciliyor...
[   10.534755] random: nonblocking pool is initialized

Please press Enter to activate this console.

Kernel ve FDT'nin SD Kart Üzerinden Yüklenmesi

PreviousCihazın AçılmasıNextSistem Konfigürasyonu

Last updated 5 years ago

Was this helpful?