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.

results matching ""

    No results matching ""