LILO
Önceki C. GRUB ve LILO Sonraki
LILO
GRUB'dan farklı olarak, LILO sistemi önyüklerken yapılandırma dosyasını kontrol etmez. lilo uçbirimden çağırıldığında bazı trikler ortaya çıkar.
Aşağıdaki LILO program anahatları lilo-22.5.8 tabanlıdır.
lilo.c:main()
|-- cfg_open(config_file);
|-- cfg_parse(cf_options);
|-- bsect_open(boot_dev, map_file, install, delay, timeout);
|   |-- open_bsect(boot_dev);
|   `-- map_create(map_file);
|-- cfg_parse(cf_top)
|   `-- cfg_do_set();
|       `-- do_image();             // "image=" bölümü için walk->action
|           |-- cfg_parse(cf_image) -> cfg_do_set();
|           |-- bsect_common(&descr, 1);
|           |   |-- map_begin_section();
|           |   |-- map_add_sector(fallback_buf);
|           |   `-- map_add_sector(options);
|           |-- boot_image(name, &descr) veya boot_device(name, range, &descr);
|           |   |-- int fd = geo_open(&descr, name, O_RDONLY);
|           |   |   read(fd, &buff, SECTOR_SIZE);
|           |   |   map_add(&geo, 0, image_sectors);
|           |   |   map_end_section(&descr->start, setup_sects+2+1);
|           |   |       /* bsect_common()içinde iki sektör yaratıldı,
|           |   |        * bootsect için ise başka bir sektör*/
|           |   |   geo_close(&geo);
|           |   `-- fd = geo_open(&descr, initrd, O_RDONLY);
|           |       map_begin_section();
|           |       map_add(&geo, 0, initrd_sectors);
|           |       map_end_section(&descr->initrd,0);
|           |       geo_close(&geo);
|           `-- bsect_done(name, &descr);
`-- bsect_update(backup_file, force_backup, 0); // önyükleme sektörünü güncelle
    |-- make_backup();
    |-- map_begin_section();
    |   map_add_sector(table);
    |   map_write(&param2, keytab, 0, 0);
    |   map_close(&param2, here2);
    |-- // ... önyükleme sektörünün yeniden yerleştirilmesini yap
    |-- // ... bsect_wr'yi doğru yere ayarla
    |-- write(fd, bsect_wr, SECTOR_SIZE);
    `-- close(fd);
map_register() tüm kayıtlı sektörleri tanımlamakta kullanılan (CX, DX, AL) üçlüsü (veri yapısı SECTOR_ADDR) için bir liste tutarken map_add(), map_add_sector() ve map_add_zero() işlerini tamamlamak için map_register()'ı çağırabilir.
LILO sistemi yüklemek için first.S ve second.S'yi çalıştırır. Eşlem (map) dosyasını, bootsect ve kurulum kodunu yüklemek için second.S:doboot() yöntemini çağırır. Sonra, sistem kodunu yüklemek için lfile() yöntemini çağırır, launch2() -> launch() -> cl_wait() -> start_setup() -> start_setup2() yöntemini çağırır ve son olarak ayar kodunu çalıştırmak için jmpi 0,SETUPSEG komutunu çalıştırır.
LILO'nun ayrıntıları için "man lilo" ve "man lilo.conf"a bakınız.
Önceki Üst Ana Başlık Sonraki
GNU GRUB Başlangıç Kaynakça
Bir Linux Kitaplığı Sayfası