Embedded Linux ²©ö¶}¾÷»s§@
§@ªÌ: kevin ³Ìªñ§ó·s¤é´Á¡G2003-5-15
ªþµù¡G¥»¤å¬°¦Û¥Ñ¤å¥ó¡AÅwªïÂà¸ü¡AÂà¸ü¤£»Ý»P¥»¤HÁpô¡A¦ý½Ðµù©ú¥X³B¡C
¡@
¡@
¶}¾÷¹Lµ{²z
»s§@²©ö Linux Floppy ¶}¾÷¤ù
CF CARD»s§@²©öEmbedded Linux
¡@
²¤¶
³o½g¤å³¹ªº¤º®e¡Gn¨ÏŪªÌ¤F¸Ñ Linux ¶}¾÷ªº¹Lµ{¤Î¦p¦ó²©ö»s§@ Linux ¶}¾÷¸Ë¸m ¡C·íµM¥iÀ³¥Î©ó»s§@¶Ç²ÎªºLINUX ºÏ¤ù¡A¦¹¥~¡A§ÚÌÁÙ±N¤¶¶@¦p¦ó§Q¥Î CF¥d¨Ó§@¬°¶}¾÷¸Ë¸m¡A¹ï·Qn±q¨Æ embedded Linux ªº¤H¦h¦h¤Ö¤Ö¦³ÂIÀ°§U¡C
¦bÁÙ¨S¦³½Í½×¦p¥i»s§@²©ö Floppy Linux ¤§«e¡Aº¥ýnÁA¸Ñ¾ãÓ¶}¾÷ªº¹Lµ{¡C·í¤@³¡¹q¸£¤@¥´¶}¹q·½®É¡A¹q¸£¸Ìªº BIOS ´N·|§ä´M¦³µL¨t²Î¶}¾÷ºÏ¤ù¡A¦¹®É·|¦³¨âºØª¬ªp²£¥Í¡G²Ä¤@ºØª¬ªp´N¬O§ä¨ì¨t²Î¶}¾÷ºÏ¤ù¡A¦¹®É´N·|±q¨t²Î¶}¾÷ºÏ¤ù¤¤ªº²Ä 0 ºÏ°Ï¡B²Ä 0 ºÏ¬W¸ü¤J¥i¶}¾÷ºÏ°Ï¡F¥t¤@ºØª¬ªp´N¬O§ä¤£¨ì¨t²Î¶}¾÷ºÏ¤ùªº¸Ü¡A BIOS ´N·|§ä´MµwºÐªº MBR ¡] Master Boot Record ¡^¡A¨Ã¥B°õ¦æ°O¿ý¦b MBR ¤Wªº¶}¾÷¸ü¤Jµ{¦¡¡] Boot Loader ¡^¶i¦æ¶}¾÷¡C(¹ïCF¥d¦Ó¨¥¥²¶·¦Û¤v¦w¸ËMBR)
¤£ºÞ¬O±q³nºÐ¶}¾÷¤]¦n¡AÁÙ¬O±qµwºÐ¶}¾÷¤]½}¡Aº¥ý¾ãÓ§@·~¨t²Îªº loader ¡]´N Linux ¨ÓÁ¿´N¬O LILO ¡y LInux LOader ¡z¡^·|¸ü¤J Linux Kernel ¡A¦Ó Kernel ¤@°_°Êªº²Ä¤@¥ó¨Æ´N¬O¶i¤J«OÅ@¼Ò¦¡¡] protected mode ¡^¡A©Ò¦³ªºµwÅ饿¥Ñ Kernel ¨Ó±±¨î¡AÂ\ ²æ BIOS ªº²o²Ì¡C(§Ṳ́§«á±N§Q¥ÎSYSLINUX¨Ó°µ¬°LOADER)
¤@¥¹ Kernel ¸ü¤J§¹²¦¤§«á¡A¶}©lªì©l¤Æ¨t²Î©Ò¦³µwÅé³]³Æ¡C·í©Ò¦³ªºµwÅéªì©l¤Æ§¹¦¨¤§«á¡A±µµÛ¨t²Î±N¹Á¸Õ±¾¸ü¡] mount ¡^ root filesystem ¡CRoot filesystem ´N¬O³Q±¾¤W·í§@¡¨ / ¡¨¥Ø¿ýªº filesystem ¡CKernel ¥²¶·ª¾¹D±qþ¸Ì¥i¥H§ä¨ì root filesystem ¡] PS
¤@¯ë¨t²ÎºÏºÐ¤ùªº root filesystem ·|³Q»s§@¦¨¥H ramdisk °õ¦æ¤è¦¡ªº¼v¹³ÀÉ¡i image ¡j¡^¡A§_«h¨t²Î´N·|°±¤î¹B§@¡] halt ¡^¡C
·í root filesystem ¦¨¥\ ªº¸ü¤§«á¡A´N·|¥h°õ¦æ init ³oÓµ{¦¡¡Ainit ´N·|¶}©lÀˬd /etc/inittab ¡A§ä¥X¸ÓÀɤ¤¼Ð©ú sysinit ³o¤@¦æ¡A¨Ã°õ¦æ¸Ó¦æªº script ¡A¦b redhat ¤W¬° rc.sysinit ¡A¦Ó rc.sysinit ·|¶i¦æ¨t²Îªºªì©l¤Æ°Ê§@¡A¦b³o¸Ì§Ú¥´ºâ¤£¤¶²Ð³o¤ä script ¦³¿³½ì¥i¥H°Ñ¦Ò redhat ¤Wªº rc.sysinit ¡C
·í rc.sysinit °õ¦æ§¹²¦¤§«á¡A±±¨îÅv¥ß§YÂà¦^¨ì init ªº¤â¤¤¡A±µ¤U¨Ó°¨¤W¶i¤J¹w³] runlevel ¡CY¤º©wªº runlevel ¬° 3 ªº¸Ü¡A init ´N°õ¦æ /sbin/mingetty ±Ò°Ê virtual console ¨Ã¥B¥H : ¡¨ login ¡G¡¨´£¥ÜÅý¨Ï¥ÎªÌµn¤J¡A§¹¦¨¶}¾÷¡Cµn¤J«á¨t²Î·|´£¨Ñ¤@Ó shell µ¹¨Ï¥ÎªÌ¡A´N¥i¥H¨Ï¥Î Linux ¡CY runlevel ¬° 5 ªº¸Ü¡A«h¦b¶}±Ò virtual console ¤§«á¡Ainit ·|¦A°õ¦æ xdm ±Ò°Ê X window system ¡AÅý¨Ï¥ÎªÌ¥H xdm ¬É±µn¤J¡C
Linux ¶}¾÷ªº¹Lµ{¥i¥H»¡¬O
BIOS ---->Loader ( LILO, SYSLINUX )----> Kernel ---->Init ---->Shell
¡@
---------------------------------------------------------------------------------------------------------------------------------------------------¡@
§ÚÌ¥ý§Q¥ÎLinux «ü¥O¥ý»s§@°ò¥»ªº¶}¾÷¤ù
¥ý®æ¦¡¤ÆºÏ¤ù
#/sbin/mkdosfs /dev/hd0
mkbootdisk [--version] [--noprompt] [--mkinitrdargs <args>][--device <devicefile>] [--verbose -v] [--iso]
[--kernelargs <args>] <kernel> (ex: mkbootdisk --device /dev/fd1 2.0.31)
¶}¾÷¤ù»s§@µ{§Ç
#cd /lib/modules
#ls ¬d¬Ý"kernel ªO¥»" ¥Hred hat 8.0¬°¨Ò ªO¥»¬° (2.4.18-14)
# /sbin/mkbootdisk --device /dev/fd0 "kernel ªO¥»" (ex: /sbin/mkbootdisk --device /dev/fd0 2.4.18-14)
Æ[¬Ý¶}¾÷¤ù¤º®e
#mount /dev/fd0 /mnt/floppy/
#cd /mnt/floppy
#ls -al
-rwxr-xr-x 1 root root 203 4¤ë 24
22:33
boot.msg
<----¶}¾÷´£¥Ü
-rwxr-xr-x 1 root root 143847 4¤ë 24
22:33
initrd.img
<----init
-r-xr-xr-x 1 root root 7112 4¤ë 24
22:32 ldlinux.sys
-rwxr-xr-x 1 root root 122 4¤ë 24
22:33
syslinux.cfg
<----Loder configure
-rwxr-xr-x 1 root root 1125194 9¤ë 5
2002
vmlinuz
<----kernel
¦p¦ó¬Ý initrd.img ªº¤º®e
¶}¾÷¤ù¤¤³Ì«nªº´N¬O initrd.img ©M vmlinuz ¡Avmlinuz ´N¬O linux ªº®Ö¤ß¡A¬OÄÝ©ó make kernel ªº½ÒÃD¡C
¦Ü©ó initrd.img ¬O linux OS ªº¥ý´Á¨t²Î¡At³d§G¸m¨t²ÎÀô¹Ò¡A±¾¸üÀÉ®×¸ê®Æ¨Ï¥Îªº¡C¥L¦b kernel ¸ü¤J«á¡A·|³Q¸ÑÀ£ÁY¨ì°O¾ÐÅé°Ï¶ô¤¤¡A°õ¦æ³]©w¨t²ÎÀô¹Òªº¥\¯à¡C
initrd.img ¦pªG§A¥Î mount ¤èªk¥h±¾¸ü¥L¡A¬Û«H¤£ºÞ¥Î¨ººØ fs type ³£¤£¯à¥¿½T¡A¦]¬°¥L¬O¤@ÓÀ£ÁYÀÉ¡A§A¥²¶·¥ý§â¥L¸ÑÀ£ÁY¡A¤~¯à mount¡C
¦]¦¹§A¥i¥H¥ý¸ÑÀ£¨ì hd:
cat /mnt/floppy/initrd.img | gunzip > /tmp/myinitrdfs
«Ø¥ß±¾¸üÂI¡G
mkdir /mnt/initrdfs
±¾¸ü initrdfs:
mount -t auto -o loop /tmp/myinitrdfs /mnt/initrdfs
³o¼Ë cd ¨ì /mnt/initrdfs ´N¥i¥H¬Ý¨ì initrd.img ªº¤º®e¤F¡C
ªþµù¡G©Ò¿×ªº mount -t auto ¬O«ü¥Î kernel ©Ò¦³»{±oªº fs type ¥h±¾¸ü¡A¦]¬°¨CÓ distribution ³]pªÌªº initrd.img ·|¦³¥L̦ۤv¨Ï¥Î fs type ªº¦Ò¶q¡A msdos,ext2,minix ³o¨Ç fs type ³£¦³¨Ó°µ initrd.img ªº¡C§ÚÌ¥i¥Hµo²{Red hat8.0¶}¾÷¤ù¬O§Q¥ÎSYSLINUX °µ¬° Loader, ¦³¤@Ó¦W¬°syslinux.cfg¤Îldlinux.sysªºÀÉ®×
Ãö©ósyslinux
¨Ï¥Îsyslinux ¤ñ°_¨ä¥¦ªºLoader ¦p(LILO,grub)¨BÆJ²³æ¡A¦Ó¥B¥\¯à§¹¾ã¡C
¤U±¬°syslinux.cfgªº¤º®e
default linux
prompt 1
display boot.msg
timeout 100
label linux
kernel vmlinuz
append initrd=initrd.img root=/dev/hda6
±ý§ó²`¤J¤F¸Ñ¥i°Ñ¦ÒSyslinux ºô¯¸ http://syslinux.zytor.com/
¡@
-------------------------------------------------------------------------------------------------------------------------------------------------------¡@
CF¥d¥²¶·¸g¥ÑCF¥d->IDE ¼Ò²Õ¤~¯à¶}¾÷¨£¤U¹Ï
¥i§âCF¥d·í¦¨¬O¤@¯ëµwºÐ¨Ó¬Ý¡A¤ñFloppy §ó¨ã¦³¼u©Ê¡C
»s§@CFªºMBR (Master Boot Record ¡^
º¥ý¤UÀ¹ syslinux n2.0¥H¤WªºªO¥» ¦p 2.0.4 ¨Ã¥B¸ÑÀ£ÁY
§A·|µo²{¸ÌÀY¦³¤@Ó mbr.bin ªºÀÉ®× ±µ¤U¨Ó¥²¶·§PÂ_§AªºCF¥d±µ¦bide1(hda[master]/hdb[slave]) ÁÙ¬Oide2(hdc[master]/hdd[slave])
µ§ªÌ¬O±µ¦bide2ªºmaster©Ò¥H¬Ohdc¡A¦A¨Ó°õ¦æ
#dd if = mbr.bin of = /dev/hdc
³o¼Ë´N¥i¥H¼g¤Jmbr¨ì§AªºCF CARD¸Ì¤F
Make Kernel
«ØÄ³¶i¤JLinux µøµ¡¤U¤ñ¸û¦n°µ
²Ä¤@¦¸»s§@:
#make xconfig
#make dep
#make zImage ©Î make bzImage ¡]Y®Ö¤ß¤j©ó 640K ªº¸Ü¡^<--À£ÁY
¦A¦¸»s§@:
#make mrproper
#make xconfig
#make clean
#make dep
#make zImage ©Î make bzImage ¡]Y®Ö¤ß¤j©ó 640K ªº¸Ü¡^<--À£ÁY
KernelªºImageÀÉ·|¦b
/usr/src/linux-2.4.18-14(®Ú¾Ú§Aªº¹q¸£¦Ó©w)/arch/i386/boot
¸Ì±
»s§@ Ram Disk
³o·|²£¥Í¤@Ó2MBªºRam Disk, Àɮרt²Î®æ¦¡ext2, «Ü°÷§Ú̥ΨӰµ¶}¾÷®ÉªºÀɮרt²Î¥Î¤F.
losetup ¬O¥Î¨Óôµ²§A©Ò°µªºimage:
boot.img <----------> loop0
¦w¸ËShell Program
cp /bin/ash.static /boot/bin/sh
#vi init.c
½sĶ®É, §ÚÌ"¥²¶·"±N¥¦½sͦ¨ÀRºAªº, ¦]¬°¶}¾÷¤ù¤¤¨Ã¨S¦³¸Ë¤J¥i¸ü¤Jªº¨ç¼Æ®w.
strip·|±N¨S¦³¥Î¨ìªº³¡¥÷¥h°£, ´î¤ÖÀɮפj¤p.
²{¦b, §Ú̱Ninit¦w¸Ë¨ìRam Disk¤¤.
¸Ñ°£losetup³]©w
±N½sͦnªºkernel Image©ñ¤J¶}¾÷¤ù¤¤¨Ã©R¦W¬°linux
§ó§ï syslinux.cfg ¦p¤U
TIMEOUT 20
DEFAULT linux
LABEL linux
KERNEL linux
append root=/dev/ram initrd=star.ini
µ²½×
¨Ì·Ó¤W±歩ÆJ§¹¦¨«á´N¥i¥H¶}¾÷«³]BIOS¬Ý¬Ý¯à§_¥¿±`¤u§@¡A¶}§¹¾÷«á¥u¦³³Ì°ò¥»ªºshell¡A
¤§«e´¿¹Á¸Õ§Q¥Îbusybox¨Ó¤H°µ¥i¬OÁÙ¦³¨Ç°ÝÃD¶·n¥h¸Ñ¨M¡C³Ì«á§O§Ñ¤F³Æ¥÷§A°µ¦nªº¶}¾÷¤ù
dd if=/dev/hdc1 of=/save.img
¨ä¥¦¬ÛÃö¸ê°T
¨ Pocket_Linux : (user_guide)
¨ Busybox : (link)
¨ HOWTO¡GThe Linux Bootdisk (link)
¨ Linux Router Project (LRP) : (link)
¨ uClinux : (link)
¨ Floppy based Linux : (link)
¨ DooChun LINUX : (link) §Þ¥©¤ß±o
¡@
³Ì«á§ó·s 2003 / 5 / 15