basit bir gomulu sistemin kurulusu

58
Basit Bir Gömülü Sistemin Kuruluşu Giriş Bu yazıda basit bir gömülü Linux sisteminin beagleboard’a kuruluşundan bahsedilecektir. Her ne kadar örnek sistem olarak beagleboard seçilmiş olsa da, burada anlatılan hemen hemen bütün konular diğer bordlara da çok az değişiklikle uygulanabilir. Prensipler değişmemektedir. Burada bahsi geçen konular daha çok yeni başlayanlar içindir. Bu yazıda çok basit bir amacımız vardır. Bir cihaza güç veya elektrik verildikten sonra login gelene kadar arada bulunan aşamaları tek tek uygulamaktır. Konu hakkında bilgisi olanlar doğrudan özet kısmına göz atabilirler. Gömülü sistemler prensip olarak bir işi çok iyi yapmak üzere kurulurlar. Gömülü sistemler işletim sistemine bağlı kalmadan da kurulabilirler. Çok geniş bir yelpazeye ve uygulama alanına sahip bu tür sistemlerle ilgilenmiyoruz. Bizler sadece Linux yüklenebilen cihazlarla ilgilenmekteyiz. Bundan dolayı “gömülü sistem” ifadesi doğrudan “gömülü Linux sistemi” anlamına gelmektedir. Ayrıca Linux dışındaki işletim sistemleri de ilgi alanımızın dışındadır. 1. Yazının Kaynağı Gömülü sistemlerin prensip olarak bir işi çok iyi yapmak üzere tasarlandıklarından bahsetmiştik. Bizler trafikteki araçlar üzerine takılabilecek bir kara kutu sistemi üzerinde çalışmaktayız. Bu kara kutu sistemi ivme ölçer, cayro, manyetik alan ölçer gibi pek çok sensörden bilgi toplamakta ve aracın kinematik bilgilerini kaydetmektedir. Bu kısmın yazının konusu ile ilgisi yoktur. Fakat bu sensörler bir beaglebord makinesine bağlıdır ve burada koşan bir C programı gerekli işlemleri yapmaktadır. Gömülü Linux Sistemleri Login'e Kadar Linux Basit Bir Gömülü Sistemin Kuruluşu ucanlinux.com 1 of 58

Upload: uemit-yildirim

Post on 17-Nov-2015

93 views

Category:

Documents


4 download

DESCRIPTION

Basit Bir Gomulu Sistemin Kurulusu

TRANSCRIPT

  • Basit Bir Gml Sistemin Kuruluu

    Giri

    Bu yazda basit bir gml Linux sisteminin beagleboarda kuruluundanbahsedilecektir. Her ne kadar rnek sistem olarak beagleboard seilmi olsa da,burada anlatlan hemen hemen btn konular dier bordlara da ok az deiiklikleuygulanabilir. Prensipler deimemektedir.

    Burada bahsi geen konular daha ok yeni balayanlar iindir. Bu yazda ok basit biramacmz vardr. Bir cihaza g veya elektrik verildikten sonra login gelene kadararada bulunan aamalar tek tek uygulamaktr. Konu hakknda bilgisi olanlar dorudanzet ksmna gz atabilirler.

    Gml sistemler prensip olarak bir ii ok iyi yapmak zere kurulurlar. Gmlsistemler iletim sistemine bal kalmadan da kurulabilirler. ok geni bir yelpazeyeve uygulama alanna sahip bu tr sistemlerle ilgilenmiyoruz. Bizler sadece Linuxyklenebilen cihazlarla ilgilenmekteyiz. Bundan dolay gml sistem ifadesidorudan gml Linux sistemi anlamna gelmektedir. Ayrca Linux dndaki iletimsistemleri de ilgi alanmzn dndadr.

    1. Yaznn Kayna

    Gml sistemlerin prensip olarak bir ii ok iyi yapmak zere tasarlandklarndanbahsetmitik. Bizler trafikteki aralar zerine taklabilecek bir kara kutu sistemizerinde almaktayz. Bu kara kutu sistemi ivme ler, cayro, manyetik alan lergibi pek ok sensrden bilgi toplamakta ve aracn kinematik bilgilerini kaydetmektedir.Bu ksmn yaznn konusu ile ilgisi yoktur. Fakat bu sensrler bir beaglebordmakinesine baldr ve burada koan bir C program gerekli ilemleri yapmaktadr.

    Gml LinuxSistemleriLogin'e Kadar Linux

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    1 of 58

  • Bu rnekten de grlecei gibi gml sistemimiz sensrlerden bilgi toplamak gibiasli bir ie sahiptir. Bunun dnda tabi ki baka iler de yapmaktadr. Ama sisteminyapaca esas i, sensrlerle ilgilenmektir. te bu yazda anlatlacak gml sistem,bu proje iin gelitirilen ve halen kullanlmakta olan bir Linux sistemidir ve son derecegenel bir yapya sahiptir.

    2. Beagleboard

    Bu yazda Beagle Board Rev C3 sistemi zerinde uygulama yaplacaktr. Bu makinezerinde malesef eternet kart mevcut deildir. Bundan dolay dosya al verii MMCkart yardm ile yaplacaktr. Bu yazda MMC (MultiMediaCard) ile SD(SecureDigital)ayn anlamda kullanlacaktr.

    Bordun, seri port zerinden Linux ykl bir masast makineye bal olduunu kabuledilmektedir. Eer masast makinede seri port yoksa seri/usb evirici ile de aynbalant yaplabilir.

    Masast tarafnda seri kanal iletiim program olarak minicom kullanlmaktadr.Okuyucu kendi gzde terminal programn da kullanabilir. Seri kanal, 115200, 8N1 veNoFlow olarak ayarlanmaldr. Masast olarak bahsedilen makine gerek birmasast PC veya bir notebook veya zerinde Linux koan herhangi bir makineolabilir.

    3. Linux Datmlar Hakknda

    Bizler masastnde Slackware Linux kullanmaktayz. Fakat bu yazda bahsi geen hibir konu datma bal olmayacaktr. Btn paketler el ile derlenecek ve herhangi birpaket yneticisi kullanlmayacaktr. Okuyucunun da paket yneticisi kullanmamas,btn paketleri el ile derlemesi tavsiye edilir. Ayrca, eer aksa, otomatik mountzelliinin kapatlmas tavsiye edilir.

    4. apraz Derleme

    rnek bordumuz ARM ilemci kullanmaktadr. ARM ilemcili makineler, cep telefonlarve tablet bilgisayarlar gibi cihazlar sayesinde inanlmaz derecede yaygnlamtr.Buna karn masast makinelerimiz halen x86 ilemcileri kullanmaktadrlar. Doalolarak masastnde bulunan derleyiciler x86 kodu retmektedir. x86 ilemci iin x86kodu reten derleyiciye native derleyici denir. Genellersek kendi zerinde altmimari iin kod reten derleyiciye native derleyici denir.

    Doal olarak x86 makinede bulunan native derleyici, ARM iin kod retemez. Kendialt mimari iin deil de baka bir mimari iin kod reten derleyiciye aprazderleyici (cross compiler) denir. Buna gre, eer bizler x86 makine zerine uygunapraz derleyiciyi yklersek, ARM makinede alacak kodu, x86 makinederetebiliriz. apraz derleyicilerin rettii koda hedef mimari kodu denir.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    2 of 58

  • Yazlm gelitirme sreci sadece derleyicilere baml deildir. Bir kodun derlenerekobje haline getirilmesi, objelerin linker ile balanmas ve alabilir kodun eldeedilmesi, kodun altrlarak debug edilmesi gibi aamalar yazlm gelitirilirkenkullanlr. Dikkat edilirse burada elde edilen k bir baka programn girii olmaktadr.

    rnein, derleyici object kod elde eder. Elde edilen object kod linker ile birletirilir.Linker ile birletirilen kod, debug ile incelenebilir. Birinin kts dierinin girdisi olan butr yazlm sistemlerine ara zinciri (tool chain) denir. nk sistemin genel mantzincir gibidir.

    x86 makinesinde, ARM kodu elde edebilmek iin en az 1 adet tool chaine gerekvardr. ARM ilemcili makineler iin birden fazla tool chain vadr. Bizler beagleboardusatanlarn tavsiye etmi olduu ve CodeSourcery tarafndan desteklenen toolchainikullanacaz. Bu tool chain, artk mentor graphics tarafndan desteklenmektedir.

    http://www.mentor.com/embedded-software/codesourcery

    adresinden Download Lite Edition butonu ile ilgili sayfaya geilir. ARM processorsbal altnda bulunan Download GNU/Linux Release ile gsterilen adrese girilir.Burada e-posta adresi ile kayt yaplr. Kayt yaplan e-postaya, indirme iin gerekliolan adres gnderilir. Bu adrese tklanr ve gelen sayfadan Advanced Packagesaltnda bulunan IA32 GNU/Linux TAR balantsndaki paket indirilir. Eskiden tek tklayaplrd bu i.

    Bu yaz yazlrken en son srm 2012.03-57 idi. Paketin tam ad ise,arm-2012.03-57-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 ile verilmitir.

    Bu toll chain sadece 32 bit makineler iin destek vermektedir. 64 bit makineler iin 32bitlik ktphanelerin kurulmas gerekir.

    Tool chain aadaki gibi kurulur. Paket yneticisi kullanlmas tavsiye edilmez ki neyapldn grelim. Bizler bu tr paketleri /cross dizini altna kurmaktayz. Okuyucukendisine uygun herhangi bir dizin seebilir.

    $ cd /cross

    $ tar jxvf arm-2012.03-57-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2$ ln -s arm-2012.03 arm-none-linux-gnueabi

    $ ls arm-none-linux-gnueabi/bin

    arm-none-linux-gnueabi-addr2line

    arm-none-linux-gnueabi-ar

    arm-none-linux-gnueabi-as arm-none-linux-gnueabi-c++

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    3 of 58

  • arm-none-linux-gnueabi-c++filt

    arm-none-linux-gnueabi-cpp

    arm-none-linux-gnueabi-elfedit arm-none-linux-gnueabi-g++

    arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-gcc-4.6.3

    arm-none-linux-gnueabi-gcov

    arm-none-linux-gnueabi-gdb arm-none-linux-gnueabi-gdbtui

    arm-none-linux-gnueabi-gprof

    arm-none-linux-gnueabi-ld arm-none-linux-gnueabi-nm

    arm-none-linux-gnueabi-objcopy arm-none-linux-gnueabi-objdump

    arm-none-linux-gnueabi-ranlib

    arm-none-linux-gnueabi-readelf arm-none-linux-gnueabi-size

    arm-none-linux-gnueabi-sprite

    arm-none-linux-gnueabi-strings arm-none-linux-gnueabi-strip

    Tool chain tar ile aldnda btn dosyalar arm-2012.03/ isimli bir dizin iindekurulur. Tahmin edilecei gibi bu dizin, aslnda srm numarasdr. Bu tr bir dizinikullanmak pek pratik olmayaca iin 3. admda dizin ismi arm-none-linux-gnueabi ilesembolik olarak balanmtr. Bu admdan sonra btn betiklerde /cross/arm-none-linux-gnueabi ismi kullanlacaktr. Yeni bir srm yklendiinde sadece sembolik linkideitirmek yeterli olacaktr. Betiklerdeki isimleri gncellemeye gerek kalmayacaktr.

    4. admda tool chaine ait btn programlar listelenmitir. Btn programlar bin/ dizinialtndadr. Tool chaini kullanma hazr hale getirmek iin PATH deikenine

    /cross/arm-none-linux-gnueabi/bin girilmesi yeterlidir. rnein:

    export PATH=$PATH:/cross/arm-none-linux-gnueabi/bin

    Artk tool cahin kullanma hazrdr.

    zetlemek gerekirse paketi ap, paket iindeki bin/ dizinini PATH deikenineeklemek apraz derleyici veya tool chaini kullanmak iin yeterlidir.

    Tool chainin srm aadaki gibi elde edilebilir.

    $ arm-none-linux-gnueabi-gcc --version

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    4 of 58

  • arm-none-linux-gnueabi-gcc (Sourcery CodeBench Lite 2012.03-57) 4.6.3

    Copyright (C) 2011 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NO

    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    apraz derleyiciyi test etmek iin aadaki gibi basit bir C program yazlabilir. Buprogram daha sonra bord zerinde altrlacaktr.

    /* ilk.c */

    #include

    #include

    int main(int argc, char *argv[]){

    fprintf(stdout, "ARM ilemci iin ilk program.\n");

    fprintf(stdout, "Merhaba ARM.\n");

    return EXIT_SUCCESS;

    }

    rnek programn ismi ilk.c olsun. Bu program x86 iin aadaki gibi derleyebiliriz.

    $ gcc -O2 -Wall -Werror -o ilk.dynamic ilk.c

    -O2 ile optimizasyon seviyesi verilir. -Wall ile btn ikazlarn verilmesi salanr.-Werror ile ikazlarn error gibi alglanmas salanr. Bir C programnda hi ikazbulunmamaldr. Prensip olarak ikaz alnan bir C program kullanlmamaldr.Mmknse btn ikazlar temizlenmelidir. -o ilk.dynamic ile elde edilecek yrtlebilirdosyasnn ismi verilir. Burada derleme dinamik olarak yaplmaktadr. Daha sonrastatik derleme yaplacaktr. En sonda bulunan ilk.c ile de derlenecek dosyann adverilmektedir. Bu derleme sonunda elde edilecek alabilir kod, native bir koddur.Sadece x86 makinede iler.

    apraz derleme yapmak ve hedef mimari iin kod retmek iin yukardaki gccifadesinin hemen ba tarafna arm-none-linux-gnueabi- n ekini getirmek yeterliolacaktr. Buna gre ilk.c program aadaki gibi apraz olarak derlenebilir.

    $ arm-none-linux-gnueabi-gcc -O2 -Wall -Werror -o ilk.dynamic ilk.c

    arm-none-linux-gnueabi- ifadesine apraz derleyici n-eki (cross compiler prefix)

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    5 of 58

  • denir. Dikkat edilirse bin/ dizini altnda bulunan btn toolchain programlar bu n ekile balar. arm-none-linux-gnueabi-gcc komutu girildiinde, PATH deikenindendolay, ilgili komut /cross/arm-none-linux-gnueabi/bin altnda bulunacak ve aprazderleme yaplacaktr.

    n ek kullanm apraz derleme iini ok basitletirmektedir. rnein ppc ilemcileriiin ppc- ve mips ilemcileri iin mips- n ekli apraz derleyiciler bulunmaktadr.

    Derleme srasnda -static seenei kullanlrsa, hedef kod statik olarak retilir. Dierbir deyile gerekli btn ktphaneler kodun altna eklenir. Bundan dolay da ilgili kodar derecede byr. Statik derleme rnei ve elde edilen kod boylarnnkarlatrlmas aada verilmitir.

    $ arm-none-linux-gnueabi-gcc -O2 -Wall -Werror -static -o ilk.static ilk.c

    $ ls -l ilk.dynamic ilk.static

    -rwxr-xr-x 1 nazim users 5821 Aug 23 11:36 ilk.dynamic

    -rwxr-xr-x 1 nazim users 677923 Aug 23 11:36 ilk.static

    ktan da grlecei gibi, dinamik kodun boyu ok ksadr. Fakat dinamik kodualtrmak iin gerekli ktphaneler sistemde bulunmaldr. Statik retilmi kod iin hibir ktphaneye gerek yoktur. Her durumda alr.

    file komutu ok nemli bir Linux komutudur ve bize dosya hakknda baz zet bilgilerverir. Aada statik ve dinamik kodlarn bilgileri file ile elde edilmitir. Kolay okunmasiin ka satrlar eklenmitir.

    $ file ilk.static

    ilk.static: ELF 32-bit LSB executable, ARM, version 1 (SYSV),

    statically linked,

    not stripped

    $ file ilk.dynamic ilk.dynamic: ELF 32-bit LSB executable,

    ARM, version 1 (SYSV),

    dynamically linked (uses shared libs), not stripped

    ktan da grlecei gibi ARM, version 1 ifadesi bize ARM mimarisi iin kodretildiini gsterir. Ayrca kodun statik ve dinamik olarak derlendiini raporlar. Her ikibilginin son ifadesinde not stripped bilgisi bulunur.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    6 of 58

  • strip kelimesi soymak demektir. Yani kodlar soyulmamtr. Kod iinde eitli debugbilgileri, isimler, tablolar vs bulunur. Bu bilgiler kodu ok bytr. stersek objcopyveya strip komutu ile bu bilgiler atlabilir, soyulabilir. Aadaki rnekte hem statik hemdinamik k soyulmu ve dosya boylar listelenmitir. Boylardaki bir miktar klmeaka grlmektedir.

    $ arm-none-linux-gnueabi-objcopy --strip-all ilk.dynamic

    $ arm-none-linux-gnueabi-objcopy --strip-all ilk.static

    $ ls -l ilk.dynamic ilk.static -rwxr-xr-x 1 nazim users 3252 Aug 23 11:36 ilk.dynamic

    -rwxr-xr-x 1 nazim users 548692 Aug 23 11:36 ilk.static

    Dikkat edilirse, aynen derleyici kullanr gibi, objcopy komutunun nne yine derleyicin eki getirilmitir. Eer sadece $ objcopy strip-all ilk.dynamic gibi bir komut girecekolsaydk, x86 makineye ait objcopy komutu alacakt. Fakat biz tool chain iindebulunan ve hedef makine iin alacak olan objcopy komutunu kullanmak istiyoruz.Bundan dolay objcopy komutunun nne arm-none-linux-gnueabi- n eki getirilmitir.

    ldd komutu bir komutun bal olduu ktphanelerin listesini verir. rnein x86makinede ls komutunun baml olduu ktphaneler aadaki gibi listelenebilir.

    $ ldd /usr/bin/ls

    linux-gate.so.1 => (0xffffe000) librt.so.1 => /lib/librt.so.1 (0xb770a000)

    libcap.so.2 => /lib/libcap.so.2 (0xb7706000)

    libacl.so.1 => /lib/libacl.so.1 (0xb76fe000) libc.so.6 => /lib/libc.so.6 (0xb759b000)

    libpthread.so.0 => /lib/libpthread.so.0 (0xb7581000)

    /lib/ld-linux.so.2 (0xb773c000) libattr.so.1 => /lib/libattr.so.1 (0xb757c000)

    ktan da grlecei gibi ls komutunun bal olduu btn ktphanelerlistelenmitir. Bu komutun ileyebilmesi iin btn ktphanelerin ykl olmas gerekir.Ayn mantk gml sistemde alan ve dinamik olarak derlenen komutlarda dageerlidir. Fakat tool chain iinde arm-none-linux-gnueabi-ldd gibi bir komut mevcutdeildir.

    objdump komutu lddnin iini hemen hemen gerekler. Aada ARM iin derlediimizkodun baml olduu ktphanelerin listesi elde edilmitir.

    $ arm-none-linux-gnueabi-objdump -x ilk.dynamic | grep NEEDED

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    7 of 58

  • NEEDED libgcc_s.so.1

    NEEDED libc.so.6

    Grld gibi, ilk.dynamic program libgcc_s ve libc ktphanelerine ihtiya duyar.Gml sistem kurulurken bu ktphaneler bir yerlerden bulunmal ve /lib veya /usr/libaltna kopyalanmaldr.

    objdump programnn en kt taraf zyineli bamllklar gstermemesidir. Birktphanenin baka bir ktphaneye bamlln bulmak iin objdump komutu her birktphane iin tek tek iletilmelidir. ldd komutuysa zeyineli olarak btn bamllklarinceler.

    ilk.c programn -static seenei ile de derlemiti. Statik derlenmi kodlarnktphaneye ihtiyalar yoktur. nk ktphaneleri kendi kodlarnn altna akaeklemilerdir. objdump ile statik kodun ktphaneye ihtiyac olmad aadaki gibiincelenebilir.

    $ arm-none-linux-gnueabi-objdump -x ilk.static | grep NEEDED

    Hi bir NEEDED satr yoktur. nk statik derlenmitir.

    5. Boot Ykleyicilerinin Derlenmesi: MLO ve U-Boot

    Hangi bord kullanlrsa kullanlsn, boot yani ilk ykleme mekanizmas geneldedeimez. Bordlarn iinde, genelde ROMlarna gmlm ok basit bir ykleyicibulunur. Bu ykleyici dorudan donanma bal olup ok az yetenee sahiptir. Bu trykleyiciler genelde daha yetenekli bir ykleyiciyi yklemekle grevlidirler.

    Bordlarn ROMunda ykl olan bu tr ykleyicilere Rom Boot Loader denir. Rom BootLoader programnn yklemi olduu daha yetenekli ykleyiciye birici aama ykleyici(first stage boot loader) denir. Pek ok birinci aama ykleyicisi vardr. Beagle boardiin kullanlan birinci aama ykleyicisine MLO denir.

    Buna gre, Rom boot ykleyicisi MLO programn ykler. MLO program da aslndafazla yetenekli bir program deildir. MLO Rom boot ykleyicisinden daha yeteneklidir.VFAT zerinden ykleme yapabilir, ayn zamanda seri veya usb zerinden de yklemeyapabilir. MLO program donanma daha yakndr, ok genel deildir.

    Nihayetinde MLO program daha yetenekli bir boot ykleyicisine gerek duyar.MLOnun ykledii ve fazla yetenei olan boot ykleyicisine ikinci aama bootykleyicisi (second stage boot loader) denir. Pek ok ikinci aama boot ykleyicisimevcuttur. ARM sistemleri iin ikinci aama boot ykleyicisi olarak u-boot yaygn

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    8 of 58

  • biimde kullanlr.

    zetlersek, Rom boot ykleyicisi, MLO isimli birinci aama boot ykleyicisini, MLO iseu-boot isimli ikinci aama boot ykleyicisini ykler. u-boot son derece gelimi birykleyicidir. U-boot ayn zamanda bir monitr programdr, kullanc ile etkileimli alrve a destei mevcuttur.

    u ana kadar anlatlanlar ekil 1.1de zetlenmitir. ROM boot ykleyicisi VFAT ileformatlanm bir dosya sisteminden veya NAND diskten dorudan MLO kodunuykleyebilir. RAMa yklenen MLO ise, VFAT veya EXT2 dosya sistemlerinden u-bootsistemini ykleyebillir. Ayn zamanda NAND diskten de u-boot ykleyebilir. ekildegsterilmemesine ramen, MLO sistemi, seri kanal ve usb zerinden de u-bootkodunu ykleyebilir.

    Baz yazlarda, Rom boot ykleyicisi iin birinci aama, MLO iin 2. aama ve u-bootiin 3. aama ykleyici denir. Bu tamamen sisteme nereden bakld ile ilgilidir.Donanmclar genelde Rom boot ykleyicisini 1. aama olarak adlandrlrlar. Ama bizyazlmcyz.

    imdi MLO ve u-boot programlar, elimizdeki apraz derleyici ile kurulacak sonraborda aktarlacaktr.MLO program artk u-boot iinde gelmektedir. Bundan dolaysadece u-bootu derlemek yeterli olacaktr.

    ekil 1.1 : Birinci ve ikinci boot ykleyicileri.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    9 of 58

  • U-boot programn en son srm, http://denx.de adresinden aadaki gibi indirilir. Buyaz yazlrken son srm 2012.07 idi.

    $ wget ftp://ftp.denx.de/pub/u-boot/u-boot-2012.07.tar.bz2

    $ tar jxvf u-boot-2012.07.tar.bz2

    $ cd u-boot-2012.07

    Paketin iinde bulunan include/configs/omap3_beagle.h dosyas ok nemlidir.Mutlaka incelenmelidir. Bizler bu dosyada sadece CONFIG_SYS_PROMPT deerinideitirdik. Bylece prompt olarak UcanLinux laf gelecektir

    u-boot sistemi aadaki gibi apraz olarak derlenir.

    1 $ make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config Configuring for omap3_beagle board...

    2 $ make CROSS_COMPILE=arm-none-linux-gnueabi-

    3 $ ls -l MLO u-boot.img tools/mkimage -rw-r--r-- 1 nazim users 45780 Aug 23 19:19 MLO

    -rwxr-xr-x 1 nazim users 56344 Aug 23 19:18 tools/mkimage

    -rw-r--r-- 1 nazim users 335588 Aug 23 19:19 u-boot.img

    4 # cp tools/mkimage /usr/local/bin

    5 $ file u-boot.img

    u-boot.img: u-boot legacy uImage, U-Boot 2012.07 for beagle board,

    Firmware/ARM,

    Firmware Image (Not compressed), 335512 bytes,

    Fri Aug 24 09:16:02 2012,

    Load Address: 0x80100000, Entry Point: 0x00000000,

    Header CRC: 0x6ABF9E12, Data CRC: 0x8ADBC852

    1. ve 2. admda CROSS_COMPILE deikeni ile apraz derleyicinin n eki verilir.Paketleri derleyen Makefile sistemi iinde genelde

    ${CROSS_COMPILE}gcc -O2 -Wall ...

    gibi ifadeler bulunur. make komutunda verilen CROSS_COMPILE n eki, make

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    10 of 58

  • sistemi tarafndan yerine konur ve yukardaki ifade

    arm-none-linux-gnueabi-gcc -O2 -Wall ...

    ekline gelir. Bylece u-boot sistemi her trl apraz derleyici ile derlenebilir. Eerapraz derleme deil de native derleme yaplacaksa CROSS_COMPILE deikeniaka belirtilmez. Bu durumda ${CROSS_COMPILE} deeri yerine hi bir ifadekonulmaz ve sadece gcc deeri kalr. Bu durumda native derleme yaplr.

    Yukardaki 1. admda bord iin uygun config dosyas seilir. Baka bir ilem yaplmaz.

    2. admda u-boot sistemi derlenir. Benim makinem ok eski olduu iin derleme uzunsrd. Hzl makinelerde derleme sresi ksa olacaktr.

    Derleme baar ile bittiinde pek ok program elde edilir. imdilik bizlere MLO,u-boot.img ve tools/mkimage programlar gereklidir.

    3. admda bu programlarn listesi elde edilmitir. Birinci aama boot ykleyicisi MLOve ikinci aama boot ykleyicisi u-boot.img programlarnn boylarna dikkat edilmelidir.MLO daha ufaktr. u-boot.img ise ok daha byktr. Bu boylara baklarak, buprogramlarn yklenebilecei en ufak disk miktar tahmin edilebilir.

    Son olarak tools dizini altnda bulunan mkimage isimli bir program retilir. Buprogramn kullanm ile ilgili rnekler, yaznn ilerleyen blmlerinde verilecektir.mkimage program ok kullanlan bir programdr ve 4. admda verildii gibi,/usr/local/bin gibi daha genel bir yere kopyalanmas tavsiye edilir.

    Son olarak 5. admda u-boot.img program, file komutu ile incelenmitir.U-bootderlendiinde, esas olarak u-boot.bin program elde edilir. Derleme srasndau-boot.bin program mkimage ile u-boot imaj haline getirilir. Dier bir deyile,u-boot.bin programnn en stne 64 baytlk ok zel bir balk eklenir. Bu balkekleme iini mkimage program yapar. mkimagenin eklemi olduu balk, yaznnilerleyen ksmnda ayrca incelenecektir.

    imdi ekil 1.1de temsil edilen al gereklenecektir. Dier bir deyile elimizdebulunan MLO ve u-boot.img programlar VFAT formatl ve MMC karta yklenecek vebord u-boot seviyesine kadar alacaktr. Gml sistemlerle alrken u-bootpromptuna kadar gelebilmek nemli bir aamadr. nk u-boot sistemi son dereceyeteneklidir ve kullancya pek ok seenek sunar. U-boot gelmeden nce oluacakhatalar genelde ok vakit kaybettirirler. nk bu admlarda hata mesajlar ya hiyoktur ya ok yetersizdir.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    11 of 58

  • 6. MMC Yardm ile Boot Ykleyicilerinin Borda Tanmas ve Al

    Elimizde bulunan MLO ve u-boot.img programlar aadaki gibi borda tanr ve bordu-boot seviyesinde alr. ncelikle masast makinede, eer varsa, automountzellii kapatlmaldr. Her ii el yordam ile yapmak bizce ok nemlidir.

    Masast makinede MMC/SD kart okuyucunun mevcut olduu kabul edilmektedir.MMC kart okuyucuya takldnda, iletim sistemi tarafndan karta bir cihaz ismi atanr.Bu cihaz ismi birka yolla tespit edilebilir.

    Taklan cihazn ismi aadaki gibi fdsik veya dmesg komutu ile elde edilebilir. fdiskprogram diskleri blmlendirmek iin kullanlr. dmesg program ise ekirdekmesajlarn listeler.

    # fdisk -l

    ... Device Boot Start End Blocks Id System

    /dev/sdb1 * 51 60799 30374+ 4 FAT16

  • # ls -l /mnt/mmc

    -rwxr-xr-x 1 root root 45780 Aug 23 19:35 MLO

    -rwxr-xr-x 1 root root 335588 Aug 23 19:49 u-boot.img

    # umount /mnt/mmc

    Bordda u an iin elektrik yoktur. MMC kart boarda taklr. Bordun seri kablo ilemasastne balanm olduu kabul edilmektedir. Masast tarafnda,

    # minicom -s

    komutu ile seri terminal program setup modunda balatlr. -s seenei setupanlamndadr. Bir kereliine mahsus seri kanal ayarlar yaplmaldr. Serial port setupmensnden girilerek seri kanal ayarlar 8N1, 115200, NoFlowControl eklindeyaplr. Seri kanal ismi genelde /dev/ttyUSB0 veya /dev/ttyS0 eklindedir.

    Save setup as veya Save setup as dfl ile yaplan ayarlarn kalc olmas salanr.Daha sonra exit ile klarak ana ekrana dlr.

    Bir parmak USER butonunda basl iken Borda g verilir. USER butonuna baslmas,aln MMCden olmasn garantiler.

    Ya da bord akken, bir parmak USER butonuna basl iken dier parmakla RESETbutonuna baslr. Bu durumda da al yine MMCden yaplr. Al aada verilmitir.

    40V

    U-Boot SPL 2012.07 (Aug 23 2012 - 19:18:22)

    Texas Instruments Revision detection unimplemented OMAP SD/MMC: 0

    reading u-boot.img reading u-boot.img

    U-Boot 2012.07 (Aug 24 2012 - 09:15:25)

    OMAP3530-GP ES3.0, CPU-OPP2, L3-165MHz, Max CPU Clock 600 mHz

    OMAP3 Beagle board + LPDDR/NAND I2C: ready

    DRAM: 256 MiB NAND: 256 MiB

    MMC: OMAP SD/MMC: 0

    In: serial Out: serial

    Err: serial

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    13 of 58

  • Beagle Rev C1/C2/C3

    timed out in wait_for_pin: I2C_STAT=0

    No EEPROM on expansion board Die ID #7634000300000000040323091101a005

    Net: Net Initialization Skipped No ethernet found.

    Hit any key to stop autoboot: 0

    UcanLinux >

    Bord nasl almtr? USER butonuna basl tuttulduu iin ROM boot ykleyicisiMMC/SD kartta MLO programn bulmu ve bellee yklemi ve yttmeyi MLOyavermitir. MLO program da MMCde bulunan u-boot.img programn bellee yklemive yrtmeyi u-boot.img programna aktarmtr. ekil 1.1de verilen durum aynengereklemi ve u-boot promptu UcanLinux> eklinde ekrana gelmitir.

    ktan da grlecei gibi, u-boot srm 2012-07 olarak gzkmektedir. Aynzamanda prompt ifadesi de deimitir. Sonuta bizim derlediimiz MLO ve u-bootsistemi almaktadr.

    Henz elde edilen bilgiler kalc biimde NAND diske kaznmamtr. lerleyenblmlerde MLO ve u-boot diske kaznacak ve MMC kart ile bir iimiz kalmayacaktr.

    Tekrar etmekte fayda gryoruz. Gml sistemlerle urarken u-boot promptunuelde etmek nemli bir aamadr. Bu admdan sonras nispeten daha kolaydr. nkyaplacak ilerin borda bamll gittike azalmaktadr.

    U-boot promptu geldikten sonra help ile mevcut komutlarn listesi elde edilebilir. Ayrcaprintenv komutu ile u-bootun n tanml evre deikenleri elde edilebilir. Bizler buyazda u-boot komutlar ile ilgilenmeyeceiz. Baka bir yaznn konusu olacaktr. Fakatbu deikenlerin 3 tanesi ok nemlidir ve okuyucu bunlar ayrca incelemelidir. Budeikenler sra ile, bootargs, mtdparts ve bootmcddir.

    bootargs deikeni iinde ekirdee aktarlacak parametreler mevcttur. U-boot budeiken ile hi ilgilenmez. U-boot ekirdei ykleyecei zaman buradaki btnifadeyi gz kapal bir biimde ekirdee, ekirdek parametresi olarak aktarr.

    mtdparts deikeninde ise, flash diskin blmlendirme bilgisi bulunur. MS-DOSblmlendirmelerinde ekirdek, MBRyi okuyarak disk blmleri hakknda bilgi sahibiolur. Fakat flash disklerde blmlendirme iin ayr bir alan yoktur. ekirdekblmlendirme hakkndaki bilgileri mtdparts deikeninden elde eder. U-bootprogram, ekirdei yklerken mtdparts deikenini bootargs iine gmerek ekirdeegnderir.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    14 of 58

  • ekirdek alrken Kernel Command Line bilgisi iinde, kendisine gelen btnparametreleri raporlar. bootargs komutu gibi, u-boot program mtdparts ile hiilgilenmez. Gz kapal bir biimde bu deer ekirdee aktarlr.

    Son olarak en nemli deiken bootcmd ile verilendir. U-boot aldktan sonra budeikenin iinde bulunan komutlar iletir. Bordu otomatik olarak aabilmek iin budeiken kullanlr.

    Btn bu deikenlerin ilk deerleri include/configs/omap3_beagle.h dosyas iindetanmlanmtr. Nihai sistemlerde btn tanmlar burada yaplabilir.

    Bordumuzu u-boot seviyesine kadar atk. Fakat henz Linux iletim sistemi ile ilgilihi bir i yapmadk. imdi sra ile ekirdei derleyecek, sonra kk dosya sisteminikuracaz. Sonra da en nihayetinde MLO, u-boot.img, ekirdek ve kk dosya sisteminidiske yazarak bordun otomatik olarak Linux ile almasn salayacaz.

    Tekrar etmetke fayda gryoruz. Burada anlatlan kavramlar borda bal deildir,geneldir.

    7. Linux ekirdei

    Linux ekirdei esas ilgi alanmzdr. http://kernel.org adresinden son kararl ekirdeksrm indirilir. Gml sistemlerde asla kararsz ekirdek kullanlmamaldr. Bu yazyazlrken son kararl srm srm 3.5.2 idi. ekirdek paketi aadaki gibi hedefmakine iin derlenir.

    1 # tar jxvf /tmp/ftp/linux-3.5.2.tar.bz2

    2 # cd linux-3.5.23 # export CROSS=arm-none-linux-gnueabi-

    4 # make ARCH=arm CROSS_COMPILE=$CROSS omap2plus_defconfig configuration written to .config

    3. admda, arm-none-linux-gnueabi- n eki CROSS isimli bir deikene atanmtr.Hem eni olsun diye hem de uzun uzun arm-none-linux-gnueabi- lafn yazmamakiin yaplmtr. Dorudan 4. admda CROSS_COMPILE=arm-none-linux-gnueabi-olarak da yazlabilirdi.

    ekirdek paketi iinde Beagleboard iin yazlm hazr bir config dosyas bulunur. 4.satrda, bu hazr dosyann, .config ismi ile ekirdein kaynak kodunun ald yerinehemen altna kopyalanmas salanr. Bu .config dosyas, zellikle donanm ile ilgili pekok tanma sahiptir. Yukardaki adm 4. adm sadece 1 kez yaplmaldr. Yoksa dahance zerinde altmz .config dosyas ezilecektir. u ana kadar ekirdei

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    15 of 58

  • derlemek iin n hazrlk yaplmtr. Derleme ii aadaki gibi yaplr.

    5 # make ARCH=arm CROSS_COMPILE=$CROSS menuconfig

    6 # make ARCH=arm CROSS_COMPILE=$CROSS uImage -j2

    ... OBJCOPY arch/arm/boot/zImage

    Kernel: arch/arm/boot/zImage is ready

    UIMAGE arch/arm/boot/uImage

    Image Name: Linux-3.5.2-ucan-linux

    Created: Fri Aug 24 13:05:33 2012 Image Type: ARM Linux Kernel Image (uncompressed)

    Data Size: 2616224 Bytes = 2554.91 kB = 2.50 MB Load Address: 80008000

    Entry Point: 80008000

    Image arch/arm/boot/uImage is ready

    5. admda ekirdek iin gerekli zelliklerin seimi yaplr. Bu admdan kldnda 4.admda kurulan .config dosyas gncellenmitir. Eer 4. adm tekrar edilirse, .configdosyas eski haline dnecektir.

    Komutta bulunan -j2 ifadesi, ayn anda sistemde alabilecek i saysn tanmlar. -j2durumunda, derleme ayn anda 2 farkl paralel proses ile yaplacak demektir. Eersistemde 4 ilemci varsa -j4 denildiinde, derleme ii 4 paralel proses ile yaplacaktr.Bu durumda derleme zaman ok azalacaktr. -jN seeneinde N says olarak CPUsays verilebilir. Ya da hiperthreading varsa 2*N deeri verilebilir. N deeri dahabyk verilirse bir faydas olmaz. CPU saysndan az verilirse bou bouna makinebanda vakit keybedilmi olur.

    .config dosyas her zaman ok nemlidir ve mutlaka ekirdek kodunun dnda, ayrbir yerde aadaki gibi saklanmaldr.

    # cp .config /uygun/bir/yer/kernel.config.3.5.2

    Derleme ii 6. admda balar. Benimki gibi ok eski bir makinede derleme ooookuzun srer. 6. admda $ make uImage ile derleme yaplmtr. Bunun anlamderleme sonunda bana uImage imajn ret demektir. Ayn satr $ make zImageeklinde de yazabilirdik. Bu durumda ekirdek zImage biiminde elde edilecekti.ekirdek imajlar pek ok biimde elde edilebilir. Fakat arm ilemciler iin geneldeuImage tipinde imaj retilir.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    16 of 58

  • Esas imaj her zaman zImage imajdr. zImage imajnn en stnde mkimage programtarafndan 64 baytlk u-boot bal eklenir. Balk eklenmi bu imaja uImage imajdenir. Adet zerine u-boot imaj eklenmi dosyalar u harfi ile balatlrlar.

    Derlenen imajlar arch/arm/boot altnda bulunabilir. Aada hem zImage hem deuImage ekirdek imajlar listelenmitir.

    # cd arch/arm/boot/zImage

    # ls -l uImage zImage -rw-r--r-- 1 root root 2616288 Aug 24 13:10 uImage

    -rwxr-xr-x 1 root root 2616224 Aug 24 13:10 zImage

    Yukardaki ktan da grlecei gibi iki imaj arasnda 64 baytlk fark vardr.Bu fark mkimage balndan gelir. Bu arada zImage isminin banda bulunan z harfi,zipped, yani sktrlm kelimesinden gelir. Bu durumda uImage imaj, esas itibar ilesktrlm ve tepesine 64 baytlk u-boot bilgisinin eklendii bir dosyadr. Hem zImagehem de uImage dosyalar aadaki gibi file komutlar ile incelenebilir.

    1 # file zImage

    zImage: data

    2 # file uImage

    uImage: u-boot legacy uImage, Linux-3.5.2-ucan-linux,

    Linux/ARM, OS Kernel Image (Not compressed),

    2616224 bytes,

    Fri Aug 24 13:05:33 2012, Load Address: 0x80008000,

    Entry Point: 0x80008000,

    Header CRC: 0x8BD4AD91, Data CRC: 0xA5E56116

    Birinci satrda, file komutu zImage dosyasn veri dosyas gibi grmtr. nk dosyasktrlmtr ve file komutu iin sradan bir veri dosyas gibi alglanmaktadr.

    2. satrda ise zImage dosyasnn tepesinde bulunan 64 baytlk zel bilgi, file komututarafndan alglanmakta ve gerekli bilgiler hemen altnda listelenmektedir. Kolayokunmas iin araya satrlar eklenmitir. Normalde bu k tek satrdr.

    Bu ktan da grlecei gibi 64 baytlk u-boot bal kolayca analiz edilebilir. Burada

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    17 of 58

  • en kafa kartran bilgi OS Kernel Image (Not compressed) satrdr. Aslnda bizimimajmz zImage dosyasndan dolay sktrlmtr. Burada Not compressed denilensktrma hikayesi mkimage tarafndan yaplan sktrmadr. mkimage komutu gelendosyann sktrlp sktrlmadn bilmez. zImage zaten sktrlm olduu iinayrca sktrma yaplmaz.

    rnein bir bash betiini u-boot imaj haline getirelim. Bu durumda mkimagekomutuna compress yap dersek, bu betik mkimage tarafndan ayrca sktrlacaktr.

    u-boot imajlarnn balk bilgisi, file komutundan farkl olarak, aadaki gibi mkimagekomutunun kendisi ile de okunabilir.

    $ mkimage -l uImage

    Image Name: Linux-3.5.2-ucan-linux

    Created: Sat Aug 25 14:00:07 2012Image Type: ARM Linux Kernel Image (uncompressed)

    Data Size: 2516032 Bytes = 2457.06 kB = 2.40 MBLoad Address: 80008000

    Entry Point: 80008000

    U-boot program, bir imaj Load Address olarak verilen adrese gz kapal birbiimde ykler. Entry Point ile verilen adresten itibaren de yrtmeyi balatr. Biz buadresleri farkl vermek isteyebiliriz. Ya da Image Name ile verilen sadece bilgi amalismi keyfimize gre deitirmek isteyebiliriz. Bu gibi balk bilgileri nasl deitirilir?nk bu bilgiler ekirdek derlemesi srasnda atanmtr.

    Balk bilgileri dorudan ekirdekte bulunan deikenlerin atanmas ilegncellenebillir, ama tavsiye edilmez. Daha basit olarak, ekirdek $make zImageile derlenir ve mkimage komutu ile de uImage imaj keyfimize gre kurulabilir.mkimagenin kullanm ilerleyen blmlerde etraflca incelenecektir.

    Yazy ok iirecei iin ekirdek derlemesinden burada hi bahsedilmemitir.ekirdek derlerken baz basit kurallara dikkat etmekte yarar vardr. Bu kurallar,

    EXPERIMENTAL iaretlenmi zellikler, ok zorunlu deilse, ekirdeekatlmamaldr. nk bu zellikler henz olgunlua erimemitir. Olgunlua erimegarantisi de yoktur. Belirli bir sre sonra ekirdekten tamamen atlabilir ya daolgunlua eriip EXPERIMENTAL etiketi kaldrlabilir.

    DEPRECATED iaretlenmi zellikler ekirdee katlmazlar. nk bu tr zelliklerbir ka srm sonra ekirdekten tamamen kaldrlacaktr.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    18 of 58

  • Gml sistemlerin yapaca iler ve iinde alt donanm genelde ok kesindir.Bundan dolay modl kullanmaya gerek yoktur. Zorunlu olmadka hi bir zellik eklinde, yani modl eklinde iaretlenmemelidir. Fakat baz srcler illa ki modlolarak derlenmek ister, baka trl almazlar, ya da projedeki donanmlar deikenolabilir, ya da baz modller ykleme srasnda modl parametresi talep edebilirler. Bugibi durumlarda modl kullanmak zorunludur.

    Eer modl kullanyorsak, yani $ make menuconfig srasnda, olarakiaretlenmi ekirdek zellikleri varsa, bu modller aadaki gibi ayrcaderlenmelidir. Bu komut $ make uImage den sonra verilmelidir.

    $ make ARCH=arm CROSS_COMPILE=$CROSS modules

    Bu durumda ile iaretlenen modller ayrca derlenir. Derlenen modller .kouzantlarna sahiptir. ko, kernel object demektir. Sradan object dosyalarndan birfark yoktur. Sadece iinde ayr bir text alan daha vardr ve burada modl ile ilgilibilgiler bulunur.

    Modl derlemesi bittikten sonra $ find . -name *.ko komutu ile btn modllerbulunur ve kk dosya sisteminde /lib/modules/3.5.2 veya daha genel olarak/lib/modules/`uname -r` altna tanr. Kk dosya sisteminin kuruluu ilerleyenblmlerde etraflca incelenecektir. Bu projede hi modl kullanmadamz iindorudan rnek veremedik. Fakat mantk ok basittir, $ make modules ilemodller derlenir ve *.ko dosyalar kk dosya sistemine tanr, hepsi bu.

    Kullanlmayan hi bir zellik ekirdee katlmamaldr. Bylece ekirdek boyu ufalr veykleme zaman azalr.

    zellikle dosya sistemleri ekirdei ok iirir. Gml sistemlerde kullanlabilecekdosya cinsi ok azdr. Kullanlmayan hi bir dosya sistemi ekirdee katlmamaldr.

    Ramdisk kullanlmamal, bunun yerine ramfs kullanlmaldr. Ramfsin ramdiske greok byk faydalar vardr. Ramfsler dosya sistemi istemezler, ekirdee ilgili dosyasisteminin desteini vermeye gerek yoktur, ram bellei ramdisk gibi hemen alp,zerine oturmazlar. Ramfsler ihtiya olduka byrler veya klrler, ayrca ramfslerswap edilebilirler. Hem swap edilebilen hem de gerektiinde ufalabilen dosya sistemiramfs dnda mevcut deildir.

    Bu kurallar derya denizdir ve ok fazla artrlabilir. yi derlenmi bir ekirdek gmlsistemin baarsn dorudan etkileyecektir.

    ekirdei de derledik ve cebimize koyduk. imdi geriye kk dosya sisteminin

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    19 of 58

  • kuruluu ve al betiinin yazlmas kalmtr. Boot ykleyicileri, ekirdek, kk dosyasistemi ve al betikleri bir gml sistemin 4 temel unsurunu oluturur.

    imdi 3. unsur olan kk dosya sistemi kuruluu zerinde alacaz. Kk dosyasisteminin temelini Busybox sistemi oluturmaktadr.

    8. Busybox

    Pek ok Linux komutu ok yeteneklidir, pek ok seenee sahiptir, pek ok iiyapabilirler. rnein ls komutunun pek ok seenei (options) mevcuttur. Gml birsistemde bu kadar seenee gerek var mdr? Tabii ki yoktur.

    Busybox projesinde, ok gerekli olan pek ok komut yeni batan C ile yazlmtr.Fakat komutlara ok az zellik eklenmitir. Bylece onlarca komut bir arada tek birdosyada toplanm ve gml sistemler iin ok uygun bir hale getirilmitir.

    Busybox sistemi aynen ekirdek ortam gibi derlenir. htiyacmz olan komutlar seilirve derleme yaplr. Derleme sonunda busybox isimli tek bir dosya elde edilir.Busyboxn derlenmesi aada verilmitir.

    http://busybox.net adresinden en son srm indirilir. Bu yaz yazlrken son srm1.20.2 idi.

    $ wget http://busybox.net/downloads/busybox-1.20.2.tar.bz2

    $ tar jxvf busybox-1.20.2.tar.bz2

    $ cd busybox-1.20.2$ make menuconfig

    make menuconfig srasnda gelen menlerden aadaki seimler yaplr. Dierseimler bizim iin u anda hayati neme sahip deildir.

    Build Options -->

    [ ] Build BusyBox as a static binary (no shared libs) [ ] Build BusyBox as a position independent executable

    [ ] Force NOMMU build [ ] Build shared libbusybox

    [ ] Build with Large File Support (for accessing files > 2 GB)

    (arm-none-linux-gnueabi-) Cross Compiler prefix () Path to sysroot

    () Additional CFLAGS

    () Additional LDFLAGS () Additional LDLIBS

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    20 of 58

  • Yukarda grlecei gibi Build Options mensnde apraz derleyicinin n ekiverilmitir. Busybox daha farkl yntemlerle de apraz derlenebilir. ok basit olduuiin, bizler apraz derleme n ekini Build Options ksmnda aka verdik.Kullanmadk ama, ayn zellik ekirdek derlemesi srasnda da kullanlabilirdi.

    Eer ayn anda hem menuconfig iinde hem de CROSS_COMPILE deikeni ileapraz derleme n eki verilirse, CROSS_COMPILE ile verilen n eke ncelik verilir.

    Busybox derlemesindeki en nemli ksm, aadaki gibi Installation Optionsmensnde bulunur.

    Installation Options ("make install" behavior) -->

    What kind of applet links to install (as soft-links) --->

    (/nk/blog/1/RootFS) BusyBox installation prefix

    Her zaman soft link kullanlmaldr. Hard link tam bir muammadr, aslakullanlmamaldr. Busybox installation prefix ile busybox sisteminin kurulaca birdizin ismi verilir. Busybox buraya kurulacaktr. Busybox kurulurken /bin, /sbin ve /usrdizinlerini yaratr. /bin dizini iine busybox programnn kendisi kopyalanr. Dier btndizinlerde ise komutlara ait sembolik balar bulunur.

    Bizler busybox /nk/blog/1/RootFS dizini altna kuracaz. Daha sonra /etc, /proc, /libgibi dier dizinleri el yordam ile yaratarak kk dosya sistemini tamamlayacaz. Dierbir deyile, kk dosya sisteminin /bin, /sbin ve /usr dizinlerini busybox kuracaktr.Dier dizinleri el ile kuracaz.

    Aynen ekirdek derlemesinde olduu gibi, busyboxn .config dosyas aadaki gibifarkl bir yerde saklanmaldr.

    # cp .config /uygun/bir/yer/busybox.config.1.20.2

    Busybox, aadaki gibi tek bir make komutu ile apraz olarak derlenir.

    # make -j2

    # ls -l busybox

    -rwxr-xr-x 1 root root 916872 Aug 24 13:26 busybox

    Elde edilen kodun bykl yaklak 1 MBdir. Aslnda gml sistem iin bu ooookbyk bir deerdir. Hi bir gml sistemde bu kadar ok Linux komutu bulunmaz.Nihai sistemde kullanlmayan btn komutlar busybox iinde atlmaldr. Bunun da ok

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    21 of 58

  • basit bir yolu vadr. Gml sistemde kullanlan komutlarn tamam al betiklerindeortaya kar. Al betikleri incelenmeli ve burada geen komutlar busybox iine dahiledilmelidir. Bu durumda grlecektir busyboxn boyu ok ufalacaktr. Fakat imdikibordlarn bellek ve disk kapasiteleri nadasa braklacak kadar byktr. Bundan dolaybu tr optimizasyonlar gzard edilmektedir. Fakat yine de yaplmasnda fayda vardr.Aada file komutu ile busybox dosyas incelenmektedir.

    # file busybox

    busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV),

    dynamically linked (uses shared libs),

    stripped

    ktan da grlecei gibi, busyboxn kodu strip edilmitir. nk birinci ama kodboyunun ksa olmasdr. Ayrca dynamically linked ifadesi bize busyboxn dinamikolarak derlendiini ve ktphanelere ihtiya duyduunu syler. Bu ktphanelerilerleyen blmlerde /lib altna kurulacaktr.

    Build Options mensnde, [*] Build busybox as a static binary seimi yapmolsaydk, busybox statik olarak derlenecek ve hi bir ktphaneye ihtiyaduymayacaktr. Bu arada busybox kodunun da ar derecede ieceini hatrlatalm.

    Derleme ii bittikten sonra, busybox aadaki gibi kk dosya sisteminin iine kurulur.Eksik olan dier dizinler yine aadaki gibi yaratlr.

    1 # make install2 # cd /nk/blog/1/RootFS

    3 # ls -l

    total 12 drwxr-xr-x 2 root root 4096 Aug 24 13:28 bin/

    lrwxrwxrwx 1 root root 11 Aug 24 13:28 linuxrc -> bin/busybox*

    drwxr-xr-x 2 root root 4096 Aug 24 13:28 sbin/ drwxr-xr-x 4 root root 4096 Aug 24 13:28 usr/

    4 # rm linuxrc

    5 # du -ks . 924 .

    6 # mkdir dev etc home lib mnt proc root tmp var sys

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    22 of 58

  • 7 # ln -s /sbin/init

    8 # ls -l drwxr-xr-x 2 root root 4096 Aug 25 14:12 bin/

    drwxr-xr-x 2 root root 4096 Aug 24 13:36 dev/ drwxr-xr-x 2 root root 4096 Aug 25 13:23 etc/

    drwxr-xr-x 2 root root 4096 Aug 24 13:36 home/

    lrwxrwxrwx 1 root root 10 Aug 24 13:37 init -> /sbin/init drwxr-xr-x 3 root root 4096 Aug 24 13:45 lib/

    drwxr-xr-x 2 root root 4096 Aug 24 13:36 mnt/

    drwxr-xr-x 2 root root 4096 Aug 24 13:36 proc/ drwxr-xr-x 2 root root 4096 Aug 24 13:36 root/

    drwxr-xr-x 2 root root 4096 Aug 25 14:12 sbin/ drwxr-xr-x 2 root root 4096 Aug 25 20:12 sys/

    drwxr-xr-x 2 root root 4096 Aug 24 13:36 tmp/

    drwxr-xr-x 4 root root 4096 Aug 25 14:12 usr/ drwxr-xr-x 2 root root 4096 Aug 24 13:36 var/

    9 # cp -a /ornek/etc/dizini/* etc/

    10 # ls -l etc total 120

    -rw-r--r-- 1 root root 5 Oct 6 2005 TZ

    -rw-r--r-- 1 root root 28 Jul 11 2007 adjtime -rw-r--r-- 1 root root 29 Oct 6 2005 exports

    -rw-r--r-- 1 root root 148 Jul 2 2009 fstab

    -rw-r--r-- 1 root root 97 Jul 7 22:02 group -rw-r--r-- 1 root root 24 Apr 22 2010 gshadow

    -rw-r--r-- 1 root root 40 Feb 1 2011 hosts -rw-r--r-- 1 root root 39 Jan 21 2011 inetd.conf

    -rw-r--r-- 1 root root 186 Jul 24 19:44 inittab

    -rw-r--r-- 1 root root 21 Jul 24 20:04 issue -rw-r--r-- 1 root root 724 Jun 27 10:25 ld.so.cache

    -rw-r--r-- 1 root root 1 Jun 27 10:21 ld.so.conf

    lrwxrwxrwx 1 root root 12 May 14 2011 mtab -> /proc/mounts -rw-r--r-- 1 root root 154 Oct 6 2005 nsswitch.conf

    -rw-r--r-- 1 root root 315 Jan 27 2011 passwd -rwxr--r-- 1 root root 176 Jul 24 19:59 profile*

    -rw-r--r-- 1 root root 1623 Oct 6 2005 protocols

    -rwxr-xr-x 1 root root 396 Jul 24 20:03 rcS* -rw-r--r-- 1 root root 20 Jul 24 14:04 resolv.conf

    -rw-r--r-- 1 root root 1615 Oct 6 2005 rpc

    -rw-r--r-- 1 root root 81 Jul 24 19:57 securetty -rw-r--r-- 1 root root 29366 Oct 6 2005 services

    -rw-r--r-- 1 root root 251 Jan 27 2011 shadow -rw-r--r-- 1 root root 61 Jul 7 16:36 sudoers

    11 # cp -a /ornek/lib/dizini/* lib/

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    23 of 58

  • 12 # ls -l lib

    -rwxr-xr-x 1 root root 122212 Jun 27 09:33 ld-2.12.2.so

    lrwxrwxrwx 1 root root 12 Feb 14 2012 ld-linux.so.3 -> ld-2.12.2.so -rwxr-xr-x 1 root root 1184972 Jun 27 09:32 libc-2.12.2.so

    lrwxrwxrwx 1 root root 14 Feb 14 2012 libc.so.6 -> libc-2.12.2.so

    -rwxr-xr-x 1 root root 135 Jan 27 2012 libgcc_s.so -rwxr-xr-x 1 root root 182397 Jan 27 2012 libgcc_s.so.1

    -rwxr-xr-x 1 root root 427528 Jan 27 2012 libm-2.12.2.so

    lrwxrwxrwx 1 root root 14 Feb 14 2012 libm.so.6 -> libm-2.12.2.so drwxr-xr-x 2 root root 4096 Jul 24 14:06 modules/

    13 # du -ks RootFS/

    3104 RootFS/

    Yukarndaki her bir adm ksaca aklayalm.

    /nk/blog/1/RootFS dizinin iinin tamamen bo olduunu kabul ediyoruz.

    1. admda /nk/blog/1/RootFS altnda otomatik olarak /bin, /sbin ve /usr dizinleriyaratlr. busybox program bin/ altna atlr ve seilen btn komutlarn semboliklinkleri atanr.

    3. admda busyboxn kurduu dizinler grlebilir. linuxrc dosyas ramdisk destekliallar iindir. Artk ok eski kalmtr. 4. admda bu sembolik link silinir.

    6. admda kk dosya sistemi iin gerekli olan dier dizinler yaratlr.

    7. admda /sbin/inite /init balanr. Bizler kk dosya sistemi olarak initramfskullanacaz. Initramfsli sistemlerde ekirdek kk dosya sistemini baladktan hemensonra /init programn gz kapal bir biimde iletir. Bu bir betik dahi olabilir. Ya da/bin/sh gibi bir programa sembolik ba olabilir. Bu durumda kk dosya sistemibalandktan hemen sonra kabuk promptu gelecektir. Bizler /init programna /sbin/initprogramn baladk. Bylece kk dosya sistemi balandktan sonra ekirdek/sbin/initi altracaktr. Bu programn ileyiine ilerleyen blmlerde deinilecektir.Son bir hatrlatma, /init program veya sembolik olarak gsterdii program alabilirmodda, yani x modunda ve yrtlebilir bir program olmaldr. Yani ELF veya betikolmaldr.

    9. admda etc/ dizini, rnek bir etc/ dizini kullanlarak doldurulur. Okuyucu amacnagre etc/ dizini kurabilir.

    11. admda /lib dizini gerekli ktphaneler ile doldurulur. Bizler sadece busyboxn

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    24 of 58

  • kullanaca ktphaneleri ekledik. Okuyucu ihtiyac olan btn ktphaneleri burayakopyalayabilir. Ktphaneler Angstrom datmndan yrtlmtr. Beagleboarddaalan herhangi bir datmdan ktphaneler kopyalanabilir.

    Kk dosya sistemimiz artk hazrdr. 13. admda kk dosya sisteminin kaplad alanraporlanmtr. Kk dosya sistemi bu hali ile yaklak 3MB alan kaplar. Ayrca gerekliolur diye strace program ve ilk.dynamic program da kk dosya sistemine eklenmitir.

    Kk dosya sistemini masast makinesinin diskinde hazrladk. Dier bir deyile,diskte /nk/blog/1/RootFS dizini altnda kk dosya sistemimiz yatmaktadr. Kk dosyasistemini bu hali ile gml sisteme aktaramayz. Kk dosya sistemlerinin gmlsistemlerde kullanlmas iin envai eit teknik vardr. Biz burada ok yeni ve enverimli olan initramfs tekniini kullanacaz. Bunun iin masast sistemde bulunanRootFS/ dizini initramfs yntemine gre paketlenmelidir.

    9. Kk Dosya Sisteminin Initramfs Yntemi ile Hazrlanmas

    Initramfs (inital ram file system) yntemi, initrdye almak bir zm olarak ortayaatlmtr. Initramfs sistemi esas itibari ile kk dosya sistemi olarak kullanlmaz. Kkdosya sistemine gei iin kullanlan ara bir sistemdir. Genelde de modl yklemekiin kullanlr. Fakat bizim projemizin gereklerini tam olarak karlad ve iinde pekok kavram barndrd iin initrmafs sistemini esas kk dosya sistemi olarakkuracaz.

    ncelikle RootFS dizinine doldurmu olduumuz btn dosyalar aadaki gibi cpioarivi haline getirilir.

    # cd RootFS/

    # find . | cpio -H newc -o | gzip -v -9 > ../initramfs.cpio.gz 5915 blocks

    48.3%

    # ls -l ../initramfs.cpio.gz

    -rw-r--r-- 1 root root 1564879 Aug 25 20:54 ../initramfs.cpio.gz

    Bu tr | ile birletirilmi komutlar analiz etmemin en iyi yolu, her birini tek tekprompttan girerek denemektir. find . komutu RootFS dizini iinde bulunan btndosyalar alt alta listeler. Initramfs sistemi sadece cpio arivi ile alr.

    cpio program, birden fazla formatla arivleme yapabilir. Initramfs sistemi newcformatn destekler. Bundan dolay -H newc ile initramfsin format aka verilir. -oseenei output demektir. cpio komutu, find komutundan gelen dosya isimlerininewc formatna gre biraraya toplar ve elde ettii sonular ekrana yazar. cpio

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    25 of 58

  • komutundan sonraki | sayesinde ekrana gidecek bilgiler gzip programna girdi olur.gzip de elde ettii sktrlm dosyay ekrana yazar. Ama > iareti sayesinde ekranayazlacak bilgiler dosyaya ynlendirilir. En nihayetinde RootFSin initramfs iinformatlanm ve sktrlm hali, initramfs.cpio.gz dosyasna yazlr. ls -l kndanda grlecei gibi, btn kk dosya sistemimiz yaklak 1.5 MBayt yer kaplamaktadr.Dier bir deyile, RootFS dizini %50 oranna sktrlmtr. nk $ du -ks RootFSile baktmzda, RootFS dizininin boyu 3MBayt civarndayd. Bu sktrma oran zatengzip tarafndan %48.3 olarak yukarda raporlanmtr.

    Kk dosya sistemini, cpio imaj haline getirdik. Fakat hale bu sistemi kullanmamzmmkn deildir. nk kk dosya sistemini al srasnda u-boot ykleyecektir.U-boot program da ne yklerse yklesin mutlaka ykleyecei programn tepesinde 64baytlk balk bilgisi arar. 64 baytlk bu balk bilgisi aadaki gibi mkimage programile yazlabilir. Kolay okunmas iin aralara satr eklenmitir. # mkimage -A arm -Olinux uInitrd komutu tek satrda yazlmaldr.

    # mkimage -A arm -O linux

    -T ramdisk

    -C none -a 0

    -e 0 -n UcanLinux

    -d initramfs.cpio.gz

    uInitrd

    Image Name: UcanLinux

    Created: Sat Aug 25 20:55:45 2012 Image Type: ARM Linux RAMDisk Image (uncompressed)

    Data Size: 1564879 Bytes = 1528.20 kB = 1.49 MB Load Address: 00000000

    Entry Point: 00000000

    mkimage program, u-boot paketini derlerken elde edilmi ve /usr/local/bin altnakopyalamt. mkimage programnn seenekleri aadaki gibi listelenebilir.

    # mkimage --help

    Usage: ./mkimage -l image

    -l ==> list image header information

    ./mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep

    -n name -d data_file[:data_file...] image

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    26 of 58

  • -A ==> set architecture to 'arch'

    -O ==> set operating system to 'os'

    -T ==> set image type to 'type' -C ==> set compression type 'comp'

    -a ==> set load address to 'addr' (hex) -e ==> set entry point to 'ep' (hex)

    -n ==> set image name to 'name'

    -d ==> use image data from 'datafile' -x ==> set XIP (execute in place)

    ./mkimage [-D dtc_options] -f fit-image.its fit-image

    ./mkimage -V ==> print version information and exit

    # ./mkimage -V

    mkimage version 2012.07

    mkimage komutunun kullanm bilgisinden de grlecei gibi btn seenekler sonderece aktr. Yukarda verilen rnein baz seeneklerine ksaca deinelim.

    -T ramdisk ile elde edilen imajn ne tipten olduu belirtilir. U-boot, ramdisk tipindekiimajlar bellee kendisi ykler, ekirdee brakmaz. ekirdee sadece balangadresini parametre olarak geirir.

    -C none ile imajda sktrma yaplmad sylenir. Aslnda cpio arivi sktrlmtr.Ama ama ii ekirdek tarafnda yaplacaktr. U-boot tarafnda bir sktrma/amayaplmayacaktr. U-bootun ama ilemi yapmamas iin none girilmitir.

    -a 0 ile imajn yklenecei adres verilir. Fakat ramdiskin yklenecei adres, dahasonra bootm komutu ile aka verilecektir. Bundan dolay adres 0 verilmitir. Yani buadresin gerekte bir anlam yoktur.

    -e 0 ile de yrtmenin balang adresi verilir. Bu adresin yine -a 0 daki gibi biranlam yoktur.

    -n UcanLinux ile imaja bir isim verilir. Daha sonra $ mkimage -l komutu ile imajincelendiinde, ne olduu kolay anlalr. Sadece bilgi iindir. zellikle birka imajvarsa, imajlar bu sayede birbirlerinden kolayca ayrt edilebilirler.

    -d initramfs.cpio.gz ile, tepesine 64 baytlk balk bilgisinin yerletirilecei dosya ismiverilir. mkimage program dosyann tipine vs. hi bakmaz. Gelen dosya ne olursaolsun, gz kapal bir biimde bu dosyann tepesine balk bilgisini yazar.

    uInitrd ile de u-boot imaj dosyasnn ad verilir. Alkanlk gerei, u-boot bal tayan

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    27 of 58

  • btn imajlar, u harfi ile balatlrlar. Bizler de bu alkanla sadk kaldk.

    Balk bilgisinde sadece bu kadar bilgi yoktur. Ayn zamanda checksum deeleri debulunur. U-boot program, bir imaj ykleyecei zaman ncelikle checksum deelerinikontrol eder. Eer bu deerler tutmaz ise ykleme iini hata vererek brakr.

    mkimage, basit bir C programdr. Daha fazla bilgi iin u-boot paketi iinde bulunan,tools/mkimage.c program incelenebilir.

    zetlersek, nce RootFS/ dizininin iine kk dosya sistemini kurduk. Sonra bu dizinicpio arivi haline getirdik ve sktrdk. Sonra sktrlm bu dosyann tepesinemkimage program ile u-boot iin gerekli olan balk bilgilerini ekledik. Henz bitmedi !

    Flash diske kaydedilecek her dosyann boyunun, diskin page deerinin tam katolmas gerekir. uInitrd program bu art salamadan diske yazlrsa, Attempt to readnon page aligned data hatas alnr. Bu hatay almamak iin kernel dahil flashayazlacak her dosya mutlaka page deerine gre hizalanmaldr.

    ncelikle, elimizde bulunan bordun page deerini renmeliyiz. Bunun iin elkitaplarna baklabilir. Ya da u-boot seviyesinde iken aadaki gibi, nand info komutuile bu deer elde edilebilir.

    UcanLinux > nand info

    Device 0: nand0, sector size 128 KiB

    Page size 2048 b

    OOB size 64 b Erase size 131072 b

    Burada raporlanan deeler ok nemlidir. ncelikle Page size deeri, yani 2048deeri, flash disk iin hizalama deeridir. Diske yazlan her dosya mutlaka 2048ntam kat olmaldr. Page size ayn zamanda en kk okuma/yazma yaplabilecekveri boyudur. ekil 1.2de bir flash diskin mealen yaps verilmitir.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    28 of 58

  • Erase veya sector size deeri, 128K olarak verilmitir. ekil 1.2de erase blockresmedilmitir. Bu deeri u an iin kullanmayacaz. Fakat jffs2 gibi bir dosya sistemikuracak olursak, erase size deeri aka bilinmelidir. Eer erase size deeri dzgnverilmezse, dosya sistemi yine mount edilebilir ve kullanlabilir. Fakat dosya sistemiok verimsiz alr ve ar derecede ikaz mesaj retilir.

    Ayrca NAND diskler iinde genelde hatal bloklar (bad blocks) bulunur. Her bir hatalbloun boyu tam erase size deerindedir. rnein elimizdeki diskte 4 hatal blokmevcutsa, 4*erase size deeri kadar bayt diskte kullanm ddr. U-boot seviyesindeiken nand bad komutu girilirse, hatal bloklarn balang adresleri tek tek listelenir.

    Beagleboardun flash diskinin page deerinin 2048 olduunu renmitik. Her pagedeerinin genelde 1/32si kadar bilgi ayrca bir blokta tutulur. Bu bloa OOB (Out OfBand) blok denir. Bu durumda 2048/32= 64 baytlk OOB verisi her page deeri ilebirlikte saklanr. ekil 1.2de OOB ve Page bloklar yan yana resmedilmitir.

    OOB niin vardr? NAND diskler, NOR diskler veya ROMlardan farkl olarak okyoundurlar. GB seviyesinde kapasiteleri mevcuttur. Klliyatl miktarlarda retilirler.ok ucuzdurlar. Bu gzelin basit bir kusuru vardr. NAND diskler hataya ok akyapya sahiptirler. Bu hatalar tespit edip dzeltmek iin, genelde her 512 baytlk veriiin 16 baytlk OOB verisi kullanlr. OOB verisi iinde ECC (Error Correcting Code)bilgisi ve dier st (meta) bilgiler mevcuttur. Okunan her veri mutlaka ECCdenetiminden geer ve gerekirse dzeltilir.Her dosya sistemi ECC verisini ve OBBbloundaki verileri kullanamaz. Bundan dolay flash disklere VFAT, EXT2 gibi,standard disklere kurulan dosya sistemlerinin kurulmas tavsiye edilmez. Dorudanflash disklere destek veren ve genelde flash file systems olarak geen, jffs2, yaffs2,logfs, ubifs gibi dosya sistemleri kullanlr. Flash diskler iin kullanlan dosyasistemlerini ayr bir yaz konusu yapmak istiyorum. Yoksa bu yaz bitmeyecek.

    Bu kadar lafn sonunda, esas dikkat edeceimiz nokta udur. Diske yazlacak herdosyann boyu, page size deerinin tam kat olmaldr. rnek diskimizin page sizedeeri 2048dir. O halde uInitrd imajnn boyu 2048in tam kat yaplmaldr. Bunun iin

    ekil 1.2: Bir flash diskin i bloklar.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    29 of 58

  • bir ka yntem mevcuttur. Bunlarn iinde en basit olan dd komutu ile yaplandr.Aadaki rnekte uInitrd, tam 2048in kat yaplmaktadr.

    # dd if=uInitrd of=uInitrd.2048 bs=2048 conv=sync

    764+1 records in 765+0 records out

    1566720 bytes (1.6 MB) copied, 0.00880356 s, 178 MB/s

    if, input file; of, output file demektir. Nihai dosyann ad 2048in tam kat olduunubelirtmek iin uInitrd.2048 olarak verilmitir. bs, block size demektir. bs deeri pagesize olarak verilmitir. dd komutu uInitrd dosyasn bs adet bloklarla okur veuInitrd.2048 dosyasna yazar. Bu kadar ile bir cp komutundan hibir fark yoktur.Fakat conv=sync seenei ile, artk kalan bloklarn sfrlar ile doldurulmas salanr.

    Rapor edilen 764+1 deeri, tam 764 adet blok okunduunu syler. +1 ise, 2048dendaha az elemana sahip bir blok olduunu belirtir. te conv seenei eksik kalan bubloun iini doldurur. Bylece kta 765 adet tam blok olacaktr.

    uInitrd ile uInitrd.2048 arasnda ilevsellik olarak hi bir fark yoktur. Ayrca yaplan buiin u-boot ile de bir ilgisi yoktur. Flash disklerin page deerleri ile okuma/yazmagerekliliinden dolay bu ilem yaplmtr.

    Her iki dosya aadaki gibi incelenebilir.

    # ls -l uInitrd uInitrd.2048

    -rw-r--r-- 1 root root 1564943 Aug 25 20:55 uInitrd

    -rw-r--r-- 1 root root 1566720 Aug 25 20:56 uInitrd.2048

    Blok hesab aada zetlenmitir.

    1564943 / 2048 = 764.1323 = 764+ 1 blok.

    1566720 / 2048 = 765.0000 = 765+ 0 blok.

    Sras gelmedii iin yapmamtk. Flash diske yazlaca iin ekirdein de pagedeerine gre hizalanmas gerekir. ekirdein hizalanmas da aadaki gibi yaplr.

    # dd if=uImage of=uImage.2048 bs=2048 conv=sync

    1228+1 records in

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    30 of 58

  • 1229+0 records out

    2516992 bytes (2.5 MB) copied, 0.0105464 s, 239 MB/s

    Kk dosya sistemleri ekirdek tarafndan eitli ekillerde temin edilip balanabilirler.Bu konuda inanlmaz bir eitlilik vardr. Kk dosya sistemleri

    Dorudan initramfs eklinde ekirdein iine gmlebilirler,1.ekirdekten ayr, ama yine initramfs eklinde kurulabilirler,2.Flash diskte kurulabilirler,3.MMC/SD zerinde kurulabilirler,4.NFS zerinden mount edilebilirler, vs.5.

    Bunlarn her biri ayr bir yaz konusudur. Kk dosya sistemi mutlaka projenin amacnauygun seilmelidir. Yukardaki listede bulunan 2. zm bizim projemiz iin biilmikaftandr. nk ani kapanmaya kar %100 gvenlidir. Dosya boyutu ufak olduu iindorudan ram bellekte alabilir, vs.

    10. NAND Diskin Varsaylan Blmleri

    Beagleboardda ekil 1.3de verildii gibi nceden tanmlanm, varsaylan diskblmleri mevcuttur.

    ekil 1.3de verilen disk blmlendirmesi MS-DOS blmlendirmeleri ile

    ekil 1.3: Varsaylan disk blmleri.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    31 of 58

  • kartrlmamaldr. Flash disklerde bu blmlendirmeler tamamen mantksaldr. Ayrcabu blmlendirme bilgilerini saklayan MBR gibi zel bir disk sektr mevcutdeildir.Linux ekirdei blmlerle ilgili bilgileri mtdparts isimli ekirdekparametresinden alr.

    ekil 1.3de verildii gibi BeagleBoardun flash diski toplam 5 paraya ayrlmtr.Btn paralar isimlendirilmitir.

    Birinci parann ismi x-loader olarak verilmitir. x-loader esas itibari ile u-boottantretilmi ok basit bir ykleyicidir. x-loader ykleyicisinin bir program ile imzalanmhaline MLO denir. Bundan dolay u-boot derlendiinde MLO program da retilmi olur.Genelde btn NAND disklerin birinci paras MLO gibi birinci aama bootykleyicileri iin ayrlmtr. Varsaylan blmlendirmede MLO iin toplam 512 K yerayrlmtr.

    kinci disk blmnn ad u-boot ile verilmitir. u-boot blm iin toplam 1920 K yerayrlmtr.

    U-boot ok parametrik bir programdr. U-boot parametreleri iin 3. disk blmayrlmtr. u-boot-env olarak isimlendirilen bu blm iin 128K yer ayrlmtr. Btnkalc parameterler bu blmde saklanr. U-boot iinde iken printenv komutu ilemevcut btn parametrelerin listesi elde edilir. saveenv komutu ile de bu parametrelerkalc olarak u-boot-env disk blmne yazlr. U-boot bir sonraki boot aamasndance bu blm okur ve parametreleri atar.128Klk kapasite u-boot parametreleri iinok byktr. Disk sorunu olan gml sistemlerde bu blm tamamen atlabilir.Gerekli parametreler dorudan u-boot programnda ilgili bordun header dosyasndatantlabilir.

    Sonraki disk blm ekirdek iin ayrlmtr. Bu blme kernel ad verilmi ve 4Klkbir yer ayrlmtr. Derlenmi ekirdek 4Kdan daha byk olamaz. Daha byk biryere gerek olduunda mtdparts parametresi yeniden tantlmaldr.

    Diskin geri kalan ise fs (file system) ismi ile blmlendirilmitir.

    Bu disk blmlendirmesi varsaylan bir blmlendirmedir. Bu blmlendirmenin tanmekil 1.3de mtdparts ile gsterilmitir. mtdparts parametresi varsaylan blmler iinaadaki gibidir. Kolay okunmas iin satr blnmtr. lgili ifade tek satrdayazlmaldr.

    mtdparts=nand:512k(x-loader),

    1920k(u-boot),

    128k(u-boot-env), 4m(kernel),

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    32 of 58

  • -(fs)

    Yukardaki ifade ekil 1.3de verilen blmlendirme iin aklamaya gerekbrakmayacak kadar aikardr. -(fs)de bulunan - iareti, diskin geri kalan demektir.

    Bu disk blmlendirmelerindeki btn isim ve kapasitelerin tamamen keyfi olduunuhatrlatalm. Okuyucu isim ve kapasiteleri amacna gre tanmlayabilir. Fakat mevcutsrann korunmas her zaman tavsiye edilir.Genelde btn NAND diskler bu sradablmlendirilirler. Bu bir tr nem srasdr.

    ncelikle birinci, sonra ikinci aama boot ykleyicileri diskin en banda bulunmaldr.Sonra env ve ekirdek blmleri bulunmaldr. sim ve kapasite nemli deildir amasra nemlidir. nk hemen hemen btn NAND disklerde hatal sektrler bulunur.Ama bu sektrlerin diskin banda bulunmasna izin verilmez. Yani diskin ilk blmleriher zaman en salam yerlerdir.

    MLO olmadan, u-boot ie yaramaz. U-boot olmadan kernel ie yaramaz. Kernelolmadan kk dosya sistemi anlamszdr. Bundan dolay en nemli program, yani MLOilk blme yazlr. En az nemli olan kk dosya sistemi ise en son disk blmlerinekurulur.

    NAND diski keyfimize gre blmlere ayrabileceimizi sylemitik. ekirdeinmtdparts deerini anlayabilmesi iin aadakiler yaplmaldr.

    ekirdein mtdparts ifadesini ayrtrabilmesi iin make menuconfig aamasndaaadaki zellik ekirdee katlmaldr.

    Device Drivers ---> Memory Technology Device (MTD) support --->

    [*] Command line partition table parsing

    U-boot seviyesinde mtdparts deikeni yukarda verildii formatta, evre deikeniolarak tantlmaldr. evre deikeninin ismi de yine mtdparts olarak verilir. Bundandolay u-boot tarafnda mtdparts=mtdparts= eklinde garip bir durum ortaya kar.Birinci deiken ismi u-boot iin ve birinci eitten sonraki btn ifade ise ekirdeeolduu gibi aktarlmak iindir.

    Son olarak Linux ekirdeinin nand diski nasl tandna bakmak gerekir. Bunun iintabii ki daha nce en az 1 kere Linux ile amak gerekir. Aadaki gibi basit bir komutile ekirdein NANDa verdii isim tespit edilir.

    1 root@UcanLinux:~ # dmesg|grep nand

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    33 of 58

  • 2 Kernel command line:

    3 console=ttyO2,115200n8 4 root=/dev/ram

    5 mtdparts=omap2-nand.0:512k(x-loader),6 1920k(u-boot),

    7 128k(u-boot-env),

    8 4m(kernel),9 100m(fs1),

    10 50m(fs2),

    11 -(fs3)

    12 7 cmdlinepart partitions found on MTD device omap2-nand.0

    13 Creating 7 MTD partitions on "omap2-nand.0":

    root@UcanLinux:~ #

    Burada esas aranmas gereken ifade, 13. satrda verilen . on omap2-nand.0ifadesidir. Buradan ekirdein nand diski hangi isimle tand anlalr. Sonutamtdparts deikenine isim olarak bu deer girilir.

    Biz kendi projemizde diski 7 paraya bldk. Yukardaki kta 2 ve 11. satrlarntamam tek satrdr. Kolay okunmas iin yeni satrlar eklenmitir. Bizim projemizdekullandmz blmlendirme tanm, u-boot taraf iin, aada verilmitir. Btnifadenin, hi entera basmadan bir kerede yazlmas gerektiini tekrar hatrlatalm.Kolay okunmas iin satrlar eklenmitir.

    UcanLinux > setenv mtdparts "mtdparts=omap2-nand.0:512k(x-loader),

    1920k(u-boot),128k(u-boot-env),4m(kernel), 100m(fs1),50m(fs2),-(fs3) "

    Bizim yaptmz tanmdan da grlecei gibi ilk 4 blme sadk kalnm ama sonrakifs blm 3 farkl diske blnmtr.

    Bu yazda verilen rnek gml sistemde, kk dosya sistemi initramfs teknii ilekurulmutur. Initramfs iki trl kullanlabilir. Birinci tr kullanmda, ekirdek derlemesisrasnda RootFSin deeri aadaki gibi ekirdee tantlr.

    General setup --->

    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support (/nk/blog/1/RootFS) Initramfs source file(s)

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    34 of 58

  • Bu durumda ekirdek derlemesi bittiinde RootFS iinde bulunan kk dosya sistemiekirdein kaynak kodu iine gmlr. Daha nce yapm olduumuz cpio arivi veilgili dier ileri yapmamza gerek kalmaz. Literatrde tavsiye edilen yntem de budur.Fakat biz bunu yapmadk. Daha zahmetli olan dier yolu setik. Yani bu yaznnbanda anlatld gibi cpio arivi yaparak, nihayetinde uInitrd imajn elde ettik. Niin?

    Bunun tek sebebi ticari bir uygulama gelitirdiimiz iindi. Uygulamamz dorudanekirdein iine, derleme aamasnda gmecek olsaydk, lisansn da GPL yapmamzgerekecekti. nk ekirdek GPL lisansna sahiptir ve eklenen her programn da GPLveya muadili bir lisansa sahip olmas gerekir. Fakat kk dosya sistemi ayrk derlenirse,uygulama zel lisansl olabilir ve ekirdein lisansn ihlal etmez.

    imdi burada cevaplanmas gereken ok basit bir soru vardr. Varsaylan diskblmlendirmesine gre

    MLO program, x-loader blmne,

    u-boot.img program u-boot blmne,

    uImage.2048 ekirkdei de kernel blmne kaznacaktr.

    Peki kk dosya sistemini barndran uInitrd.2048 imaj nerede oturacaktr? Eer kkdosya sistemini ekirdein iine gmerek derleseydik bu soruya gerek kalmayacakt.nk ekirdei kernel blmne yazdmzda, ekirdek iine gml olan kkdosya sistemi de ekirdek ile birlikte kernel blmnde oturacakt.

    uInitrd.2048 imaj birka yerde olabilir. Biz fs sistemine hi dokunmadan kk dosyassistemini ekirdekten arta kalan bo yere yerletirdik. Sanki ekirdein iinde gibigrnyor ama ekirdein iinde deildir.

    Bu ok basit bir biimde, ekirdek ve kk dosya sistemi alt alta eklenerek yaplabilir.Sonuta tek bir dosya elde edilir. Elde edilen dosya kernel blmne tek dosyaymgibi yazlr. Bylece ekirdek ve kk dosya sistemi, yani uImage.2048 ve uInitrd.2048programlar kernel blmnde alt alta oturacaklardr. Birletirme ilemi aadakibalkta incelenecektir.

    11. ekirdek ve Initramfsin Birletirilmesi

    ekirdek ve kk dosya sistemi aadaki gibi alt alta yaptrlabilir.

    $ cat uImage.2048 uInitrd.2048 > kinitrd

    Nihai dosyaya, yani ekirdek ve kk dosya sisteminin birlemi haline kinitrddenilmitir. Aadaki gibi dosyalarn boyutlar ve kinitrdnin boyu ls -l ile incelenebilir.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    35 of 58

  • Dikkat edilirse kinitrdnin boyu kernel blmne smaldr. Eer smaz ise, yani4Mden byk olursa, yeni bir mtdparts tanm ile disk blm geniletilmelidir.

    -rw-r--r-- 1 root root 2516992 Aug 25 21:41 uImage.2048

    -rw-r--r-- 1 root root 1566720 Aug 25 20:56 uInitrd.2048

    -rw-r--r-- 1 root root 4083712 Aug 25 21:42 kinitrd

    Bu birletirme de uInitrdnin flash diskteki balang adresi ok nemlidir. ncelikleekil 1.5in NAND Disc ile verilen kernel blm dikkatlice incelenmelidir.

    x-loader blm her zaman diskin 0. adresinde balar. x-loader+u-boot+u-boot-envblmlerinin boylar bir hesap makinesinde toplanrsa 0280,000 olduu, aadakigibi grlebilir.

    kernel blmnn balang adresi= (512+1,920+128)*1,024 = 2,621,440

    = 0x280,000

    uInitrd.2048in boyunun, yukardaki ls -l kndan 2,516,992 veya 0266,800olduu grlebilir. O halde ekirdein balang adresine ekirdein boyunu eklersek,

    ramdiskin balangc= 0x280,000+ 0x266,800= 0x4E6,800

    ramdisk balag adresi olarak 0x4E6,800 deerini elde ederiz. Bu toplamayyapmaya hakkmz vardr. nk ekirdek ve uInitrd arasnda hi boluk yoktur. catkomutu iki dosyay tam alt alta yaptrr.

    ekirdek veya kk dosya sistemi her gncellendiinde bu hesab yapmak gerekir.Tembellik gerei, bu hesab otomatik olarak yapan, kur isimli bir betik yazlmtr.Ayrca u-boot iin gerekli komutlar da betik tarafndan retilmektedir. Bu komutlarnnasl kullanlaca sonraki blmlerde incelenecektir. Okuyucu imdilik kurprogramnn sonularn es geebilir.

    kur program 3 parametre alr. lk 2 parametre ekirdek ve kk dosya sistemininisimleridir. Birlemi dosyann ismi son argman olarak verilir. Nihai kta u-bootiine gerekli btn komutlar retilir. Bu komutlar copy/paste ile u-boot tarafnagirilebilir. Okuyucu bu betie gerek kalmadan yukardaki gibi toplam ilemini kendisiyapabilir.

    # ./kur uImage.2048 uInitrd.2048 kinitrd

    -rw-r--r-- 1 root root 2516992 Aug 25 21:41 uImage.2048

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    36 of 58

  • -rw-r--r-- 1 root root 1566720 Aug 25 20:56 uInitrd.2048

    -rw-r--r-- 1 root root 4083712 Aug 25 21:42 kinitrd

    Flash diske yazm iin...

    mmc init

    mmc rescan

    fatload mmc 0:1 80000000 kinitrd nandecc sw

    nand erase 280000 400000

    nand write 80000000 280000 400000

    Otomatik boot iin... Eer adresler deimemi ise tekrar tanm yapmaya gerek yoktur.

    setenv bootcmd "nand read 80000000 280000 266800; nand read 81600000 4E6800 17E800;

    bootm 80000000 81600000"

    saveenv

    u ana kadar bord iin gerekli btn programlar hazrlanmtr. imdi altn vuruyaplacak ve elde edilen btn programlar NAND diske yazlacak ve bord, MMColmadan otomatik olarak NAND flashtan alacaktr. Mutlu sona ermek iin ncelikleNAND disklerle alrken baz kurallara sk skya bal kalmak gerekir.

    12. NAND ile almak

    NAND diskler ile alrken aadaki 3 kural mutlaka dikkatlice uygulanmaldr.

    Diske yazlan her dosya, page deerine gre hizalanmaldr.1.ECC deeri olan hw veya sw, doru seilmelidir.2.Diske yazm yapmadan nce mutlaka erase ilemi yaplmaldr.Erase ileminden nce mutlaka ECC deeri dzgn seilmi olmaldr.

    3.

    Bu kurallardan biri gzard edilirse,Attempt to read non page aligned data veya CRC Error gibi hatalar gelebilir.

    13. Btn Dosyalarn NANDa Yklenmesi

    u ana kadar retilen btn dosyalar MLO, u-boot.img ve kinitrd dosyalar NANDdiske yklenecektir. Ykleme ii MMC kart ile yaplacaktr. Aslnda en ideal almaortam NFS yardm ile kurulur. Bu da ayr bir yaz konusu olacak ksmetse. ekil1.4de MMCden NAND blmlerine yaplacak kopyalama temsil edilmektedir. Btnsaylar 16lk sistemde verilmitir. Say nlerine 0x yazmay unuttum.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    37 of 58

  • Daha nce MLO ve u-boot.img programlar MMCye tanmtr. Son elde edilen kinitrdprogram da MMCye aadaki gibi aktarlr.

    # mount /dev/sdb1 /mnt/mmc

    # ls -l /mnt/mmc -rwxr-xr-x 1 root root 45780 Aug 23 19:35 MLO

    -rwxr-xr-x 1 root root 335576 Aug 24 09:16 u-boot.img

    # cp kinitrd /mnt/mmc

    # ls -l /mnt/mmc

    -rwxr-xr-x 1 root root 45780 Aug 23 19:35 MLO

    -rwxr-xr-x 1 root root 4083712 Aug 25 21:45 kinitrd -rwxr-xr-x 1 root root 335576 Aug 24 09:16 u-boot.img

    # umount /mnt/mmc

    Kopyalama bittikten sonra MMC borda taklr. Bord, USER butonuna baslarak alr.Otomatik al durdurmak iin Hit any key to stop autoboot: mesaj gelince,herhangi bir tua baslr ve al u-boot seviyesinde durdurulur. Aadaki ilemlerleMMCde bulunan MLO, u-boot ve kinitrd dosyalar flash diske yazlr.

    14. MLOnun Yklenmesi

    ekil 1.4: MMCdeki dosyalarn disk blmlerine aktarlmas.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    38 of 58

  • U-boot seviyesinde iken, MMCnin u-boot tarafndan alglanmas gerekir. Bunun iinmmc rescan komutu aadaki gibi girilir.

    UcanLinux > mmc rescan

    Bordda tek bir MMC/SD kart okuyucu olduudan, bu okuyucuya 0 sra numarasverilir. Bundan sonra, MMC/SD ile ilgili btn komutlarda mmc 0 ifadesi bulunacaktr.Aadaki gibi fatls komutu ile MMC kartn dizin listesi alnabilir.

    UcanLinux > fatls mmc 0

    45780 mlo

    4140160 flash.img 335576 u-boot.img

    3 file(s), 0 dir(s)

    U-boot sistemi, hem vfat hem de ext2 dosya sistemini destekler. Ama MLOdan dolayher zaman VFAT dosya sistemi kullanlmaldr. Aadaki gibi fatinfo komutu ile MMCcihaznn bilgileri elde edilebilir.

    UcanLinux > fatinfo mmc 0

    Interface: MMC

    Device 0: Vendor: Man 015041 Snr 1e576822 Rev: 9.2 Prod: S032B Type: Removable Hard Disk

    Capacity: 29.6 MB = 0.0 GB (60800 x 512) Partition 1: Filesystem: FAT12 "NO NAME "

    ktan da grlecei gibi yaklak 30 MBlk bir MMC kart ile iimi yapmaktaym. Bukart eski eyalarn iinde buldum, ok da ie yarad.

    U-boot sisteminin ok zengin bir komut kmesi vardr. Aadaki gibi help komutu ileher bir komuta ait zet kullanm bilgisi elde edilebilir.

    UcanLinux > help fatload

    fatload - load binary file from a dos filesystem

    Usage: fatload [bytes]

    - load binary file 'filename' from 'dev' on 'interface' to address 'addr' from dos filesystem

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    39 of 58

  • fatload komutu MMCden bordun belleine dosya yklememizi salar. Aadakikomut ile MLO program 080,000,000 adresine yklenmektedir.

    UcanLinux > fatload mmc 0:1 80000000 MLO

    reading MLO

    45780 bytes read

    Komutun kullanm son derece basittir. mmc 0 ile birinci MMC kart temsil edilir. Zaten1 tane kart okuyucu vardr. :1 ile birinci VFAT blm temsil edilir. 80000000 ileyklenecek bellek adresi verilir. Bu adresin ne olduu pek nemli deildir. Alkanlkgerei 080,000,000 verilir. Bu adres RAMn balang adresidir. Daha ileridekiadresler de verilebilir. bdinfo komutu ile adresler incelenebilir. Son argman olarakdosya ismi verilir. smi verilen bu dosya 080,000,000 adresinden sonra RAM belleeyklenir.

    Bir sonraki admda bellekte bulunan bu dosya NAND diskin x-loader ile verilenblmne yazlacaktr. Fakat yazm yapmadan evvel hata bulmaya ve dzeltmeyeyarayan ECC tipi verilmelidir. x-loader blmnde oturacak olan MLO programnROMdaki boot ykleyicisi okuyacaktr. ROMdaki boot ykleyicisi hw ecc desteivermektedir. Bundan dolay NANDa yazm yaplmadan evvel aadaki gibi hw eccseilmelidir.

    UcanLinux > nandecc hw

    HW ECC selected

    Bu sayede, U-boot program aadaki nand erase ve nand write komutlarnyrtrken hw ecc ile yazm yapacaktr. Sistem alrken Rom boot ykleyicisi dehw ecc yntemine gre hata analizi yapacandan sorun kmayacaktr. hw ve swsra ile hardware ve software kelimelerinden gelir.

    Daha nce bahsettiimiz alma prensiplerinden bir tanesinde, yazm yaplmadanevvel, o blgenin silinmesi ile ilgiliydi. Klasik bir IDE veya SCSI diskte, bir yere bilgiyazlaca zaman eskisi otomatik olarak ezilir. Fakat flash disklerde yazm ii eskibitlerin hepsini deitirmez. Bitlerin tamamen deimesi iin nce mutlaka eraseilemi yaplmaldr. NAND diskte silme ilemi aada verildii gibi nand erasekomutu ile yaplr.

    UcanLinux > nand erase 0 80000

    NAND erase: device 0 offset 0x0, size 0x80000

    Erasing at 0x60000 -- 100% complete.

    OK

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    40 of 58

  • Bizler x-loader blmn tamamen silmek istiyoruz. Bunun iin ilgili blmnbalang adresi ve uzunluunu vermek yeterlidir. ekil 1.4 de gsterildii gibix-loader blm 0. konumdan balar ve toplam 080,000 bayt yer kaplar. Silme iibittikten sonra aadaki gibi diske yazm yaplr.

    UcanLinux > nand write 80000000 0 80000

    NAND write: device 0 offset 0x0, size 0x80000

    524288 bytes written: OK

    nand write komutunun parametreleri kolayca tahmin edilebilir. Birinci parametre ilebellek adresi verilir. 080,000,000 ile verilen bellek adresini daha nce nand read ilekullanmtk. Yazm ii tamamlandktan sonra bu adresin bir kymeti olmayacaktr.Sonraki parametre ise x-loader blmnn diskteki balang adresi ve blmnboyudur. Boy olarak her zaman 080,000 kullandk. Aslnda buna gerek yoktur.Dorudan MLOnun boyunu versek de olurdu.

    Grlecei gibi ok basit bir mantkla, diske yklenecek dosya nce bellekte biradrese alnr, sonra da bellekten diske kaznr. u-boot.img ve kinitrd programlar daaadaki gibi diske kaznr. Mantk tamamen ayn olduu iin aklamaverilmeyecektir.

    15. U-Bootun NANDa Aktarlmas

    UcanLinux > fatload mmc 0:1 80000000 u-boot.img

    reading u-boot.img

    335576 bytes read

    UcanLinux > nandecc hw

    HW ECC selected

    UcanLinux > nand erase 80000 160000

    NAND erase: device 0 offset 0x80000, size 0x160000

    Erasing at 0x1c0000 -- 100% complete.

    OK

    UcanLinux > nand write 80000000 80000 160000

    NAND write: device 0 offset 0x80000, size 0x160000

    1441792 bytes written: OK

    16. kinitrdnin NANDa Aktarlmas

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    41 of 58

  • UcanLinux > fatload mmc 0:1 80000000 kinitrd reading kinitrd

    4083712 bytes read

    UcanLinux > nandecc sw SW ECC selected

    UcanLinux > nand erase 280000 400000

    NAND erase: device 0 offset 0x280000, size 0x400000

    Erasing at 0x660000 -- 100% complete. OK

    UcanLinux > nand write 80000000 280000 400000

    NAND write: device 0 offset 0x280000, size 0x400000 4194304 bytes written: OK

    Bu admdan sonra, daha nce kur betii ile retilen u-boot komutlar artk anlamkazanacaktr. kur program dosyalar diske yazabilmek iin gerekli u-bootkomutlarnn parameterlerini hesaplamakta ve raporlamaktadr. O rapordaaklanmayan sadece bootcmd parametresi kalmtr.

    U-boot sistemi bootcmd iine yazlan her komutu gz kapal iletir. Eer ekirdei vekk dosya sistemini ykleyecek ve boot edecek komutlar bootcmd iine yazarsak,bordun otomatik olarak almasn salayabiliriz.

    17. Otomatik Al

    Bu adma gelindiinde, NAND diskte gerekli btn dosyalar mevcut olacaktr. Fakatotomatik al iin u-boota yeni bir evre deikeni girmek ve onu u-boot-env blmiine kaydetmek gerekir. Bunun iin MMC kart borddan karlr, artk iimizkalmamtr. RESET dmesine baslarak bord tekrar balatlr ve herhangi bir tuabaslarak aln u-boot aamasnda kalmas salanr. Daha sonra aadaki bootcmd(boot command) komutu girilir ve saveenv komutu ile diske kalc olarak kaydedilir.

    UcanLinux > setenv bootcmd "nand read 80000000 280000 266800 ; nand read 81600000 4E6800 17E800 ;

    bootm 80000000 81600000"

    UcanLinux > saveenv

    Saving Environment to NAND...

    Erasing Nand...

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    42 of 58

  • Erasing at 0x260000 -- 100% complete.

    Writing to Nand... done

    Yukardaki bootcmd komutu, okumay kolaylatrmak iin paral yazlmtr. Gerektetek satr olmaldr. Buradaki bootcmd komutu ekil 1.5de temsil edilmitir.

    ekil 1.5 btn bootcmd komutunu aka resmetmektedir.

    nand read 80000000 280000 266800 komutu, 0280,000 disk adresinden itibaren,yani kernel blmn bandan itibaren 0266,800 bayt okuma yapar. 0266,800 baytaslnda uInitrd.2048 dosyasnn boyudur. Bu komut ile, NAND diskte bulunanekridek 080,000,000 adresinden itibaren bellee okunacaktr.

    nand read 81600000 4E6800 17E800 komutu da benzer bir i yapar. Bu komut kkdosya sistemini, yani uInitrd.2048 dosyasn 081,600,000 adresine okur. Bu adresinbir nemi yoktur. Yeter ki veriler birbirlerini ezmesinler. 0x4E6,800 adresi daha ncehesaplanmt. Bu adres hemen ekirdein altnda bulunan kk dosya sistemininbalang adresi idi. 0x17E,800 deeri ise uInitrd.2048 dosyasnn, yani kk dosyasisteminin boyudur.

    bootcmd iine birden fazla komut girildiinde, komutlar birbirlerinden ; ileayrlmaldrlar. Son olarak bootm 80000000 81600000 komutu iler. bootm kelimesi

    ekil 1.5: Otomatik al.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    43 of 58

  • boot from memory den gelir.sminden de anlalaca gibi 80000000 adresineyrtmeyi verir. Burada da ekirdek olduu iin bord almaya balar. bootm komutuayn zamanda 81600000 adresini, ekirdee ramdisk_addr parametresi olarak geirir.ekirdek de aldktan sonra bu adreste bir ramdisk olduunu anlar ve mount ederekal ilemlerini devam ettirir.

    Dikkat edilirse 81600000 adresini biz tamamen keyfi olarak verdik. Bu adres dahasonra ekirdee parametre olarak aktarlacaktr. te bu sebepten dolay kk dosyasistemi mkimage ile u-boot imaj haline getirilirken -a ve -e ile ilgili adresler 0 verilmiti.

    Sistemimiz otomatik olarak alacak ve aadaki gibi ok gzel, kapkara bir ekrangelecektir. root kullancsnn ifresi yine roottur.

    18. Logine Kadar Geilen Aamalar

    ekirdek kk dosya sistemini mount ettikten hemen sonra gz kapal bir biimde /initprogramn balatr. /inite gelen kadar geilen aamalar ekil 1.6da zetlenmitir.

    Linuxun gzel yz.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    44 of 58

  • Buraya kadar geilen aamalar nerede ise btn gml sistemlerde ayndr. Kkdosya sistemini kurarken /init programna /sbin/initi balamtk. Bylece aln/sbin/init program tarafndan ynlendirilmesini salamtk. Burada pek ok almakzm denenebilir.

    rnein /init program /bin/sh programna balanr. Bylece Linux alr almaz kabukprogram gelir.

    Uygulama programnn ad init yaplr ve dorudan kke atlr. ekirdek /init programngz kapal ileyecei iin, uygulamamz sistem alr almaz alacaktr.

    Peki uygulama son bulursa ekirdek ne yapacaktr? Initramfs esas kk dosya sistemideildir. Initramfsin almas bitince ekirdek initramfs ile ilgili hereyi bellekten silerve root parametresi ile verilen diski mount etmeye alr. Fakat biz henz byle biralma yapmadmz iin Linux kecektir. Initramfsden gerek kk dosya sisteminegei ayr bir inceleme konusudur. Fakat u an iin bu geiin hi bir nemi yoktur.nk Initramfs sistemi bizim btn ihtiyalarmz karlamaktadr.

    /sbin/init programn altnda, ekil 1.7de adm adm verildii gibi, login promptu vekabuk elde edilecektir. ok ak olduu iin ekil 1.7 ayrca incelenmeyecektir.

    ekil 1.6: /inite gelen kadar geilen aamalar.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    45 of 58

  • 19. Al Betii

    Daha nce gml bir sistemin 4 ayak zerine oturduundan bahsetmitik. Bunlarsra ile,

    Boot ykleyicileri1.ekirdek2.Kk dosya sistemi3.Al betikleri4.

    balklarnda zetlenebilir. u anda kadar 1. balk iim, MLO ve U-Boot sistemlerikullanld. ekirdek iin, Linux 3.5.2 ekirdei zerinde alld. Kk dosya sistemiolarak initramfs tercih edildi. Bu almalarn tamam bu adma kadar yapld. imdi 4.balkta verilen al betikleri zerinde ksaca durulacaktr.

    Standard bir Linux datmnda /etc/rc.d veya /etc/init.d gibi dizinler altnda onlarcaal betii bulunur. Bu al betiklerini, en st tarafta, genelde /sbin/init programtetikler. Fakat gml sistemlerde bu kadar karmak al betiklerine gerek yoktur.Baz gml sistemlerde standard bir datmda bulunan al betikleri nerede iseolduu gibi kullanlmaktadr. Bizce bu marklktr.

    Gml sistem, yaps itibari ile yapaca ii ve donanm hemen hemen ok kat birbiimde nceden tespit edilmi bir sistemdir. /etc/init.d/rc.network betii iin, cihazdaeternet var m, varsa a tanmlarn yapaym diyerek yola klmamaldr. Sistemde azellii ya vardr ya yoktur. nk donanm her hali ile ak seik bellidir. Tabii ki okzel durumlardan bahsetmiyoruz.

    Bu kadar laftan sonra, tek bir al betii yazlacaktr. Adet zerine bu betie rcS ismiverilmitir. rcS ismi, run command script veya run command single kelimelerindengeliyor olabilir, emin deilim.

    ekil 1.7de gsterildii gibi, /etc/rcS betii /sbin/init tarafndan balatlr. /sbin/initayaa kalkar kalkmaz /etc/inittab dosyasn okur ve oradaki her satrlar etiketdeelerine gre tek tek iler. Fakat satrlar ilemeden nce, ilk olarak sysinit etiketli

    ekil 1.7: Kabua gelene kadar geilen aamalar.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    46 of 58

  • satr arar. Eer bulursa bu satrda tanml program altrr. Bu satra /etc/rcS betiiyazlmtr. Bylece /sbin/init program ayaa kalkar kalmaz hemen /etc/rcS betiiniyrtecektir.

    rnek al betii aada verilmitir.

    1 #!/bin/sh -x

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

    3 mount -t sysfs sysfs /sys

    4 mkdir /dev/pts

    5 mkdir /dev/shm

    6 mdev -s

    7 mount -t proc proc /proc 8 mount -t devpts devpts /dev/pts

    9 mount -t tmpfs tmpfs /dev/shm

    10 hostname $SISTEM_ADI

    11 syslogd -C 12 klogd

    13 ifconfig lo 127.0.0.1 up

    14 route add -net 127.0.0.0 netmask 255.0.0.0 gw 127.0.0.1 lo

    15 telnetd

    16 df

    ncelikle burada yazlan her komutun busybox iinde olmas gerektiini hatrlatalm.Nihai sisteme geildiinde, busyboxa sadece rcS iindeki komutlar eklemek yeterliolacaktr. Ama test sisteminde bu hi tavsiye edilmez.

    Al betiinin en tepesine, 1. satrda verildii gibi -x ile debug seeneini eklemekok faydaldr. Bylece her komut ilemeden nce, komutun kendisi ekranayazlacaktr. Balangta hata bulmak iin ok faydaldr. -x ile debug alr, +x ilekapatlr.

    3. satrda sys dosya sistemi balanr. Bu dosya sistemi de /proc gibidir ama daha okdonanma ynelik bilgiler barndrr. Bu dosya sistemi mutlaka mdev komutundan ncebalanmaldr.

    4 ve 5. satrda /dev dizininin iinde olmas gereken 2 dizin almtr.Aslnda bunagerek yoktur. Dosya sistemi kurulurken mkdir ile de yaplabilirdi.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    47 of 58

  • 6. satrda verilen mdev komutu, /sys dosya sistemini tarar ve tanml btn cihazlariin /dev dizini altnda dmleri yaratr. mdev komutundan nce /dev dizininin iibotur. mdevden sonra dizin iinde cihazlarn isimleri ve dier bilgiler bulunur. Eermdev komutundan nce cihaz ismi gerektiren bir komut girilecekse, rnein/dev/ttyUSB0 ile ilgili bir i yaplacaksa, ilgili cihaz ismi aka mknod komutu ileyaratlabilir.

    7. admda, daha nce bahsettiimiz /proc dosya sistemi balanr.

    8. admda pty sistemi balanr. Dardan telnet veya ssh gibi programlarla gmlcihaza balanmak iin pty cihazlarna gerek vardr. /dev/pty dosya sistemi bucihazlara ihtiyac olan programlara cihaz ismi temin eder.

    9. admda /dev/shm dosya sistemi balanr. Buras geici disk olarak kullanlabilir.Dosya sisteminin varsaylan kapasitesi, fiziksel bellein yani RAM bellein tamyarsdr. Ama bu bellek hi bir zaman ramdisk gibi alnmaz. Dosya sistemi ihtiyaolduka byr, ihtiya olduka klr.

    /dev/shm dosyasndaki btn bilgiler, cihaz kapannca gider. Bir tr ramdisk gibidnlebilir. Ama ok daha yeteneklidir. Kk dosya sistemini read/only balayansistemler, genelde /tmp ve /var dizinlerini, yani yazlabilir dizinleri burayaynlendirilirler.

    /dev/shm cihaz normal bir disk gibi kullanlabilir. rnein, $ vi /dev/shm/dene.c ile testkodu burada yazlabilir. Ya da $ mkdir /dev/shm/falan gibi dizin yaratlabilir.

    10. admda, hostname komutu ile makine ismi tantlr. Bizler SISTEM_ADI deikeninivermeyi unutmuuz!

    11. admda sistem kayts balatlr. -C ile kayt, mesajlar evrimsel saklar. Dier birdeyile mesajlar belirli bir boydan daha fazla yer kaplayamaz. Bylece zaman iindediskin veya bellein mesajlarla dolmas engellenir.

    12. admda, klogd program ekirdekten gelen mesajlar syslogdye ynlendirir.Bylece ekirdek mesajlarnn syslogd tarafndan yakalanmas salanr.

    13 ve 1.4 admlarda localhost tanm yaplr.

    15. admda telnet sunucusu balatlr ki, borda a zerinden erielim. BizlerUSB/Ethernet eviricisi ile borda a zerinden balandk. Bu satr gzard edilebilir.nk bu yazda ne u-boot ne de linux tarafnda a zellikleri zerinde hi durmadk.Belki baka bir yaznn konusu olabilir.

    Basit Bir Gml Sistemin Kuruluu ucanlinux.com

    48 of 58

  • 16. admda df ile mount edilmi dosyalar listelenir. Bizler testlerimiz NFS zerindenyaptmz iin bu satr, bilgi babndan gerekli idi. u anki uygulamada gzardedilebilir.

    20. rnek Programn letilmesi ve strace

    Bu yaznn en banda ilk.c isimli bir program yazm, apraz olarak derlemi vederleme sonunda ilk.dynamic isimli bir dosya elde etmitik. Kk dosya sistemikurulurken bu dosyay /usr/bin altna atmtk. Bu dosya