星期四, 3月 02, 2006

small linux bootloader - x86, hd

Jlo : Jeff's loader

embedded x86 pc 所用的linux bootloader.
small, easy to unstand and customize.

不像lilo, grub 等多功能,Jlo 不具備以下功能
  1. 由ext2 partition 開機
  2. Serial port console
  3. raid
  4. 由extended partition 開機
  5. 由/dev/hda以外的device開機
  6. boot選單
  7. boot old kernel
他所具備的優點有
  1. 大部分以C寫成
  2. 由cramfs root partition開機
  3. 變更VESA video mode,顯示splash 開機畫面
  4. 提供build disk image的script,不需要root priveleges 和利用fdisk, lilo..etc
Program structure
jlo由兩部份組成:part 1是mbr.S, 是一個512 bytes boot sector,內含partition table資訊和一個load program,用來load "secondary bootstrap"。
另提供一個script修改這個parition table。好用來boot其他parition。
mbr.S 利用這個table,將 2nd sector 的secondary bootstrap program load進來。
Secondary bootstrap 是一段約6k byte的16 bit real mode C program。
他初始化VESA 螢幕,load 開機畫面,load 第一個active partition 的linux kernel進來。
boot。

User Interface
  1. shift key : 將boot控制交給BIOS--通常BIOS會由PXE開機。
  2. ctrl key : 使用text mode開機
  3. alt key : show partion selection 選單
Installing
download, unpack , run make command 後產生file : jlo。內含MBR和secondary loader。這個file將要放到第一個sector中。
之後是 config parition,create cramfs partition...
提供一個perl program - mkimage用來build root image。
這個program default是對8M CF動作。
command:
 % ./mkimage --sector=32 --heads=2 --cylinder=248 -p1=myfs --image=cf.img
其中myfs是包含kernel, root的cramdfs image。
這個command最後產生cf.img檔。

cramfs image要用mkcramfs產生。作bootable image時,要加上"-i" option。命令如下:
 % mkcramfs -i bzImage root myfs
和一般不同的是:bzImage和root是分開的,不需要在root中。
使用以上方法產生 cf.img檔後,用
% dd if=cf.img of=/dev/XXX bs=512
將image寫入CF card中。

bootpart.c, update 這兩個tool提供線上更新功能,update可以download 新的cramfs image到第二個partition。再修改boot parameter,從第二個partition開機。這樣可以避免在update過程中損毀了所有的image。

要使用update功能時,mkimage要加上"--p1-size --p2-size" 參數,預留兩個partition的空間。要確保size足夠將來的update image使用。
Splash Screen

--- 略--

Command line option to kernel
jlo pass很簡單的command line option給kernel:
"auto root=/dev/hdaN video=0xnnn"
如果要pass更多option的話,要利用splash screen image的header,mkrle這個工具可以加入額外的command option:
 #mkrle --png=splash.png --out=img.rle --cmd="vesa=ypan"
所以要使用比較多的boot option,就要enable splash screen。

TOOLS
jlo的build tool是bcc, as86, ld86. 這些都是16 bit realmode x86 tools。通常所有linux distribution都有 。


2 則留言:

匿名 提到...

你能告诉我从哪儿可以下载到jlo吗?我的邮箱是zc-tang@zcom.com.cn,谢谢!

Checko 提到...

?竟然已經找不到link了。

網誌存檔