Linux Açılış Süreci
Önceki Gömülü Sistemler İçin Linux Dağıtımı Geliştirme Sonraki
Linux Açılış Süreci
Bu bölüm doğrudan gömülü sistemlerde Linux kullanımıyla ilgili olmasa da, sisteme daha fazla hakim olabilmek, Linux açılışında sırasıyla neler olup bittiğini öğrenmek ve de en önemlisi bir sonraki bölümde anlatılacak olan Initial Ramdisk kullanımını daha iyi açıklayabilmek amacıyla belgeye eklenmiştir. Özellikle initrd kullanacak iseniz hangi işlemi nerede yapmanız gerektiğini, bunun sistem açılışını hangi aşamalarda nasıl etkileyeceğini bilmeniz gereklidir, aksi takdirde işler içinden çıkılmaz bir hal alacaktır.
Şimdi bilgisayarınıza elektrik verildiği andan itibaren neler olduğuna sırasıyla bakalım. Bu bölümde SBC sistemimizi değil, normal bir masaüstü bilgisayarı örnek alalım. SBC'ler genelde daha özel BIOS ve donanımlara sahip olduğundan ekranda göreceğiniz mesajlar farklı olacaktır.
Bilgisayarınızın açma butonuna bastınız, anakartınıza elektrik gelmeye başladı. Bakalım neler olacak.
Anakart BIOS'u, ekran kartının BIOS'unu tetikler
Bilgisayarınıza elektrik verildiğinde anakartınız üzerindeki BIOS uygulaması çalışmaya başlar ve o da ilk iş olarak ekran kartınızın BIOS'unu çalışması için tetikler. Ekran kartı BIOS'u çalışır ve kendini ilklendirir. Çoğu ekran kartı markası ve modeliyle ilgili ekrana bir şeyler yazar. Bu nedenle dikkat ederseniz ilk açılışta daha anakartın BIOS bilgilerinin gösterildiği ekran gelmeden, öncelikle ekran kartıyla ilgili bilgiler görüntülenir.
İpucu
Bilgisayarınızı yeniden başlattığınızda (soft reset) ekran kartı BIOS'u ilklendirme işlemlerini yeniden yapmaz, daha doğrusu anakart tarafından bu amaçla tetiklenmez.
ATI Technologies Inc Radeon Mobility M6 LW
32768 kB

VGA/VBE BIOS, Version 2.2
....
ve ekran temizlenir.
Anakartınızın BIOS'u kendini ilklendirir
Bu aşamada anakart BIOS'u çalışarak donanımların varlığından haberdar olur. Bellek, disket sürücü vb. gibi aygıtları test eder. Ekrana aşağıdakine benzer mesajlar çıkarır:
Memory Test: 131072K OK
Award Plug and Play BIOS Extension v1.0A
Copyright (C) 1998, Award Software, Inc.
Press DEL to enter SETUP
ve ekran temizlenir.
SCSI Controller BIOS'u tetiklenir
Sisteminizde bir SCSI kartı var ise SCSI veriyoluyla ilgili ilklendirmeleri yapar ve aşağıdakine benzer mesajlar çıkarır:
Adaptec AHA-2940 Ultra/Ultra W BIOS v 1.23
(C) 1996 Adaptec, Inc. All Rights Reserved.
>>> Press  for SCSISelect(TM)
    SCSI ID:LUNNUMBER #:# 0:0 - MICROP  3243-19 1128RQAV - Drive C: (80h)
ve ekran temizlenir.
Donanım Özet Bilgisi
Bu aşamada BIOS'unuz donanımınız hakkındaki bilgileri özetler (BIOS'tan yapılacak ayarlarla bu ekranların çıkması engellenmiş olabilir veya anakartınızın BIOS'u bu türden bir bilgi sunmayabilir).
                            Award Software, Inc.
 +------------------+------------------------+--------------------+---------+
 | CPU Type         | Cyrix M II/IBM 6x86MX  | Base Memory        |    640K |
 | Co-Processor     | Installed              | Extended Memory    | 130048K |
 | CPU Clock        | 233                    | Cache Memory       |   1024K |
 +==================+========================+====================+=========+
 | Diskette Drive A | 1.44M, 3.5 in.         | Display Type       | EGA/VGA |
 | Diskette Drive B | None                   | Serial Port(s)     | 3F8 2F8 |
 | Pri. Master Disk | None                   | Parallel Port(s)   | 278     |
 | Pri. Slave Disk  | None                   | Bank 0/1 DRAM Type | None    |
 | Sec. Master Disk | None                   | Bank 2/3 DRAM Type | EDO     |
 | Sec. Slave Disk  | None                   | Bank 4/5 DRAM Type | EDO     |
 +------------------+------------------------+--------------------+---------+
Ardından eğer varsa önyükleme sektörü virüslerine karşı BIOS'taki virüs kontrol kodu çalıştırılır ve önyükleme sektörü bilgisinin değişip değişmediği test edilir:
!!!! Trend ChipAwayVirus On Guard !!!! Now Detecting Boot Sector Type Virus...
ChipAwayVirus BIOS Version 1.62
Verifying DMI Pool Data.....
ve ekran temizlenir.
LILO çalışır
Ardından önyükleme için kullandığınız ortamın Ana Önyükleme Kaydı (MBR) okunur. Lilo kullandığınızı varsayarsak LILO içerisinden yapılacak ayarlamalarla değiştirilebilir olmasına karşın temelde ekrana LILO mesajı çıkartılır. Bu mesajdaki her bir karakterin aslında özel bir anlamı vardır. Bazen LILO yerine LI veya LIL deyip takılı kaldığını görebilirsiniz.
İlk "L" karakteri, lilo'nun kendini daha rahat hissedeceği 0x0009A000 adresine taşıması sonrasında ekrana çıkartılır.
"I" karakteri önyükleyici kodunun ikinci aşamasına geçilmeden hemen önce çıkartılır.
lilo'nun ikincil önyükleyici kodu ikinci "L" karakterini ekrana çıkartır, çekirdeğin bölümlerini gösteren tanımlayıcıları 0x0009d200 adresine yükler ve son olarak işlem bitince ekrana "O" karakterini çıkartır.
Ardından yapılan lilo ayarlamalarına göre değişebilecek bir boot komut istemi gelir. Burada birazdan yükleyecek olduğumuz Linux çekirdeğine parametre aktarabiliriz (örneğin kök dosya sisteminin ne olacağı).
Not
Eğer lilo kullanılmıyorsa ve önyükleyici kodu Linux çekirdeğinin başını gösteriyorsa linux/arch/i386/boot/bootsect.S Loading... mesajını ekrana çıkartır.
Linux çekirdeği çalışır
/linux/arch/i386/boot/setup.S kod parçası işlemciyi gerçek kipten 32 bit korumalı kipe geçirir. Sıkıştırılmış çekirdek (bzImage) açılır ve 0x00100000 adresine yüklenir. linux/arch/i386/head.S ve linux/arch/i386/boot/compressed/misc.c kodları sıkıştırılmış çekirdeği açma işlemlerini tamamlar ve işlemcinin yazmaçlarını (register) ayarlar. Bu aşamalarda aşağıdaki satır ekrana bastırılır:
Uncompressing Linux... Ok. Booting kernel.
Intel x86 mimarisine özgü setup.S görevini tamamladıktan sonra 0x00100000 adresine atlama (jump) yapar ve genel Linux kodunun çalışmasını sağlar:
İşlemci, konsol ve bellek ilklendirmeleri
Kesmelerin tanımlandığı linux/init/main.c'de start_kernel(void) çalışmaya başlar. Ardından linux/kernel/module.c konsol ve PCI veriyolu için gerekli sürücüleri yükler. Bu noktadan itibaren çekirdek mesajları bellekte saklanmaya başlar, bu mesajlara /bin/dmesg ile bakılabilir. Mesajların kalıcı olarak saklanabilmesi için çoğu zaman sistem tarafından /var/log dizini altında ayrıca bir dosyada kaydedilir. Sonra aşağıdaki satır linux/init/version.c tarafından ekrana çıkartılır:
Linux version 2.4.20 (root@laptop) (gcc version 2.95.4 20011002 ¬
(Debian prerelease)) #16
Cts May 3 19:06:51 EEST 2003
Ardından console_init(..) işlevi tarafından aşağıda mesaj ekrana çıkartılır:
Console: colour VGA+ 80x25
Bu işlevden hemen sonra calibrate_delay() işlevi çalışır ve aşağıdaki mesaj ekrana çıkartılır:
Calibrating delay loop... 2392.06 BogoMIPS
Sonra mem_init() işlevi çalışır ve işlem bitince aşağıdaki mesajı verir:
Memory: 257316k/262116k available (900k kernel code, 4412k reserved, ¬
410k data, 64k init, 0k highmem)
Ardından önbellek alanları düzenlenir ve işlemci türü test edilir, işlemcinin kabiliyetleri tespit edilir.
Dentry cache hash table entries: 32768 (order: 6, 262144 bytes)
Inode cache hash table entries: 16384 (order: 5, 131072 bytes)
Mount-cache hash table entries: 4096 (order: 3, 32768 bytes)
Buffer-cache hash table entries: 16384 (order: 4, 65536 bytes)
Page-cache hash table entries: 65536 (order: 6, 262144 bytes)
CPU: L1 I cache: 0K, L1 D cache: 8K
CPU: L2 cache: 512K
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU:     After generic, caps: bfebf9ff 00000000 00000000 00000000
CPU:             Common caps: bfebf9ff 00000000 00000000 00000000
CPU: Intel Mobile Intel(R) Pentium(R) 4 - M CPU 1.80GHz stepping 07
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
PCI veriyolu ilklendirmeleri
mpci_init() işlevi linux/arch/i386/kernel/bios32.c aşağıdaki mesajları çıkartır:
PCI: PCI BIOS revision 2.10 entry at 0xf0e40, last bus=2
PCI: Using configuration type 1
Hemen ardından pci_init() işlevi çalışarak PCI veriyolunu test etmeye başlar, alttaki mesajı çıkartır:
PCI: Probing PCI hardware
Ağ ilklendirmeleri
socket_init() işlevi ağ ile ilgili ilklendirmeleri yapar. linux/net/socket.c içerisinden aşağıdaki mesaj çıkartılır:
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
İlk süreç başlatılır (0): Kernel Idle Thread
Bu noktada init() işlevi tarafından mkswapd_setup() çağırılır ve aşağıdaki mesaj çıkartılır (Linux çekirdeği tamamen aktif olduktan sonra çağırılan /sbin/init ile karıştırmayın)
Starting kswapd
Aygıt sürücülerine ilişkin ilklendirmeler
Çekirdek kodu bu noktadan sonra desteklediği aygıtlar ve dosya sistemleri için ilklendirmeleri yapar, işlemlerini tamamlar ve ardından /sbin/init programını fork() ile çalıştırır.
Bu aşamalarda seri ve paralel portlar, karakter ve blok tabanlı erişim sağlanan aygıtlar, varsa SCSI veriyolu üzerindeki aygıtlar, ethernet kartı, farklı dosya sistemleri, PPP protokolü vb. tüm destekler ilklendirilir ve kullanıma hazır hale getirilir. Kullanılan donanım ve çekirdeğin özelliklerine göre çok farklı mesajlar ekrana çıkartılır, aşağıdaki örnek de bunlardan biridir:
Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ ¬
SERIAL_PCI enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
PCI: Found IRQ 11 for device 00:1f.6
PCI: Sharing IRQ 11 with 00:1f.5
PCI: Sharing IRQ 11 with 02:07.1
Uniform Multi-Platform E-IDE driver Revision: 6.31
ide: Assuming 33MHz system bus speed for PIO modes; override with ¬
idebus=xx
ICH3M: IDE controller on PCI bus 00 dev f9
PCI: Found IRQ 9 for device 00:1f.1
PCI: Sharing IRQ 9 with 02:07.2
ICH3M: chipset revision 2
ICH3M: not 100% native mode: will probe irqs later
    ide0: BM-DMA at 0x8400-0x8407, BIOS settings: hda:DMA, hdb:pio
    ide1: BM-DMA at 0x8408-0x840f, BIOS settings: hdc:DMA, hdd:pio
hda: IC25N040ATCS04-0, ATA DISK drive
hdc: TOSHIBA DVD-ROM SD-R2102, ATAPI CD/DVD-ROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
blk: queue c027fde4, I/O limit 4095Mb (mask 0xffffffff)
hda: 78140160 sectors (40008 MB) w/1768KiB Cache, CHS=4864/255/63, ¬
UDMA(100)
Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 >
Floppy drive(s): fd0 is 1.44M
İlklendirme işlemleri bittikten sonra kök dosya sistemi bağlanır ve /sbin/init programı çalıştırılır. Çekirdek son olarak aşağıdaki satırları ekrana çıkartarak açılış işlemini tamamlar. Bu aşamadan sonra dmesg ile gördüğünüz çekirdek mesajları artık /sbin/init tarafından gerçekleştirilen sistem açılışı, sonradan eklenen, çıkarılan çekirdek modülleri vb. hakkında olacaktır, yükleme işlemi çekirdek için tamamlanmıştır.
VFS: Mounted root (ext3 filesystem) readonly.
Freeing unused kernel memory: 64k freed
Çekirdek içerisinden başlatılan idle thread (süreç numarası 0) tarafından çalıştırılan /sbin/init uygulaması daima sistemdeki 1 numaralı süreçtir. Geri kalan tüm süreçlerin anası durumundadır. Çalıştığında ekrana INIT: version 2.76 booting gibi bir mesaj çıkarır ve /etc/inittab dosyasını okuyarak gerekli işlemleri yapmaya başlar.
Önceki Üst Ana Başlık Sonraki
Seri Konsol Başlangıç Initial Ramdisk (Initrd)
Bir Linux Kitaplığı Sayfası