|
¡@³oùؤ¶²Ð¤@Ó¥i¥H¤£¥Îªá¶O«Ü¦h¿ú¥hÁʶR±MªùªºµwÅé¦ý¬O¤S¥i¥H¾Ç²ß´O¤J¦¡Linux¨t²Îªº¤èªk¡C³o´N¬O§Q¥Î¥@®a(Sega Dreamcast)¹CÀ¸¾÷¨Ó¾Ç²ß»s§@´O¤J¦¡Linux¡C(Embedded Linux) ³o½g¤å³¹±N·|¸Ô²ÓªºÁ¿¸Ñ¦p¦ó¦bSega Dreamcast¤W±¦w¸ËLinux.¥]¬ALinux Kernel, Boot loader©MUtility kernel patches. ¦P®É¤]´£¨Ñ¥H¤W¤u¨ãªº¤UºI³s±µ¦a§}¡C ¡@ ¡@ ²¤¶¡G ¦b¾Ç²ßEmbedded
Linuxªº®ÉÔ¡A³Ì«nªº´N¬O»ù¿ú©M¨t²Îªº¬Û®e©Ê¤F¡C¤H¤H³£ª¾¹D¡ALinux¦b®à±¹q¸£©M¦øªA¾¹¤W±³£¥i¥H«D±`¦nªº¹B§@¡C¦ý¬O¡A³o¨Ç³£¤£¯àºÙ§@´O¤J¦¡¨t²Î¡C§Aª¾¹D¶Ü¡A¨ä¹ê§Q¥Î§AªºSega
Dreamcast¹CÀ¸¾÷¡A§A´N¥i¥H¦Û¤v¾Ç²ß»s§@¤@¦¸´O¤J¦¡ªºLinux¤F¡C n¾Ç²ß´O¤J¦¡Linux¡Aº¥ý¡A·íµM§An¦³¨¬°÷ªº¤å¥ó¡C¦P®É¡A§An¥²¶·n¦³¤@Ó¤£¬O°ò©óX86ªºµwÅ饻O¡A¥]¬A¤@Áû¤£¬OX86ªº·L³B²z¾¹¡C°£¤F¹q¸£¥H¥~¡A¤ñ¸û²z·Qªº´N¬O¡GPDA, Internet appliances ©M¹CÀ¸¾÷°Õ¡C ¨S¿ù¡A´N¬O¹CÀ¸¾÷¡C¨ººØ爲¤FÅý¤j®aÁʶR¹CÀ¸¦Ó´X¥G¤£ÁÈ¿ú¡A©ÎªÌÁ«¿ú¦b½æªºªF¦è¡C²{¦b»ù¦ì³Ì¦X¾Aªº´NÀ³¸Óºâ¬OSega Dreamcast¤F¡C¦]爲Sega ¤w¸g¥X¤F·sªº産«~¤F¡A¥Ø«eSega Dreamcast¤w¸g³Q¼t®a¤w¸g°±¤î¥Í産¡C©Ò¥HSega Dreamcastªº»ù¦ì²{¦b«D±`ªº¦n¡C¤U±§ÚÌ´N¬Ý¬Ý¦p¦ó¦bSega Dreamcast¤W±¶]Linux. Linux ¬O¦p¦ó¹B§@¦b Sega Dreamcast ¤Wªº¡G¦b°Q½×Linux ¬O¦p¦ó¹B§@¦b Sega Dreamcast¤W¤§«e¡A§Ú̺¥ýnª¾¹D¬O¦p¦ó§âLinux¸Ë¨ìSega Dreamcastùر¥hªº¡C¨ä¹ê¯µ±K´N¦b©ó©ñ¤JSega Dreamcastùرªº¨ºÓCDªº®æ¦¡°Õ¡C¤]´N¬O»¡¡A¨Ã¤£»Ýn¤°¤\¯S®íªº¤u¨ã¡C Sega Dreamcast: Sega Dreamcast¤ä´© Hitachi SH7750 CPU¡A¹B¦æ³t«×¬O200MHz. ¦³ 16MBªºRAM.§A¥i¥H¿ï¾Ü¨Ï¥Î¹qµø¾÷¡]PAL¨î¦¡©ÎªÌNTSC¨î¦¡¡^©ÎªÌ§Q¥Î¤A¤Óºô°t¸m¾¹¡]Ethernet Adapter¡^ ª½±µ³s±µ¨ìVGAªº¹q¸£¿Ã¹õ¤W±¡CSagaÃö³oºØ¥d¥s°µ¡§Broadband Adapter¡¨©ÎªÌ¡§BBA¡¨¡A¤]¯à¶R¨ì±Mªùµ¹Saga Dreamcast¨Ï¥ÎªºÁä½L©M·Æ¹«¡C ¦bDreamcast¤W¦w¸ËLinux:
¦bSaga Dreamcast¹CÀ¸¾÷啓°Êªº®ÉÔ¡ASaga
Dreamcast¤º«Øªº¤@Ó啓°Êµ{¦¡·|¹Á¸ÕŪ¨ú CD-R¡]n½T©w¡A¤£¯à¥ÎCD-RW¡^¡A¹Á¸Õ§ä¨ì³Ì¤Ö¨âÓCD-Rªºrecording
sessions.²Ä¤@Ósession¬Oµy¡Aboot
loader¨Ã¤£·|¥hºÞ¥¦¡C¦ý²Ä¤GÓsession¥²¶·¬OCD/XA¸ê®Æy¡C¡]mode
2, form 1¡^³oÓ¸ê®Æy¥²¶·¬O¼Ð·ÇªºISO9660ªº¤å¥ó¨t²Î¡A¦P®É³oÓ¤å¥ó¨t²Îªº«e16Ӻϰϥ²¶·¥]§t¤@Ó§t¦³啓°Ê¸ê°Tªº¤å¥óIP.BIN¡CIP.BIN¥]§t啓°Ê«á¡A啓°Êµ{¦¡»Ýn¶}啓ªºÀɮצW¡CIP.BIN¦P®É¥]§t¤¸¸ê®Æ¥Î¥HÃѧOµwÅé¡A¥H½T©wCD¤WªºþÓµ{¦¡±N³Q°õ¦æ¡C¡]¨Ò¦p¦Û°Ê¿ï¾Ü¹CÀ¸¬O¦bSega
Dreamcast¤W°õ¦æ¡AÁÙ¬O¦bSaga¨ä¥LÃþ«¬ªº¹CÀ¸¾÷¤W°õ¦æ¡^¦a°Ï¼Ð»x¡A·|±±¨î¹CÀ¸¥H¨ººØ®æ¦¡Åã¥Ü¡]PAL©ÎªÌNTSC¡^¡A¦P®É¤]Åã¥Ü¹CÀ¸©Ò»Ýnªº±±¨î¾¹¡]¹CÀ¸¤â¬`°Õ¤°¤\ªº¡^©MCRC. ¤@¦ýSaga Dreamcast¤º«Øªº啓°Êµ{¦¡Åª¨ì¦³®ÄªºIP.BIN¤å¥ó¡C¨t²Î´N·|¦Û°Ê§â©R¦Wªº¤å¥ó±qISO9600ªº¤å¥ó¨t²ÎŪ¨ì°O¾ÐÅ餤¡A¨Ã¥æ¥X¥þ³¡ªº±±¨î³\¥iÅv¡C³oùØ¡A§Ṵ́µªº´N¬O¡A·íSaga
Dreamcast¨t²Î¶}¾÷¥H«á¡A啓°Êµ{¦¡·|§âLinux¶i¥h¡CÁÙ¥i¥H§Q¥ÎSaga Dreamcastªº¦ê¦C¤¶±¡]serial
port¡^©ÎªÌ¤A¤Óºô¤¶±¡]enthernet port¡^¨Ó¤UºI¤@¨ÇªF¦è¡C¤@ÓRTOS¡A¦n¤ñeCos´N¤£¿ù¡C Saga Dreamcastªº¨t²ÎµwÅé¦P®É´£¨Ñ¤@ÓÃþ¦ü©óBIOS¥\¯àªºªF¦è¥Î©ó¨t²Î¥i¥H±qGD-ROM driveŪ¨ú¸ê®Æ¡A¡]GD-ROM
drive¬O¤@ºØ±qCD-ROM§ï¸Ë¥X¨ÓªºªF¦è¡A¥¦¸òCD-ROM³Ì¤jªº°Ï§O´N¬OGD-ROM¥i¥H®e¯Ç1GBªº¸ê®Æ¡^³X°Ý¤º«Øªºflash memoryµ¥µ¥¡C¥i±¤ªº¬O¥Ø«e³o¨ÇªF¦èÁÙ¨S¦³¤ä´©¡C¤]³\·í§AŪ¨ì³o¤ù¸ê®Æªº®ÉÔ´N¤w¸g¦³¤F³o¤è±ªº¤ä´©¤F¡C ±µ¤U¨Ó°µ¤°¤\¡H §ÚÌnª¾¹D¤F¦p¦ó»s§@¤@Ó¥i¦bSaga Dreamcast¤W¹B¦æªº¨t²Îimage, §ÚÌ´N¥²¶·¹ïLinux¦³¤@©wªºÁA¸Ñ: LinuxªºKernel¥»¨¬O¤£¯à啓°Êªº¡C¦o»Ýn¤@Ó啓°Êµ{¦¡¡A¤ñ¦plilo¨ÓÀ°§U¦o¡CLilo·|§â¶}©l¨t²Îªº¤@¨Ç¸ê°T¡A¨Ò¦p¨t²Î±¡ªp¡A¨t²Î¥»Oµ¥µ¥¶Ç°eµ¹Kernel. Lilo¦P®É¤]¤ä´©¸ÑÀ£ÁY¡A³o¼Ë¥i¥H§âÀ£ÁYªºKernel imageª½±µ®³µ¹¥Î¡C¦b´O¤J¦¡¨t²Î¤¤¡A§Ṳ́]¦P¼Ë»Ýn¤@ÓÃþ¦ü©óliloªºboot loader. ²³æªº¨Ó»¡¡ALinuxªº啓°Ê¤À爲¥H¤U´XÓ¨BÆJ¡G
²{¦b§Ú̪¾¹D¤F³o¨Ç¡AÀ³¸Ó²M·¡CD¤Wªºimageùرªº¤º®e¤F§a¡C§ÚÌ»Ýn¤@Óboot
loader,©M¤@ÓLinux ªº
Kernel, §ÚÌ»ÝnÅý§Ú̪ºboot loader¦bSaga
Dreamcast啓°Ê«á¡A¯à±o¨ì±±¨îÅv¡A¥B§ä¨ìLinuxªºKernel¡A¦P®ÉÂà´«±±¨îÅv¡C Linux ©MÀ³¥Îµ{¦¡¡G
±µ¤U¨Ó¡A§ÚÌÁÙ¦³«Ü¦hªº¨Æ±¡n°µ¡C¤@¥¹kernel¥i¥H¦¨¥\ªº¹B¦æ¤F¡A§ÚÌÁÙ»ÝnÀ³¥Îµ{¦¡¡C®à±¨t²Î¸ò´O¤J¨t²Î¦³Ó«Ü¤jªº°Ï§O¡C®à±¨t²Î³q±`¨t²Î¥ut³d¸òÀ³¥Îµ{¦¡¤§¶¡ªº¥æ´«¡C¦ý¬O´O¤J¨t²Î´N¤£¦P¤F¡A¦b´O¤J¦¡¨t²Î¤¤¡A³q±`¨t²Î©MÀ³¥Îµ{¦¡¬O¦P¤@Ó¡C¤]´N¬O»¡¡A¥L̬O¸j¦b¤@°_ªº¡C¦]爲¥L̸jªº¹ê¦b¬O¤Óºò¤F¡A«ÜÃø¤À¿ë¥X¨Ó¡A©Ò¥H«j±jªº°Ï¤À¿ë¨ºÓ¬O§@·~¨t²Î¨ºÓ¬OÀ³¥Îµ{¦¡´N¦³ÂI¤£²Å¦X¹ê»Ú¤F¡C Linux¬O¤@Ó³q¥Î©Êªº«Ü¦nªº®à±§@·~¨t²Î¡A¤]´N¬O»¡¡A§ÚÌ»Ýn¦³À³¥Îµ{¦¡¤~¥i¥H¡C¦b³o½g¤å³¹ªºµ²§À¡C·|¤¶²Ð¤@ÓÃþ¦üªºÀ³¥Îµ{¦¡¡Gshell Linux©M¤å¥ó¨t²Î¡G
¦pªG§AÆ[¹î¤@¤ULinuxªºstartup
code,§A´N·|µo²{¡A³Ì«á¤@¨B´N¬Okernel´M§ä¤@Ó¥i°õ¦æªº¥s°µ¡§init¡¨ªºÀɮסA¨Ã¥B§â¥¦ºI¤J¨ì°O¾ÐÅéùØ¡C³oùب䣥u¬O»¡§ÚÌ»Ýn¤@Ó¥s°µ¡§init¡¨ªº¤å¥ó¡C³oùئP®É«ü¥X¡A§ÚÌ»Ýn¤@Ó¤å¥ó¨t²Î¥h¨ú¥X³oÓÀɮסC ¤]³\§A·|·Q¡ASaga Dreamcast¨Ã¨S¦³µwºÐ¡A¨º¤\¦p¦ó¦s©ñ¨t²Î¤å¥ó©O¡H¨ä¹ê¡A«Ü¦hªº¹q¸£¤u§@¯¸¤]¬O¨S¦³µwºÐ----³Ì¤Ö¡A¦b¨t²ÎÁÙ¨S¦³ªì©l¤ÆIDE©ÎªÌSCSI±±¨î¥d¤§«e¡C©Ò¥H¡A¨ä¹êLinux¦b¶}¾÷ªº®ÉÔ¬O·|¦Û°ÊÃþ¤ñ¥X¤@ÓµwºÐ¨Óªº¡C ·í¨SLinux¶}¾÷ªº®ÉÔ¡ALinux·|¦Û°Ê¥Îramdiskªº¥\¯à¡A§â¤@³¡¤À°O¾ÐÅéÃþ¤ñ¦¨¤@ÓµwºÐ¡C¤u§@¯¸ªºboot
loader¦b¶}¾÷®É±q³nºÐ¤¤¿W¨úimage¡AµM«á«áºI¤Jramdisk¡A¦A§âramdiskªº¦a§}¶Ç°eµ¹kernel.
Kernel±qramdiskŪ¨úºÏ¤ù±±¨î¥dªºªº¸ê®Æ¡AµM«á¶i¦æªì©l¤Æ¡A¸ü¤J¡C³o®ÉÔ¯u¥¿ªºª«²zµwºÐ¤~¤u§@¡C¤@¥¹ª«²zµwºÐ¤u§@¤F¡Aramdisk´N·|³QÄÀ©ñ¡C Ramdisk´£¨Ñ©Ò¦³Linux»ÝnªººÏ¤ù¾É¦V³]³Æ¡C©Ò¥H»¡¡A¤@Ó¨t²Î¥un¦³¨¬°÷ªº¦s©ñµ{¦¡©Mdevice driveªº°O¾ÐÅé¡C¨º¤\³oÓ¨t²Î¥i¥H§¹¥þ¤£»ÝnµwºÐ¡CSaga
Dreamcast´N¬O¦b¥Îramdisk¥N´À¶Ç²ÎµwºÐªº¡C 爲Saga¥´³yLinux¡A§A³£»Ýn¨Ç¤°¤\¡G º¥ý¡A§A¥²¶·¾Ö¦³¤@¥x¹q¸£¡A³o¥x¹q¸£¥²¶·¬OLinux©ÎªÌUnix-likeªº§@·~¨t²Î¡C§A¥²¶·¦³rootªº³\¥iÅv¡C ¨ä¦¸¡A§A»Ýn¤@¥xCD-RªºÅª¼g¾¹¡]Writer¡^¡AŪ¼g¾¹©M¿N¿ýµ{¦¡¥²¶·n¤ä´© multisession CD using CD/XA data track
(mode 2, form 1)®æ¦¡¡C¨ä¹ê¤j¦h¼ÆªºCD-R writer©Mµ{¦¡³£¤ä´©Ó¡Cnª`·Nªº¬O¡GSaga
DreamcastªºGD-ROMÅX°Ê¾¹¤£¯àŪ¨úCD-RW¡A¤£¹L¥ÎCD-RW¿N¿ýªºCD-R¬O¨S¦³°ÝÃDªº¡C¤]´N¬O»¡¡A¥u¯à¥ÎCD-Rªº¤ù¤l¡A¤£¯à¥ÎCD-RW. ³Ì«á¡A´N¬O»Ýn¤@¨Ç¤u¨ã°Õ¡A³o¨Ç¤u¨ã°ò¥»¤W§A¦bºô¤W³£¯à§ä±o¨ìªº¡G ¤U±§Ú¤]§âlink³£µ¹¤F¥X¨Ó
¡@ ¥´³y§ÚÌ»Ýnªº¤u¨ã¡G
·Q¦bSaga Dreamcast¤W¹B¦æLinux.²Ä¤@¨B´N¬O§ÚÌ»Ýn¥´³y¤@¨Ç¤u¨ã¥]¬A¡Gcross assembler, linker, compiler, C
runtime library¡C¤U±¡A§ÚÌ´N¥Î³o¨Ç¤u¨ã¥´³y¥X¤@ÓSaga
Dreamcast¥Îªº§@·~¨t²Î¡A¨Ã¥B¦b¨t²Î¶}¾÷¥H«á¡A¹B¦æ¤@Ó²³æªºshell¡C³Ì«á¡A§Ú̧â©Ò¦³ªºªF¦è¤è¨ì¤@Óramdisk
imageùØ¡C¨Ã¿N¿ýCD. Build cress assembler, linker, and bootstrap
compiler
§Ú̺¥ý»Ýn¥´³y¤@Ócross assembler©Mlinker¡AµM«á¬Obootstrap compiler.¥Î¤@Ó°g§Aªºcompiler¥i¥H¥´³yruntime libraries©Msystem
kernels¡C¦ý¬O¤£¯à¥´³yÀ³¥Îµ{¦¡¡C º¥ý¡A½T©w/usr/local/bin/¦³¦bPATHùس]©w¾¾ login as root user,µM«á«ö·Ó¤U±ªºscript: # export TARGET=sh4-linux //³oùجO³]©wÀô¹ÒÅÜ¼Æ # export PREFIX=/usr/local //³o¼Ë¦n³B´N¬O¤£¥Î¥H«á¦Ñ¥´¨º¤\¦h¦r # export PATH=${PATH}:${PREFIX}/bin //µ²§ô # tar xzf binutils-2.11.2.tar.gz # patch -p0 < binutils-2.11.2-sh-linux.diff # mkdir -p build-binutils && cd build-binutils # ../binutils-2.11.2/configure --target=$TARGET \ --prefix=$PREFIX # make all install # cd .. # tar xzf gcc-3.0.1.tar.gz # patch -p0 < gcc-3.0.1-sh-linux.diff # mkdir -p build-gcc && cd build-gcc # ../gcc-3.0.1/configure \ --target=$TARGET --prefix=$PREFIX \ --without-headers --with-newlib \ --disable-shared --enable-languages=c # make all-gcc install-gcc # cd .. ³Ì«áªº¥i°õ¦æÀɮצb/usr/local/bin¤U±¡A¦W¦r¬O sh4-linux-as, sh4-linux-ld. ¥Î¦P¼Ëªº¤èªk´N¥i¥Hbuild bootstrap compiler¤F¡CBootstrap compiler¤]¬O¦b/usr/local/bin¤U± °õ¦æÀɮתº¦W¦r¥s°µsh4-linux-gcc. Configure the Kernel source: ³oùØ¥Dn¬Onconfigure kernelªºheader
file. «D±`ªºÂ²³æ¡A¤£¹L½Ðª`·N¡A³oùؤ£n¹ï¿ï¶µ°µ¥ô¦óªº×§ï¡C¦bmenuconfigªº®ÉÔ¡Aª½±µ¿ï¾ÜExit.¡]«ö¤@¤UÁä½Lªº½bÀY¥kÁä¡AµM«á«öenter´N¦n¤F¡^ #tar vxf kernel-sh-linux-dreamcast.tar.gz #path ¡Vp0 < kernel-sh-linux-dreamcast.diff #cd kernel # make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig #cd .. ²{¦b§Ú̦³¤Fbootstrap
compiler©M¤@Ó³]¸m¾A·íªºkernel¤F¡C§Ú̲{¦b¥i¥H¶}©lbuild
runtime library©Mheader files¤F¡C§Ų́ϥΪºrun-time
library¬OGNUªºglibc.³oÓlibraryùر¦³¤j®a³£¼ô±xªºprintf()¤§ÃþªºªF¦è¡C¦P®ÉÁÙ¥]§t°ÊºA³s±µ¡]dynamic linker¡^©M¨ä¥Lªº¤@¨ÇªF¦è¡C º¥ý¸ÑÀ£ÁY¡AµM«ápatch¡A±µ¤U¨Ó§â
Linux kernelªºheader files «þ¨©¹L¥h¡C¹ê»Ú¤W¡A§ÚÌ»Ýn½Õ¥Îmake¨â¦¸¨Óbuild glibc. ²Ä¤@¦¸ªº®ÉÔ¡A«Ø¥ßlibrary,¦ý¬O¨Ã¨S¦³¦w¸Ë¡A²Ä¤G¦¸¤~¬O¦w¸Ëlibrary. Touchªº©R¥O¹ê»Ú¤W¬O爲¤FÄF¹LglibcÅý¥¦¥H爲©Ò¦³ªºªF¦è³£¤w¸g¦³¤F¡]¹ê»Ú¤W¦³¨ÇªF¦è¬O§Ṳ́£»Ýnªº¡^³Ì«áecho«ü¥O°µ¤F¤@Ólink libc.so ¦pªG§A¦bbuilt§¹ binutils, bootstrap, gcc¥H«á«·s啓°Ê¹L§Aªº¹q¸£¡]©ÎªÌ«·slogin¹L¡^¨º¤\§A¥²¶·«·s³]©wPATH¡ATARGET,PREFIX³o¤TÓÅܼƤ~¥i¥Hbuild gligc. Glibc¦bbuildªº®ÉÔ¥i¯àªáªº®É¶¡·|¤ñ¸û¦h¡C·íµM¡A¥Dn¤]¬O¬Ý§Aªº¨t²Î¦Ó©w¡C¤£¹L¨ì¬O¥i¥H§Q¥Î²{¦b³oӮɶ¡¥ð®§¤@¤U¡A¦YÂIªF¦è¡AªwªM¯ù¡C # tar xzf glibc-2.2.4.tar.gz # patch -p0 < glibc-2.2.4-sh-linux.diff # mkdir -p build-glibc && cd build-glibc # mkdir -p ${PREFIX}/${TARGET}/include # cp -r ../kernel/include/linux \ ${PREFIX}/${TARGET}/include # cp -r ../kernel/include/asm-sh \ ${PREFIX}/${TARGET}/include/asm # CC=sh4-linux-gcc ../glibc-2.2.4/configure \ --host=$TARGET --prefix=$PREFIX \ --disable-debug --disable-profile \ --disable-sanity-checks \ --with-headers=${PREFIX}/${TARGET}/include # make # touch iconv/iconv_prog login/pt_chown # make install_root=${PREFIX}/${TARGET} \ prefix="" install # echo "GROUP ( libc.so.6 libc_nonshared.a )" \ > ${PREFIX}/${TARGET}/lib/libc.so # cd .. Rebuild the cross compiler¡G ¦b¦³¤F¥¿½T§¹µ½ªºheader files©Mruntime library¤§«á¡C§Ú̲{¦b¥i¥Hbuild¤@Ó§¹¾ãªºc/c++ cross compiler. # mkdir -p build-gcc2 && cd build-gcc2 # ../gcc-3.0.1/configure --target=$TARGET \ --prefix=$PREFIX --enable-languages=c,c++ # make all install # cd .. Building a Dreamcast Linux kernel ²{¦b§Ú̦³¤F§¹¾ãªº¸ó¥»Oªºtoolchain¤F¡C²{¦b¨ì¤F¸Ó¥Î¨ì³o¨ÇªF¦èªº®ÉÔ¤F¡C«e±§Ṳ́w¸g§â§Ú̪ºlinuxªºkernel爲Saga Dreamcast³]¸m¦n¤F¡C²{¦b¥uncompile©Mlink kernel´N¦n¤F¡C³Ì«ácompile¥X¨Óªº¤å¥ó¥s°µzImage¡A¦bkernel/arch/sh/boot/¤U±¡C³oÓ¤å¥ó¬O¥HÓ³QÀ£ÁY¤Fªºkernel image. ¥H«á¡A·í§A¥Î³oÓkernel¥¿±`¶}¾÷¥H«á¡A§A´N¥i¥HÀH·N¥Îmenuconfig¨Ó½Õ¾ãkernelùرªº¦UºØ³]¸m¤F¡CµM«á¦Arecompile¤@¤Ukernel´N¦n¤F¡C # cd kernel # make ARCH=sh CROSS_COMPILE=sh4-linux- \ clean dep zImage # cd .. Building a Saga Dreamcast Bootloader ·í§A¦³¤F¤@Ó¥¿½Tªºcompiled kernel image.¨º¤\¤U¤@¨B§ÚÌ´N¸Ó°µ¤@Óbootloader¥Î¨Ó¦bSaga Dreamcast ¶}¾÷ªº®ÉÔ¡A§âkernel¸ü¤J¨ìSaga Dreamcastªº°O¾ÐÅéùر¥h¡C ¦ý¬O¡A²{¦bÁÙ¤£¦æ¡CÁÙ°O±o¶Ü¡ASaga DreamcastªºµwÅé¸ü¤J¤@Ó³æ¤@ªº¥i°õ¦æªºimage¨ì¥¦ªºRAMùر¡C³o¼Ë¡A°£«DÀ³¥Îµ{¦¡ª¾¹D¦p¦ó»PSaga DreamcastªºGD-ROM¥h·¾³q¡A¤£µM´N¨S¦³¿ìªk±qGD-ROMùرŪ¥h§ó¦hªº·s¸ê®Æ¡C§Ų́ϥΪºbootloader¨Ã¤£ª¾¹D¦p¦ó¨Ó¸òSaga DreamcastªºGD-ROM¨Ó·¾³q¡C©Ò¥H°ß¤@ªº¤èªk´N¬O¡A§Ú̦b¤@¶}©l¡A´N§â©Ò¦³»ÝnªºªF¦è¥þ³¡load¶i¥h¡Gbootloader, kernel image, ramdisk image. ¤@¥¹©Ò¦³ªºªF¦è¥þ³¡load¶i¥h¡A³o®ÉÔ¡Abootloader´N»Ýn¤ÀªR°O¾ÐÅé¡A¤À²M·¡kernel©Mramdisk image.¡C³o´N»Ýnbootloaderª¾¹Dkernel©Mramdiskªººë½Tªº¤j¤p¡C°ß¤@ªº¤èªk´N¬O¡A·í°µ¦nkernel©Mramdisk¥H«á¡A¥hpºâ¥L̪º¤j¤p¡AµM«á¦b¥´³y bootloaderªº®ÉÔ¡A§â³o¨Ç·Ç½Tªº¸ê®Æ´£¨Ñµ¹bootloader¡C(source code) ©Ò¥H¡A§Ú̲{¦b¥ýn¥h¥´³y¤@ÓÀ³¥Îµ{¦¡(shell)¡AµM«á¦A°µ¤@Ó¤j¤p¦X¾Aªºramdiskµ¹¥¦¡C³Ì«á§Ú̦A¦^¨ìBuilding Saga Dreamcast Bootloader³oùØ¡C ¥´³y¤@ÓÀ³¥Îµ{¦¡ ¹ïLinux¨Ó»¡¡A¤]³\³Ì«nªº¤@ÓÀ³¥Îµ{¦¡´N¬OLinuxªºshell¤F§a¡C¨S¦³¤Fshell¡A¬Æ¦Ü¤£¥i¯à¥h¸ü¤J¨ä¥Lªºµ{¦¡¡A¤£¯àmount³]³Æ¡A¤£¯à¡K¡K ¦pªG§AªºSaga Dreamcast¨S¦³Áä½L¡A¨º¤\§A´N¨S¦³¿ìªk¨É¨üSaga Dreamcast¤Wªºshellªº¨ººØ·Pı°Õ¡C¦]爲¨S¦³Áä½L¡A§A´N¨S¦³¿ìªk¿é¤J«ü¥O¡C ¥´³y¤@Óshellªº¦P®É¡Ashell¤]¥i¥H¹B¦æ§A¦bramdiskùرªºµ{¦¡©ÎªÌscript.·í§A¯à¦¨¥\ªº¦bSaga Dreamcast¤W±¹B¦æ¤@Óshell¡A¨º¤\¤]´N·N¨ýµÛ§A¥i¥HÀH·Nªº¦bSaga Dreamcast¤W±¹B¦æ¥ô¦ó¤@Ó§A·Qn¹B¦æªºµ{¦¡¡C ¤U±Á¿z¦p¦ó爲Saga Dreamcast build¤@ÓBusyBox . ¦b°ò¥»ªºShellªº°ò¦¤W¡ABusyboxÁÙ´£¨Ñ¤F´Xӫܦ³¥Îªº¤u¨ã¡Gmount, ls and modprobe. ²Ä¤@¨B¥ý«Ø¥ß¤@ӥؿý¥s°µ initrd¡A¥]§t¤F³ÌªìramdiskªºªF¦è¡CPREFIX¬O爲¤F§âBusybox¦w¸Ë¨ì¥¿½Tªº¦ì¸m¡CDOSTATIC¬O§i¶Dsh4-linux-gcc Busybox¤£n¥Îshared libraries.¦]爲§Ų́S¦³¦w¸Ë°ÊºAªºlinker (dynamic linker). # mkdir -p initrd # export INITRD=`pwd`/initrd # tar xzf busybox-0.60.1.tar.gz # patch -p0 < busybox-0.60.1-sh-linux.diff # cd busybox-0.60.1 # make CROSS=sh4-linux- DOSTATIC=true \ CFLAGS_EXTRA="-I ${PREFIX}/${TARGET}/include" \ PREFIX=${INITRD} clean all install # cd .. §A¥i¥H¹ïBusybox°µ«Ü¦hªº§ïÅÜ¡A¨ãÅé½Ð¬ÝConfig.h©Mlibbb/libbb.h³o¨âÓ¤å¥ó¡C ²{¦b§ÚÌn¦bramdisk¤W±°µdevice nodes: ¦]爲ramdisk¦bSaga Dreamcast¤¤¡A¬O§êºtªºroot directoryªº¸}¦â¡C©Ò¥H¤W±¥²¶·¦³©Ò¦³ªºkernel¦b¹B¦æ¤¤¥i¯à»ÝnªºªF¦è¡C°£¤Fshell©ÎªÌ¨ä¥LªºÀ³¥Îµ{¦¡¡A§ÚÌ¥²¶·´£¨Ñdevice nodes.³o¼Ëµ{¦¡¤~¯à¸ò§Ú̪ºµwÅé·¾³q¡C ¦bSaga Dreamcast¤¤¡A¥u¦³¤@Ó¯u¥¿ªº¹ê½è©Êªºdevice node¡G/dev/console node.¦pªG¨S¦³³oÓnode,¨º¤\¤å¦rµ{¦¡±NµLªk¸òconsole device·¾³q¡C²³æªº»¡¡A´N¬O§A¬Ý¤£¨ì¿Ã¹õ¤WªºÅã¥Ü¡C¥Î¤U±ªº«ü¥O°µ¥Xdevice node: # mkdir -p ${INITRD}/dev # mknod ${INITRD}/dev/console c 5 1 »s§@ramdisk image: ²{¦b¡A§Ṳ́w¸g»s§@¦n¤Framdiskªºdirectory¤F¡C±µ¤U¨Ó§ÚÌ´N¸Ó§â³oӥؿý»s§@¦¨¤@Óimage file¤F¡C # dd if=/dev/zero of=initrd.img bs=1k count=4096 # mke2fs -F -vm0 initrd.img # mkdir initrd.dir # mount -o loop initrd.img initrd.dir # (cd initrd ; tar cf - .) | (cd initrd.dir ; tar xvf -) # umount initrd.dir # gzip -c -9 initrd.img > initrd.bin »s§@bootloader: Saga Dreamcastªºbootloader¬OHitachi SHªºbootloaderªº¤@³¡¤À¡A¥s°µsh-boot¡C¤@¨ÇSaga Dreamcastªº¯S©wªºcode³Q©ñ¦bsh-bootªº¥Ø¿ý¤¤¡C¦b¤l¥Ø¿ýtools/dreamcast¤¤¡A¥]§tMakefile¥Î¨Ó»s§@bootloaderªºimageÀɮסC¥t¥~ÁÙ¦³¤@Óscript¥s°µroast.sh¡A¥i¥H¥Î¨Ó»s§@¤@Ó¥]§tSaga Dreamcast bootloaderªºboot CD¡C¤U±ªº«ü¥O±N«Ø¥ßSaga Dreamcastªºbootloader image: # tar xzf sh-boot-20010831-1455.tar.gz # patch -p0 < sh-boot-20010831-1455.diff # cd sh-boot/tools/dreamcast # cp ../../../kernel/arch/sh/boot/zImage ./zImage.bin # cp ../../../initrd.bin . # make scramble kernel-boot.bin bootloaderªºimage¦b³oùجO¤å¥ókernel-boot.bin.³oÓ¤å¥ó¥]§t¤Fbootloader¦Û¤v©M«e±§Ṵ́µ¥X¨ÓªºLinux kernelÁÙ¦³ramdisk image. »s§@Dreamcast Boot CD ²{¦b¥u®t³Ì«á¤@¨B¤F¡A¨º´N¬O§âkernel-boot.bin¿N¿ý¨ìCD¤W¥h¡CµM«á§âCD©ñ¨ìSaga Dreamcast¤W¡C¥´¶}Saga Dreamcastªº¹q·½¡A§A´N¥i¥H¬Ý¨ì§Aªºkernel boot¤F¡C «e±´£¨ì¹L¡Ash-boot¤¤¦³¤@Ó¥s°µroast.shªºscript.³oÓscript·|À°§U§Ú̦۰ʧ¹¦¨CD¿N¿ý¨BÆJ¡C³oÓscriptº¥ý§â |