  LILO "the Linux Loader" ̓ɂ
  앐r / Taketoshi Sano, (kgh12351@nifty.ne.jp)
  $Date: 2000/12/15 18:39:54 $, ($Revision: 1.10 $)

  ́̕ALILO "the Linux Loader" ̓ɂĐ̂łB
  AΏۂƂĂ LILO  version 21.5.1 łA_ł̍ŐVłł
   LILO version 21.6 Ƃ͈قȂ܂B
  ______________________________________________________________________

  ڎ

  1. N̓
     1.1 1st boot loader
     1.2 2nd boot loader
     1.3 BIOS ɂfBXNf[^̃[h
     1.4 Option linear
     1.5 Option lba32
     1.6 ̑

  2. /sbin/lilo R}hs̓
  3. ⑫
     3.1 ̕ɂ
     3.2 MBR pu[gZN^ɂ
     3.3 Ql

  ______________________________________________________________________

  1.  N̓

  NɎs LILO ̃R[hɂ́A1st boot loader  2nd boot
  loader  2 ނ܂B

  ̃R[h͒ʏA/boot/boot.b Ƃt@C̒ɕۑĂ
  B /boot/boot.b ̐擪 438bytes  1st boot loader ̃R[hłA
  擪 512bytes c肪 2nd boot loader ̃R[hɑ
  B

  "lilo" R}hsƃR}hCIvV -b bootdev 
  t@C lilo.conf boot=bootdev ɂĎw肳ꂽꏊ̃u[gZN
  ^[ 1st boot loader CXg[܂B̂Ƃ "lilo"
  R}h̃IvVݒt@C lilo.conf ɂĎw肳ꂽ
  timeoutAdelayApromptAftHg (J[l) NIvVȂǂ
  p[^A܂ 2nd boot loader }bv (J[lʒu) t@C
  A (w肳ꂽꍇɂ) NbZ[Wt@CL[{[hϊ
  e[ut@C̃fBXN̈ʒuZN^[AhXȂǂ̏
  1st boot loader ̒̃f[^̈ɕۑ܂B

  1st boot loader  2nd boot loader [Ƀ[ĥڂ
  B LILO ̋NR[h̎vȋ@\ׂ͂ 2nd boot loader ̒ɂ
  ܂B 2nd boot loader  1st boot loader ̒Ɋ܂܂Ă
  Ƀ}bvt@C[hĂ̏͂Ǎʂɏ]ăJ[l
  R[h[h܂B܂Kvȏꍇɂ initrd Ŏgp郋[gC[
  W̃[h 2nd boot loader s܂BNvvg̕\gp
  J[l̑I 2nd boot loader ̋@\łB

  1.1.  1st boot loader

  LILO ɂu[gł́AŏɃu[gZN^[̐擪 438 bytes ɋL^
   1st boot loader  BIOS ܂ MBR ɒuꂽ̃u[g[_[
  ă[h܂B[hɐA1st boot loader sJn
  ƍŏ "L" Ƃ\܂B

   1st boot loader  "lilo" R}hsɎ̒ɋL^ꂽ
  2nd boot loader ̃fBXN̈ʒu (ZN^[AhX)  BIOS ɒ񎦂
  āAZN^[Pʂ BIOS  2nd boot loader [h܂B[h
  ƁAR\[ "I" Ƃ\ 2nd boot loader ɐ
  n܂B

  lilo ̃\[XR[h 1st boot loader ɑ̂ first.S łB
  (ȂĂ킩₷Oł傤I) L "L", "I", ̕\sĂ
  ̂́Aꂼ

       go:
       ;       cli                     ! no interrupts
               mov     ds,ax           ! AX is already set
       ;;      mov     es,ax           ! (ES may be wrong when restarting)
               mov     ax,#STACKSEG
               mov     ss,ax
               mov     sp,#STACK       ! set the stack
               sti                     ! now it is safe

               mov     al,#0x0d        ! gimme a CR ...
               call    display
               mov     al,#0x0a        ! ... an LF ...
               call    display
               mov     al,#0x4c        ! ... an 'L' ...
               call    display

  

       done:   mov     al,#0x49        ! display an 'I'
               call    display
               jmpi    0,SECONDSEG     ! start the second stage loader

  ̕łBRgǂ߂΁AĂ邩z܂ˁB

  Əڂ 1st boot loader ̓邽߂ɁA lilo ̃\
  [XƈꏏɔzzĂ tech.tex p܂B ( tech.tex 
  Âo[WΏۂɏĂ̂ŁÃR[hƂ͕Kv
  ĂȂ܂B{Iȏ̗͂܂ςĂȂ
  v̂ŁATmł̎Qlɂ͂Ȃł傤B)

       The boot sector is loaded by the ROM-BIOS at address
       0x07C00. It moves itself to address 0x9A000, sets up the
       stack (growing downwards from 0x9B000 to 0x9A200), loads the
       secondary boot loader at address 0x9B000 and transfers con-
       trol to it.

       ROM-BIOS  1st boot loader  0x07C00 Ƀ[hƁA 1st
       boot loader ͎g 0x9A00 ɃRs[AX^bN
       0x9B000  0x9A200 ւƗpӂA2nd boot loader  0x9B000
       Ƀ[hĂ֐ڍs܂B

  1.2.  2nd boot loader

  2nd boot loader sJnƁA 2 Ԗڂ "L" Ƃ\
  ܂B 2nd boot loader ́Amap t@C̐擪̕[h
  Bɂ LILO ̃u[gj[őIƂĕ\郉x̖O
  ApX[hȂǂ̏񂪋L^Ă܂B

  ̐擪̍\ LILO ̃\[XR[hɂ common.h ňȉ̂悤
  ɋK肳Ă܂B

       typedef struct {
           char name[MAX_IMAGE_NAME+1];
           char password[MAX_PW+1];
           unsigned short rd_size[2]; /* RAM disk size in bytes, 0 if none */
           SECTOR_ADDR initrd,start;
           unsigned short start_page; /* page at which the kernel is loaded high, 0
                                         if loading low */
           unsigned short flags,vga_mode;
       } IMAGE_DESCR;

  ̃}bvt@C擪̃[h "O" ƂR\
  [ɕ\Aw肳ꂽ҂Ԃ̂AL[͂`FbN܂B

  ̌Avvg\L[͂ɑ΂鏈sAꂩNJ
  [lɑΉAhX}bvL SECTOR_ADDR initrd,start ɂ
  Ďw肳ꂽZN^[AhX烍[hÃ}bvt@CɋL^
  ĂJ[l initrd t@C̃ZN^[AhXǂāAꂼ
  [hĂ܂B

  KvȃZN^[̃[hׂĐAJ[lR[hɐڍs
   LILO ͓܂B

  2nd boot loader ̓ɂčĂ tech.tex pĂ܂B

       The secondary boot loader loads the descriptor table at
       0x9D200 and the sector containing the default command line
       at 0x9D600. If the default command line is enabled, its
       magic number is invalidated and the sector is written back
       to disk. This potentially dangerous operation can be dis-
       abled by defining LCF_READONLY when passing second.S through
       cpp.  Next, the secondary boot loader checks for user input.
       If either the default is used or if the user has specified
       an alternate image, the options sector is loaded at 0x9D600
       and the parameter line is constructed at 0x9D800.  If the
       resulting line contains the option "lock", the command line
       as entered by the user (it is saved before the final line is
       constructed) is written to the disk as the new default com-
       mand line. Also, if a fallback command line is set, it is
       copied to the default command line sector.

       2nd boot loader ̓fXNv^e[u (map file [h
       邽߂̒ԏ)  0x9D200 ցAftHg̃R}hC
       p[^ (lilo.conf Ŏw肳ꂽ)  0x9D600 փ[
       hBɃ[U[̓͂𒲂ׁAIꂽC[W̃Iv
       VZN^[ 0x9D600 փ[hċNp[^
       0x9D800 ɍ\B

       Next, the floppy boot sector of that image is loaded at
       0x90000 (The floppy boot sector is only used as a source of
       setup information.), the setup part is loaded at 0x90200 and
       the kernel part is loaded at 0x10000, or, if the kernel has
       been compiled for being loaded ``high'' (i.e. with make
       bzImage), it is loaded at 0x100000 instead. During the load
       operations, the sectors of the map file are loaded at
       0x9D000.

       ɁA(J[l) tbs[u[gZN^[ 0x90000 փ[
       hAZbgAbvR[h 0x90200 ցAJ[l{̃R[h
       0x10000 ܂ 0x100000 փ[hBO҂̓J[l zIm-
       age ̏ꍇA҂ bzImage ̏ꍇłB (ȂJ[l̃t
       bs[u[gZN^[Ƃ̓tbs[fBXN Linux J[
       lN邽߂̃R[hłAJ[lt@C̐擪
       512bytes ɑBɂ rdev R}hŐݒł郋[
       gfoCXXbvfoCXȂǂ̃J[lp[^L^
       Ă邽߁AHDD Nꍇɂ[Ƀ[h
       B܂J[l̃ZbgAbvR[hƂ̓tbs[u[gZN
       ^[ɑłABIOS ֌W̏⃁[TCYȂ
       foCX̎擾ArfI֌W̐ݒ CPU  32bit [h
       ̈ڍsȂǂsȂB) }bvt@C̃J[lʒu (Z
       N^[AhX) ͂̃J[l[hƎs 0x9D000 
       [hAVZN^[[h邽тɎ̃ZN^[
       ʒuɂď㏑ĂB

       If the loaded image is a kernel image, control is trans-
       ferred to its setup code.

       [hꂽC[WJ[lȂA0x90200 փ[hJ[
       l̃ZbgAbvR[h֐ڍs LILO ̓͊B

       If a different operating system is booted, things are a bit
       more difficult: the chain loader is loaded at 0x90200 and
       the boot sector of the other OS is loaded at 0x90400. The
       chain loader moves the partition table (loaded at 0x903BE as
       part of the chain loader) to 0x00600 and the boot sector to
       0x07C00. After that, it passes control to the boot sector.

        OS Nꍇ́A傢ƘbĂB`FC
       [_ 0x90200 Ƀ[hA OS ̋NZN^ 0x90400
       Ƀ[hBɃ`FC[_̓p[eBVe[u
       (`FC[_̈ꕔƂ 0x903BE Ƀ[hĂ) 
       0x00600 ɃRs[A( OS ) NZN^ (ROM-BIOS 
       1st boot loader [hƂ̓ꏊł) 0x07C00 ɃR
       s[B̌ŁA0x07C00 ̋NZN^֐ڍs΁A
        ROM-BIOS ɂă[hꂽ̂Ɠlɑ OS ̋N
       JnAƂ@B

       Chain loaders that allow booting from a second drive (either
       floppy or hard disk) also install a small function to inter-
       cept BIOS calls and to swap the drive numbers at the top of
       available memory.

       2 Ԗڂ̃hCuN邽߂̃`FC[_ɂ́ABIOS
       R[gbv (intercept) ăhCuԍꊷ
       (swap) ߂̂Ƃ֐𗘗p\ȃ[̈ԏ
       CXg[ĂƂƂKvɂȂB

  1.3.  BIOS ɂfBXNf[^̃[h

  1st boot loader  2nd boot loader ƂAfBXN܂̓tbs[
  t@C[Ƀ[hƂ́Aׂ BIOS 𗘗pčsȂ
  ܂B̂߂ LILO  BIOS ł悤AΏۂƂfBXÑf
  oCX ID ƃZN^[AhXɂă[ht@Cw肵܂B

  LILO ܂삹AJ[lNłȂƂāA

  1. ZN^[AhXȂꍇ

  2. fBXÑfoCX ID Ȃꍇ

      2 ނl܂ (ɊYꍇ蓾܂)B

  ZN^[AhXȂꍇƂ̂́A CHS ANZX̏ꍇ
  BIOS FĂfBXÑWIg (C,H,S ̒l)  Linux J[l
  FĂWIgقȂꍇA24bit  CHS AhXł͕\
  łȂʒuɂꍇ ( 1023cyl ) Ȃǂ܂B
  ɂĂ linear IvV lba32 IvVw肷邱ƂőΏ
  \ł (̃IvVɂĂ͌Ő܂)B

  fBXÑfoCX ID ȂꍇƂ̂́ALILO 肵
  foCX ID ۂ BIOS ̔F ID ƈvĂȂꍇłB
   SCSI  IDE ̃fBXN݂VXeAŋ߂ł UDMA66 
  fBXN𗘗pVXȅꍇɔ\悤łB

  BIOS R[ 0x13 ł͍ŏ̃tbs[foCX 0x00A2 Ԗڂ̃tbs
  [foCX 0x01 ƂāA܂ŏ̃fBXNfoCX 0x80A2 Ԗڂ
  fBXNfoCX 0x81 ƂĔF܂B܂ BIOS Nn[hfB
  XNƂĔFĂfBXN͏ɃfoCX ID 0x80 ŃANZX
  B

   LILO ̃ftHgł hda, hdb, sda, sdb ̏ɃfoCXA
   0x80, 0x81, 0x82, 0x83 Ɣԍ蓖ĂĂ܂B]
   SCSI  IDE ݂̍VXe SCSI fBXNNfBXNƂ
  w肵ĂꍇAUDMA66 ̃fBXN (hde) NfBXNƂĎw肵
  Ăꍇɂ BIOS ̔F LILO ̐lvANłȂƂ
  肪N܂B

  ꍇɂ́Aman lilo.conf ɋLڂĂ disk=device_name ̐
  ɂ bios=dev_id 𗘗p LILO  BIOS ̔FĂfoCX ID
  ĂKv܂B

  LILO ̃\[XR[hɂ BIOS 𗘗păfoCX ID ƃfBXNhCu
  Ƃ̑Ή𒲂ׂc[ (disk.com  dparam.com Ȃ) ܂܂Ă
  ŁA𗘗p BIOS ̔FĂfoCX ID mFĂƗ
  ł傤B

  1.4.  Option linear

  ƂǂႢ܂Alilo.conf ̃p[^ "Option
  linear" ǉĂALILO ̃u[g[_[fBXNt@C
  [h鎞 INT13 AH=4?  Extended BIOS R[𗘗p킯ł͂
  ܂B

  ̃IvV́A}U[{[h BIOS FfBXÑWIg
  Linux J[l̔FWIg݂ɈقȂꍇALILO ̎g}b
  vt@Cɂ̓jAZN^[AhXۑĂāANɁuBIOS
  FfBXÑWIgvƂ CHS ZN^[AhXɊ
  ZÃAhX BIOS ɓnăfBXNKvȃZN^[[h
  Ƃw肷̂łB

  ̃IvVw肵ĂALILO u1023 V_v𒴂̈ɃAN
  ZX邱Ƃ͕s\ł̂ŁA䒍ӉB

  1.5.  Option lba32

  ̃IvV LILO 21-3 ȍ~ŃT|[gꂽ̂łB

  }U[{[hfBXNhCuŋ߂̂̂ŁAǂĂ 1023 V_
  ̕ǂ𒴂ċNꍇɂ́ÃIvVĂ݂Ɨǂ
  傤B

  1.6.  ̑

  Linux J[l̋NR[h̏ڍׂɂẮARgǂ Linux J
  [l <http://www.linux.or.jp/JF/JFdocs/readkernel.html> QƂĂ
  Bȉ LILO Ɋ֘A镔̊TłB

  Linux J[l̐擪 512bytes ̓J[lOŎĂu[g[_
  [łA "make zdisk" ō쐬u[gtbs[̋Nł͂ꂪ
  g܂B

  ̎Õu[g[_[ i386 n̏ꍇ J[l\[Xc[
  arch/i386/boot/bootsect.S ɂ܂B

  LILO  LOADLIN ̋Nł́AJ[l̃[hƂ̕
  (bootsect) ΂Ď setup.S  video.S ̃R[hɐڍs
  B CPU ̓ 16bit [h 32bit [hɈڍŝ setup.S
  ̒ŎsĂ܂B

  ̎sIƎ arch/i386/boot/compressed/head.S s
  ܂B͍ŏ 32bit [hŎs邱ƂOƂR[h
  ɂȂĂ܂B head.S ̒ɂ decompress_kernel() k
  J[l{̂WJ܂B head.S ̎s͓WJꂽJ[l{̂ɐ
  nĊ܂B

  2.  /sbin/lilo R}hs̓

  "lilo" R}h͕ʖ map creator (}bv쐬c[) ƌĂ΂ĂA
  ̎ȋ@\͐ݒt@C lilo.conf ̉ǂƁA̒̎w肨уR}
  hCIvVɂwɏ]ă}bvt@C (bootloader N
  Ɏgpt@C) 쐬A̒ɕKv Map Descriptor Table
  K؂ɋL^邱ƂłB

  ʏ "lilo" R}h lilo.conf ǂāAgpJ[lƂɎw
  肳ꂽ Image t@C (сA initrd t@C) ɑ΂
  ZN^[AhX擾ANɎgp Map Descriptor Table
  ̃f[^^ɂă}bvt@Cɕۑ܂B

  "lilo" R}hŃt@CZN^[AhX𒲂ׂ镔 geometry.c
   geo_find() ɂ܂B

  "lilo" R}h -v IvV𕡐d˂ċNƁA}bv쐬Ɏg
  pꂽZN^[AhXώ@邱Ƃł܂B
   Image= Ŏw肵t@C}EgĂȂt@CVXe
  ɂƁA"lilo" R}h͂̃t@Cɑ΂ZN^[AhX𒲂
  邱ƂłɃG[o܂B

  ȂANɎgp 2nd boot loader ̃ZN^[AhX 1st boot
  loader ̃R[hɏނ̂ "lilo" R}h̎dłB

  3.  ⑫

  3.1.  ̕ɂ

  Linux p̃u[g[_[ƂāA "lilo" gꍇ̂łA
  }jAŃG[bZ[ẄӖmFۂȂǁA𗝉Ă
  ƂƖɗ낤ƎvĂ̕쐬܂B

  ̕ۂɂ LILO ̃\[XR[h Linux J[l̃\[XR[
  hA܂ɂĉߋ fj.os.linux  Nifty FUNIX ŋc_e
  ȂǂQlɂĂ܂Bc_̒ł낢ƋĂXɊ
  ܂B܂ JF ݂̂Ȃɂ͕͂̍ZeɂĂ̒ĂȂǁA
  ƗLvȌӌ𒸂܂B

  eɂĂ͂ł萳młA܂܂ԈႢ
  ĂȂǂ邩܂B̕ɑ΂ӌA䊴zA
  Ⴂ̎wEȂǂ܂A҂܂ JF project ܂Ō񒸂΂
  킢łB

  ȂA̔̕zzɂĂ GPL2 ɏ]̂Ƃ܂B

  3.2.  MBR pu[gZN^ɂ

  lIȍD݂łA"lilo" ̃CXg[ MBR (Master Boot Record,
  n[hfBXN擪̃u[gZN^)  Linux VXẽ[gp[
  eBV̂قKĂƎv܂Bn[hfBXN MBR ɂ͂
  ʓIȃu[gZN^AƂ os-bs, bteasy, extIPL, btsel, GAG  
  ǂCXg[قguN̑ΉȂǂlƂ
  Sł܂B

  GAG ̕ɂĂ JF ɓ{󂪂܂B

  ŋ߂ MBM  SBM Ȃǂ̐Vu[g}l[WlC悤łB
  MBM ͋Nj[̔wiƂčDȉ摜\ł_łB

  ̒łɌlIȂE߂ extIPL
  <http://www.tsden.org/takamiti/extipl/> łBo[W 5 (݃x[^
  ł̃eXgJł)  LBA32 ANZXɂΉA܂N
  ̃j[ GUI Ȃ̂ƂȂAp[eBVʂ镶C
  ɐݒł悤ɂȂ܂B܂g̘̈_̈悩]l
  N\łB\[XJ (Ver 5 烉CZX GPL2 ɂȂ܂) 
  A Linux  make ł (gcc + nasm) _Ȃ|Cg
  łB

  3.3.  Ql

  o  Rgǂ Linux J[l
     <http://www.linux.or.jp/JF/JFdocs/readkernel.html>

  o  n[hfBXNhCůbm
     <http://www.linux.or.jp/JF/JFdocs/hdd-intro.html>

  o  Large Disk HOWTO <http://www.linux.or.jp/JF/JFdocs/Large-Disk-
     HOWTO.html>

  o  Lilo mini-Howto <http://www.linux.or.jp/JF/JFdocs/LILO.html>

  o  LILO FAQ <http://www.linux.or.jp/JF/JFdocs/LILO-FAQ.html>

  o  GAG (GRAPHICAL BOOT MANAGER)
     <http://www.linux.or.jp/JF/JFdocs/GAG.html>

  o  extIPL <http://www.tsden.org/takamiti/extipl/>

  o  u[gFX <http://www.geocities.co.jp/SiliconValley-
     Bay/2414/linuxboot/boot.html>

  o  }`u[g̎d
     <http://www.tkcity.net/~nobusan/hardware/boot_hdd/multi_boot/index.html>

  o  u[gƃn[hfBXNׂ̂
     <http://www.tkcity.net/~nobusan/hardware/boot_hdd/index.html>

