¡@³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§A­n¦³¨¬°÷ªº¤å¥ó¡C¦P®É¡A§A­n¥²¶·­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

  1. Boot loader ³Ì¥ý±o¨ì¨t²Îªº±±¨îÅv¡C³o­Ó±±¨îÅv¬O±qBIOS©Î啓°ÊµwÅ餤±o¨ìªº¡C
  2. Boot loader §âkernelªºimage¥á¨ìmemoryùØ­±¥h¨Ã¥B¸Ñ¶}À£ÁY¡C
  3. Boot loader ¶i¤J¤w¸g¸ÑÀ£ÁYªºmemory image¤¤¡C³o­Ómemory imageùØ­±´N¬OLinuxªº Operation System Kernel°Õ¡C
  4. Kernel ¹ï¦Û¤v¶i¦æªì©l¤Æ¡AµM«ámount root ¥Ø¿ý¡C¸ü¤Jdevice drive¡Aªì©l¤ÆµwÅé¡A³Ì«á¶}©l¹B¦æÀ³¥Îµ{¦¡¡C

²{¦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²Î¥u­t³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²Î¥u­n¦³¨¬°÷ªº¦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µ{¦¡³£¤ä´©­Ó¡C­nª`·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ùØ¥D­n¬O­nconfigure 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 ..

 

Building a runtime library

 ²{¦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¥D­n¤]¬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ªºkernelSaga Dreamcast³]¸m¦n¤F¡C²{¦b¥u­ncompile©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¥h­pºâ¥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·Q­n¹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­º¥ý§â