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.