This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.
A: ¥Ø«e¦³¤TÓ¬¡ÅD/¥b¬¡ÅDªº¤À¤ä¦b FreeBSD ªº CVS Repository:
RELENG_2_2 §Y 2.2-stable §Y "2.2 branch"
RELENG_3 §Y 3.x-stable §Y "3.0 branch"
HEAD §Y -current §Y 4.0-current
¦p¦P¨ä¥L¨âÓ¡AHEAD ¨Ã¤£¬O¯u¥¿ªº branch tag¡A¥¦¥u¬O¤@ӲŸ¹ ±`¼Æ¡A«ü¦V "current¡G©|¥¼¤À¤äªºµo®i¤¤ª©¥»" ¡A²°O¬° -current¡C
¥H²{¦b¨Ó»¡¡A-current ´Â¦V 4.0 µo®i¡A¦Ó 3.0-stable ³o Ó¤À¤ä¡A¤]´N¬O RELENG_3¡A¦b 1999 ¦~ 1 ¤ë±q -current ¤À¥X ¨Ó¡C
2.2-stable ³oÓ¤À¤ä¡A¤]´N¬O RELENG_2_2¡A¬O¦b 1996 ¦~ 11 ¤ë±q -current ¤À¥X¨Ó¡C
2.1-stable ³oÓ¤À¤ä¡A¤]´N¬O RELENG_2_1_0¡A«h¬O¦b 1994 ¦~ 9 ¤ë±q -current ¤À¤ä¥X¨Ó¡A³oÓ¤À¤ä¤w¸g§¹¥þ°h¥ð¤F¡C
A: °µ release ¥]¬A¤U±³o¤TÓ¨BÆJ¡Gº¥ý¡A°µ¥X¦³ vn ³oÓÅX°Êµ{ ¦¡ªº¥i¥Î kernel¡C§â¤U±³o¤@¦æ¥[¨ì kernel ³]©wÀÉ¡AµM«á°µ¥X·sªº kernel «·s¶}¾÷¡G
pseudo-device vn #Vnode driver (turns a file into a device)
±µµÛ¡A§A¤â¤Wn¦³¾ãÓ CVS repository¡C¥i¥H°Ñ¦Ò CVSUP ³o½g¤å³¹¡A¦ý¦b supfile ¤¤§â release ¦WºÙ³]¦¨ cvs¡A¦A§R±¼©Ò¦³ tag ©Î date ªºÄæ¦ì¡A¦p ¤U¡G
*default prefix=/home/ncvs
*default base=/a
*default host=cvsup.FreeBSD.org
*default release=cvs
*default delete compress use-rel-suffix
## Main Source Tree
src-all
src-eBones
src-secure
# Other stuff
ports-all
www
doc-all
µM«á°õ¦æ cvsup -g supfile §â©Ò¦³ªF¦è³£§ì¤U¨Ó...
³Ì«á¡AµwºÐn¦³¬Û·í¤jªºªÅ¶¡¨Ó°µ release¡C°²³]§A·Q§â¥¦©ñ¦b /some/big/filesystem ³o¸Ì¡A¤W±³oÓ¨Ò¤l¤]§â CVS repository ©ñ¦b /home/ncvs ¤F¡A±µµÛ¡G
setenv CVSROOT /home/ncvs # or export CVSROOT=/home/ncvs
cd /usr/src/release
make release BUILDNAME=3.0-MY-SNAP CHROOTDIR=/some/big/filesystem/release
¾ãÓ release ·|°µ¦b /some/big/filesystem/release¡Cµ²§ô ®É /some/big/filesystem/release/R/ftp ³oӥؿý¥i¥Hª½±µ¥Î ¨Ó°µ¬° FTP ¦w¸Ë¤è¦¡ªº¨Ó·½¡C¦pªG·Q°µ¥X -current ¥H¥~¤À¤äªº SNAP¡A ¦b¤W± make release ³o¤@¦æ¥[ RELEASETAG=SOMETAG¡CÁ|¨Ò¨Ó»¡¡A RELEASETAG=RELENG_2_2 ³oӰѼƷ|°µÓ§Y®Éªº 2.2-STABLE snapshot¡C
A: «Ø¥ß¦w¸ËºÏ¤ù¡BÁÙ¦³°µ¥X source/binary archive¡A³£¬O¥Ñ /usr/src/release/Makefile ¸Ì±ªº¦UºØ target ¦Û°Ê²£¥Í¡A³o ÓÀɮ׸̪º¸ê°TÀ³¸Ó¨¬¥H¶}©l¡C¦ý¬O³oÓ¹Lµ{²o¯A¨ì make world¡A©Ò¥H·| ¥Î¨ì¬Û·í¦hªº®É¶¡©MµwºÐªÅ¶¡¡C
A: ¨S¿ù¡A´N¬O³o¼Ë¤l¡C¦p¦W¦r©Ò¥Ü¡A``make world'' ·|«·s½s͍t²Î¤º«Ø ªº¨CÓ binary ÀÉ¡A³o¼Ë¦bµ²§ô®É´N¥i½T©w¦³Ó¤@P¥B°®²bªºÀô¹Ò(©Ò¥Hn ªá¤W¦n¤@¬q®É¶¡)¡C
¦b°õ¦æ ``make world'' ©Î ``make install'' ®É¡A¦pªG¦³ ³] DESTDIR ³oÓÀô¹ÒÅܼơA·s²£¥Íªº binary ±N·|¸Ë¦b ${DESTDIR} ¤Uªº¦P¼Ë¥Ø¿ý¾ð¤¤¡C¦ý¦b¬Y¨Ç× §ï shared library ©M««Ø binary ªºµL¯S©w±¡ªp¤U¡A³o¼Ë°µ¥i¯à·|¨Ï ``make world'' ¥¢±Ñ¡C
A: Adaptec 1542 SCSI ¥d¤¹³\¨Ï¥ÎªÌ¥Î³nÅé½Õ¾ã¶×¬y±Æªº¦s¨ú³t«×¡C¦ ´Áªº 1542 ÅX°Êµ{¦¡¸Õ¹Ï±N¥¦³]¦¨¥i¥Îªº³Ì§Ö³t«×¡A¦ý«á¨Óµo²{¦b¤@¨Ç ¾÷¾¹¤W¤£¯à¥Î¡A©Ò¥H²{¦bn¦b kernel ³]©w¤¤¥[ ``TUNE_1542'' ³oÓ¿ï¶µ¨Ó±Ò°Ê³oÓ¥\¯à¡C¦b¤ä´©ªº¾÷¾¹¤W¥Î³oÓ¿ï¶µ·|¨ÏµwºÐ¦s¨ú§ó §Ö¡A¦ý¦b¤£¤ä´©ªº¾÷¾¹¤W¦³¥i¯à·|·´±¼¸ê®Æ¡C
A: ¥i¥H¡AÂÇµÛ CTM ´N ¥i¥H¤£¥Î¤U¶Ç©Ò¦³ªºì©l½X¥Ø¿ý¾ð¡C
A: ¦b¥H BSD ¬°¥Dªº¸û·s¨t²Î¤¤¡Asplit ¦³Ó ``-b'' ¿ï¶µ¡A¬O¥Î¨Ó §âÀÉ®×¥H¥ô·N¼Æ¥Ø byte ¤Á¶}¡C
³o¸Ì¬O /usr/src/Makefile ¤¤ªº¤@Ó¨Ò¤l¡G
bin-tarball:
(cd ${DISTDIR}; \
tar cf - . \
gzip --no-name -9 -c | \
split -b 240640 - \
${RELEASEDIR}/tarballs/bindist/bin_tgz.)
A: ½Ð¬Ý¤@¤U Handbook ¤¤¥[¤Jµ{¦¡½Xªº³¡¥÷¡C
¦P®É¤]·PÁ§Aªº¶O¤ß¡I
A: ¥Ñ Frank Durda IV ©Ò¼g¡G
²³æªº»¡¡A·í¥D¾÷µo¥X¬O§_¦³ PnP ¥dªº¸ß°Ý°T¸¹®É¡A©Ò¦³ªº PnP ·|¦b´XÓ©T©wªº I/O port §@¦^À³¡C©Ò¥H·í°»´ú PnP ªºµ{¦¡¶}©l®É¡A¥¦ ·|¥ý°Ý¦³¨S¦³ PnP ¥d¦b¡A±µµÛ©Ò¦³ PnP ¥d·|¦b¥¦©ÒŪªº port ¥H¦Û¤v ªº«¬¸¹ # §@¦^µª¡A³o¼Ë°»´úµ{¦¡´N·|±o¨ì¤@Ó wired-OR ``yes'' ªº¼Æ¦r¡A¨ä¤¤¦Ü¤Ö·|¦³¤@Ó bit ¬O¥´¶}ªº¡CµM«á°»´úµ{¦¡·|n¨D«¬¸¹ (¥Ñ Microsoft/Intel«ü©w)¤p©ó X ªº¥d``Â÷½u''¡A¦A¥h¬Ý¬O§_ÁÙ¦³¥d¦^ µª¦P¼Ëªº¸ß°Ý¡A¦pªG±o¨ì ``0''¡A´Nªí¥Ü¨S¦³«¬¸¹¤j©ó X ªº¥d¡C ²{¦bµ{¦¡·|°Ý¬O§_¦³«¬¸¹¤p©ó X ªº¥d¡A¦pªG¦³ªº¸Ü¡Aµ{¦¡¦An«¬¸¹¤j©ó X-(limit/4) ªº¥dÂ÷½u¡AµM«á«ÂФW±ªº°Ê§@¡C¥Î³oºØÃþ¦ü binary search ªº¤èªk¡A¦b¬Y½d³ò¤º§äÓ´X¦¸«á¡A°»´úµ{¦¡³Ì«á·|¦b¾÷¾¹¤¤°Ï¤À ¥X©Ò¦³ªº PnP ¥d¡A·j´M¦¸¼Æ¤]»·§C©ó¤@Óӧ䪺 2^64 ¦¸¡C
¤@±i¥dªº ID ¥Ñ¨âÓ 32-bit(©Ò¥H¤W±¬O 2Æ64) + 8bit °»¿ù ½X²Õ¦¨¡A²Ä¤@Ó 32 bits ¬O¥Î¨Ó°Ï¤À¦U®a¼t°Óªº¡C³o¨Ç¼t°Ó¨S¦³¥X¨Ó¼á ²M¹L¡A¦ý¬Ý¨ÓÀ³°²³]¦P¤@®a¥Xªº¤£¦PºØÃþªº¥dªº¼t°Ó ID ¦³¥i¯à¤£¦P¡C ¥Î 32 bits ¥u¨Óªí¥Ü¤£¦P¼t°Óªº·Qªk¹ê¦b¦³ÂI¹LÀY¤F¡C
²Ä¤GÓ 32 bits «h¬O«¬¸¹ #¡B¤A¤Óºô¸ô¦ì§}¡B©Î¤@¨Ç¨Ï³o±i¥d¿W ¯Sªº¸ê®Æ¡C°£«D²Ä¤@Ó 32 bits ¤£¦P¡A§_«h¼t°Ó¤£¥i¯à§@¥X²Ä¤GÓ 32 bit ¬Û¦Pªº¨â±i¥d¡C©Ò¥H¦b¤@¥x¾÷¾¹¤¤¥i¥H¦³¦P¼Ëªº¦n´X±i¥d¡AµM¦Ó¥LÌ ¾ãÓ 64 bits ÁÙ¬O·|³£¤£¤@¼Ë¡C
³o¨âÓ 32 bit ¥Ã»·³£¤£¥i¯à¬°¹s¡A³o¨Ï±o³Ì¶}©l binary search ¤¤ ªº wired-OR ·|±o¨ì¤@Ó«D¹s¼Æ¦r¡C
¤@¥¹¨t²Î°Ï¤À¥X©Ò¦³¥dªº ID¡A±µµÛ·|¸g¥Ñ¦P¼Ëªº port ¤@ÓÓ«·s±Ò °Ê¨C±i¥d¡A±µµÛ§ä¥X¤wª¾¤¶±¥d©Ò»Ýªº¸ê·½¡B¦³þ¨Ç¥i¥H¿ïªº interrupt µ¥µ¥¡C©Ò¦³¥d³£·|³Q±½´y¤@¦¸¡A¨Ó¦¬¶°³o¨Ç¸ê®Æ¡C
³o¨Ç¸ê°T±µµÛ©MµwºÐ¤Wªº ECU ÀɮסB©Î MLB BIOS ¸Ìªº¸ê®Æµ²¦X¦b¤@ °_¡A³q±`¬Oºî¦X ECU ©M MLB ¸Ìªº BIOS PnP ¸ê®Æ¡A³o¨Ç¶gÃä¨Ã¤£¤ä´©¯u ¥¿ªº PnP¡AµM¦Ó°»´úµ{¦¡¦bÀˬd BIOS ©M ECU ¸ê®Æ«á¡A¥¦¥i¥HÁ×§K PnP ¶gÃä©M¨º¨Ç°»´ú¤£¨ìªº¬Û½Ä¬ð¡C
±µµÛ¦A«×«ô³X³o¨Ç PnP ¶gÃä¡A³o¦¸·|§â¥i¥Îªº I/O¡BDMA¡BIRQ ©M°O ¾ÐÅé¬M®gªº¦ì§}³£«ü©wµ¹¥¦Ì¡C³o¨Ç¶gÃä´N·|¥X²{¦b©Ò«ü©wªº¦a¤è¡Aª½¨ì ¤U¤@¦¸«·s¶}¾÷¬°¤î¡A¤£¹L¤]¨S¦³¤H»¡¤£¯à§â¥¦ÌÀH®É²¾¨Ó²¾¥h¡C
¤W±¦³¬Û·í¦hªºÂ²¤Æ¡A¦ý§AÀ³¸Ó¤w¸g¤F¸Ñ¤jPªº¹Lµ{¡C
Microsoft §âªí¥Ü¦Lªí¾÷ª¬ºAªº´XÓ¥Dn port ®³¨Ó§@ PnP¡A¥L̪º ÅÞ¿è¬O¨S¦³¤@±i¥d·|¦b³o¨Ç¦a¤è¸Ñ½X§@¬Û¤Ïªº I/O cycles¡C¦ý¬O§Ú§ä¨ì ¤@´Ú¦´Á¤´¦bµû¦ô PnP ´£®×®Éªº IBM ì¼t printer board¡A¥¦ªº½T¥h¸Ñ ¹ï³o¨Çª¬ºA port ªº¼g¤J¸ê®Æ¡A¦ý¬O MS ``»¡¤F´Nºâ''¡C©Ò¥H¥¦Ìªº½T¦³ ¹ï¦Lªí¾÷ª¬ºA port ¼g¤J¡AÁÙ¦³Åª¨ú¸Ó¦ì§} + 0x800¡B©M¥t¤@Ó¦b 0x200 ¤Î 0x3ff ¤§¶¡ªº port¡C
A: ¦³´X¸s¤H¤h¤w¸gªí¥Ü¹ïµo®i¦h¥¥x FreeBSD ªº¿³½ì¡A¨ä¤¤ FreeBSD/AXP (ALPHA) §Y¬O¨ä¤¤¬Û·í¦¨¥\ªº¨Ò¤l¡A¥i¥H¦b ftp://ftp.FreeBSD.org/pub/FreeBSD/alpha ³o¸Ì¨ú±o¥¦ªº 3.0 SNAPshot ª©¥»¡CALPHA ª©ªº FreeBSD ¦b¶V¨Ó¶V¦hªº ALPHA ¾÷¾¹¤W ¨Ï¥Î¡A¨ä¤¤¥]¬A¤F AlphaStation¡BAXPpci¡BPC164¡BMiata ©M Multia ³o´XºØ¡Cnµ¥¨ì¨t²Î¦w¸Ë¤u¨ã§¹¥þ¡B¯à¥Î¥úºÐ¦w¸Ë¡B¥H¤Î¦³¨¬°÷¯à¥Îªº port/package ¤§«á¡A§Ṳ́~¥´ºâ§â¥¦·í§@§¹¾ãªºª©¥»¡A©Ò¥H²{¦bÀ³¸Ó§â FreeBSD/AXP ·í§@ BETA «~½èªº³nÅé¡CYn¬ÛÃöª¬ªpªº®ø®§¡A½Ð¥[¤J <freebsd-alpha@FreeBSD.org> mailing list¡C
¤]¦³¤Hªí¥Ü¹L±N FreeBSD SPARC ª©¥»ªº¿³½ì¡A¦pªG§A·Q°Ñ¥[³oÓpµe¡A ½Ð¥[¤J <freebsd-sparc@FreeBSD.org> mailing list¡C¦pªG·Qnª¾¹DÃö©ó ·s¥¥xªº°Q½×¡A½Ð¥[¤J <freebsd-platforms@FreeBSD.org> mailing list ¡C
A: ³on¬Ý§A¬O§_¥´ºâ±N³oÓÅX°Êµ{¦¡¤½¶}¨Ï¥Î¡A¦pªG¬Oªº¸Ü¡A½Ð§â¥¦ªºì©l ½X°e¤@¥÷µ¹§ÚÌ¡AÁÙ¦³ files.i386 ק諸³¡¥÷¡Bkernel ³]©w Àɼ˥»¡B¥H¤Î¥Î¨Ó²£¥Í³]³ÆÀɪº MAKEDEV¡C ¦pªG§A¤£¥´ºâ¡B©Î¦]¬°ª©Åv°ÝÃD¦Ó¤£¯à¤½¶}ªº¸Ü¡A§Ú̦³¯S¦a«O¯d character major number 32 ©M block major number 8 µ¹³o¤è±ªº¨Ï¥Î¡A ª½±µ¥Î³o¨âÓ´N¦n¤F¡C¤£½×¦p¦ó¡A§Ú̳£·|«Ü·P¿E§A¯à¦b <freebsd-hackers@FreeBSD.org> µoªíÅX°Êµ{¦¡ªº®ø®§¡C
A: ¦b¦^µª¦³Ãö¥Ø¿ý©ñ¸m¤è¦¡¤£¦Pªº°ÝÃD¤W¡A§Ú¦b 1983 ¦~¼g¦n¥Ø«eªº§@ªk «á´N¨S¦³¦A§ïÅܹL¡A³oºØ¤è¦¡¬O°w¹ïì¥ýªº FFS Àɮרt²Î¡A«á¨Ó¤]¨S ¦³¹ï¥¦§@¥ô¦ó§ó°Ê¡C¥¦¦bÁ×§K cylinder group ³Q¶ñº¡³o¤è±°µ±o¬Û·í ¦¨¥\¡A¦ý¬O´N¹³¦³¨Ç¤H¤w¸gª`·N¨ì¡A¥¦©M `find' ´N°t¦X±o¤£¤j¦n¡C¤j ³¡¥÷ªºÀɮרt²Î¬O¥Ñ¨º¨Ç¥Î depth first search(aka ftw) ²£¥Íªº archive »s³y¥X¨Ó¡A¸Ñ¥X¨Óªº¥Ø¿ý inode ·|¾î¸ó¦n´XÓ cylinder group¡A¦pªG¥H«án°µ depth first search ªº¸Ü¡A³o¬O³ÌÁV¿|ªº±¡ªp¤§ ¤@¡C¦pªG§Ú̪¾¹DÁ`¦@·|²£¥Í¦h¤Ö¥Ø¿ýªº¸Ü¡A¸Ñªk¬O¦b°µ¥ô¦ó¦s¨ú/¼g ¤J°Ê§@¤§«e¡A¦b¨CÓ cylinder group ¤W¥ý³y¥X(©Ò¦³¥Ø¿ý¼Æ/cylinder greoup ªº¼Æ¥Ø)³o»ò¦hªº¥Ø¿ý¡C«Ü©úÅ㪺¡A§ÚÌ¥²¶·n¦³®Ú¾Ú¦a¥h²q³o ӼƦr¡A´Nºâ¤@Ó¹³ 10 ªº«Ü¤p©T©w¼Æ¥Ø¤]·|¨Ï®Ä²v¥H¯Å¼Æ¦¨ªø¡C°Ï¤À restore (§Y¸Ñ¶}¤Wzªº archive) ©M¤@¯ëÀÉ®×¾Þ§@ªº¤èªk¥i¥H¬O(²{¦b ¥Îªººtºâªk¥i¯àn§ó±Ó·P)¡G¦pªG¤@¨Ç¥Ø¿ý(³Ì¦h 10 Ó)³£¦b 10 ¬í¤º²£ ¥Íªº¸Ü¡A¨º»ò´N§â³o¨Ç¥Ø¿ý»E¶°¦b¦P¤@Ó cylinder group¡C¤£ºÞ«ç¼Ë¡A §Úªº¸gÅç«ü¥X³o¬O¤@Ó¤w¸g¥R¥÷¹êÅç¹Lªº³¡¥÷¡C
Kirk McKusick, September 1998
A: [³o¸`¬O±q Bill Paul ¦b freebsd-current mailing list ¤Wµoªí ªº«H¤¤¸`¿ý¡ADag-Erling Coïdan Smørgrav ×¥¿¤F¥´¦r¿ù»~¡B¦A¥[¤W¬A©·¸Ìªºª`¸Ñ¡C]
From: Bill Paul <wpaul@skynet.ctr.columbia.edu>
Subject: Re: the fs fun never stops
To: ben@rosengart.com
Date: Sun, 20 Sep 1998 15:22:50 -0400 (EDT)
Cc: current@FreeBSD.org
[<ben@rosengart.com> µoªí¤F¤U±ªº panic °T®§]
> Fatal trap 12: page fault while in kernel mode
> fault virtual address = 0x40
> fault code = supervisor read, page not present
> instruction pointer = 0x8:0xf014a7e5
^^^^^^^^^^
> stack pointer = 0x10:0xf4ed6f24
> frame pointer = 0x10:0xf4ed6f28
> code segment = base 0x0, limit 0xfffff, type 0x1b
> = DPL 0, pres 1, def32 1, gran 1
> processor eflags = interrupt enabled, resume, IOPL = 0
> current process = 80 (mount)
> interrupt mask =
> trap number = 12
> panic: page fault
·í§A¬Ý¨ì¹³³o¼Ëªº°T®§®É¡A¥u§â¥¦«þ¤@¥÷°e¤W¨Ó¬O¤£°÷ªº¡C§Ú¦b¤W ±¯S¦a¼Ð©úªº instruction pointer Ȭ۷í«n¡A¤£©¯ªº¬O¥¦·|¦]³] ©w¦Ó¤£¦P¡C´«¥y¸Ü»¡¡A³oÓÈ·|¸ò§A¥Îªº kernel image ÀɦÓÅܰʡC¦p ªG¬O¥Î¬YÓ snapshot ª©¥»ªº GENERIC kernel¡A¤]³\¨ä¥L¤H¥i¥H°lÂÜ ¨ì¥X°ÝÃDªº¨ç¦¡¡A¦ý¦pªG§A¬O¥Î¦Ûqªº kernel¡A¨º»ò¥u¦³§A¤~¯à §i¶D§Ṵ́ÝÃD¥X¦b¨º¸Ì¡C
n°µªº¨Æ¥]¬A³o¨Ç¡G
§â instruction pointer ªºÈ°O¤U¨Ó¡Cª`·N¦b«e±ªº 0x8: ¦b³oÓ±¡ªp¤¤¨Ã¤£«n¡A§ÚÌnªº¬O 0xf0xxxxxx¡C
·í¨t²Î«·s¶}¾÷«á¡A°õ¦æ³o¹D©R¥O¡G
% nm /(³y¦¨ panic ªº kernel ÀÉ®×) | grep f0xxxxxx
% nm /kernel.that.caused.the.panic | grep f0xxxxx
§Ú±`±`¬Ý¨ì¤HÌÅã¥Ü¤@¤j¤ù panic °T®§¡A¦ý«Ü¤Ö¬Ý¨ì¦³¤Hªá¤@ÂI®É¶¡ §â instruction pointer ©M kernel symbol table ¤¤ªº¨ç¦¡¤ñ¸û¤@¤U¡C
n°lÂÜ¥X³y¦¨ panic ì¦]ªº³Ì¦n¤èªk¬O¥ý°µ¥X crash dump¡AµM«á¥Î gdb(1) ¦b¤W±°µ stack trace¡C·íµM¡A³on¾a -current ¤¤ªº gdb(1) ¯à¹B§@¥¿±`¡AµM¦Ó§ÚµLªk«OÃÒ³o¤@ÂI¡C(°O±o¦³¤H»¡ ELF ªº gdb(1) ¦b kernel ªº crash dump ¤W¤£¯à¥¿±`¾Þ§@¡A¦b 3.0 ²æÂ÷ BETA ¶¥¬q®É³Ì¦n¦³¤H¥ýÀˬd³o¤è±ªºª¬ªp¡A§K±o«Ü¦h¤H¦b¦¬¨ì 3.0 ¥úºÐ «áµÈ¬õ¤FÁy¡C)
¤£ºÞ¬O¨º¤@ºØ¡A§Ú³q±`¬O¥Î³oÓ¤èªk¡G
¼g¦n kernel ³]©wÀÉ¡C¦pªG§A»Ýn¥Î kernel debugger¡A¦b³]©w Àɤ¤¥[¤W `options DDB' ³oÓ¿ï¶µ¡C(·í§ÚÃhºÃ¦³¥X²{µL½a°j°é®É¡A³q ±`·|¥Î³oÓ¨Ó³]©w¤¤Â_ÂI¡C)
¥Î config -g KERNELCONFIG °µ¥X¥Î¨Ó½sĶªº¥Ø¿ý
cd /sys/compile/KERNELCONFIG; make
µ¥ kernel ½sĶ¥X¨Ó
cp kernel kernel.debug
strip -d kernel
mv kernel /kernel.orig/
cp kernel /
«·s¶}¾÷
[ª`·N¡G²{¦b FreeBSD 3.x kernel ¤º©w¬O ELF ®æ¦¡¡A©Ò¥HÀ³¸Ó ¥Î strip -g ¦Ó¤£¬O strip -d¡C¦pªG§Aªº kernel ¦]¬YºØì ¦]¤´¬O a.out ®æ¦¡ªº¸Ü¡A«h¥Î strip -aout -d¡C]
ª`·N§A¤£·|¯uªº¥Î¥]¬A©Ò¦³ debug symbol ªº kernel ¨Ó¶}¾÷¡A ¥Î -g ½sĶ¥X¨Óªº kernel ¤j¤p«Ü®e©ö´N¶W¹L 10MB¡C¤£»Ýn¥Î³o»ò ¤jªº kernel ¶}¾÷¡A±ß¤@ÂI gdb(1) ¤~·|»Ýn¥¦(gdb(1) ·|¥Î ¨ì¸Ì±ªº symbol table)¡C©Ò¥H§Ṳ́~·|§â§¹¾ãªº kernel ½Æ»s¤@¥÷¡A±µ µÛ¥Î strip -d §R±¼ debug symbol¡A°µ¥X²Ä¤GÓ kernel¡A³oÓ¤~¯u ¥¿®³¨Ó¶}¾÷¡C
n½T©w¯à§ì¨ì crash dump¡A¥ý½s¿è /etc/rc.conf¡A±N dumpdev «ü¨ì swap ¤À³Î°Ï¡C³o¼Ë rc(8) ·|¥Î dumpon(8) ¨Ó±Ò°Ê crash dump¡A§A¤]¥i¥H¤â°Ê¥Î dumpon(8)¡C¦b panic ¤§«á¡A crash dump ¥i¥H¥Î savecore(8) ¦s°_¨Ó¡F¦pªG /etc/rc.conf ¸Ì¦³³] dumpdev¡A¨º»ò«·s¶}¾÷«á rc(8) ·|¦Û°Ê°õ¦æ savecore(8) §â crash dump ¦s¦b /var/crash¡C
ª`·N¡GFreeBSD ªº crash dump ³q±`©M¾÷¾¹¸Ìªº¹ê»Ú°O¾ÐÅé¤@¼Ë¤j¡A ´N¹³¦pªG¦³ 64MB °O¾ÐÅé¡Acrash dump ¤j¤p´N¬O 64MB¡C©Ò¥Hn½T©w /var/crash ¤U¦³¨¬°÷ªºªÅ¶¡¡A©Î¬O¥i¥H¤â°Ê°õ¦æ savecore(8) §â crash dump ©ñ¨ì¥t¤@ӪŶ¡¸û°÷ªº¥Ø¿ý¤U¡C¥t¤@ºØ¤]³\¥i¥H¨î crash dump ªº¤èªk¡A¬O¦b kernel ³]©wÀɤ¤¥Î options MAXMEM=(foo)¡A ±N kernel ¥i¥Îªº°O¾ÐÅé¨î¦b¦X²zªº¤j¤p¡CÁ|¨Ò¨Ó»¡¡A¦pªG§A¦³ 128MB ªº°O¾ÐÅé¡A¦ý¬O¥i¥H¨î kernel ¥u¯à¥Î 16MB ªº°O¾ÐÅé¡A³o¼Ë crash dump ´N¬O 16MB ¦Ó¤£¬O 128MB ¤F¡C
¤@¥¹µo²{¦³¤F crash dump¡A´N¥i¥H¥Î gdb(1) ¨Ó°µ stack trace ¡A¦p¤U©Ò¥Ü¡G
% gdb -k /sys/compile/KERNELCONFIG/kernel.debug /var/crash/vmcore.0
(gdb) where
nª`·N¥i¯à·|¥X²{¦n´Xӿùõªº¥i¥Î¸ê°T¡A§A¥i¥H¥Î script(1) §â©Ò¦³¿é¥X³£¦s°_¨Ó¡C¥Î¥]¬A©Ò¦³ debug symbol ªº kernel ¨Ó°£¿ù¡A ³o¼ËÀ³¸Ó¥i¥Hª½±µÅã¥Ü panic ¬Oµo¥Í¦b¨º¤@¦æ¡C³q±`¬O¥Ñ¤U©¹¤WŪ stack strace¡A³o¼Ë¤~¯à¤@ÓÓ°lÂÜ¥X¦³þ¨Ç°Ê§@¤Þ¨ì crash¡C¤]¥i¥H¥Î gdb(1) §â¦UºØÅܼƩε²ºcªº¤º®e¦L¥X¨Ó¡A¥HÀˬd¨t²Î crash ®Éªº ¹ê»Úª¬ºA¡C
¦n°Õ¡A¦pªG§A¦³²Ä¤G¥x¹q¸£¦Ó¥B¦³°÷ºÆ¨g¡A¥i¥H±N gdb(1) ³]©w ¦¨»·ºÝ°£¿ù¡C³o¼Ë§A¥i¥H¦b¤@¥x¾÷¾¹¤¤¥Î gdb(1) ¥h°£¿ù¥t¤@¥x¸Ìªº kernel¡A¥i¥H°õ¦æªº¥]¬A³]©w¤¤Â_ÂI¡B¦b kernel ì©l½X¤¤¤@¨B¨B°õ¦æµ¥ µ¥¡A´N¹³¦b¤@¯ë¨Ï¥ÎªÌµ{¦¡¤W°£¿ù¤@¼Ë¡C¥Ñ©ó¨S¦³¤°»ò¾÷·|¬°°£¿ù¦Ó³]¸m ¨â¥x¨Ã¾F¹q¸£¡A©Ò¥H§ÚÁÙ¨S¦³³o¼Ëª±¹L¡C
[Bill ªþª`¡G§Ú§Ñ¤F´£¨ì¤@ÂI¡G¦pªG§A¦³±Ò°Ê DDB ¦Ó kernel ¤] ¤w¸g¶i¤J°£¿ù¾¹¡A¥i¥H¦b DDB ©R¥O¦C¤U¥´ `panic'¡A±j¢²£¥Í panic(ÁÙ ¦³ crash dump)¡C¤]¦³¥i¯à¦b panic ¶¥¬q®É¦A¶i¤J°£¿ù¾¹¡A¦pªG³o¼Ëªº¸Ü ¡A¿é¤J `continue'¡A±µµÛ¥¦´N·|§¹¦¨ crash dump¡C -ed]
A: ¦b ELF ¤@¨t¦Cªº¤u¨ã¤¤¡A¤º©w¬O¤£·|Åý dynamic linker ¬Ý¨ì°õ¦æÀÉ ¸Ì©w¸q¤Fþ¨Ç symbol¡C©Ò¥H dlsym() ¨S¦³¿ìªk¥ÎÂǥѩI¥s dlopen(NULL, flags) ¨ú±oªº handle¡A¥Î¥¦¥h·j´M¦³¨º¨Ç symbol ¤@©w·|¥¢±Ñ¡C
¦pªG§A·Qn¥Î dlsym() §ä¥X¬YÓ process ªº¥D°õ¦æÀɤ¤ ¦³þ¨Ç symbol¡A«hn¦b link ®É¹ï ELF linker ¥[¤W -export-dynamic ³oӰѼơC
A: ¨t²Îªº¤º©w¬O¡AFreeBSD 3.x kernel ¯à©w§}¨ì 256 MB¡A4.x «h¬O 1 GB¡C¦pªG¬Oºô¸ôt²ü¬Û·í«ªº¦øªA¾¹(´N¹³¤j«¬ FTP ©Î HTTP ¦øªA¾¹)¡A 256 MB ¥i¯à·|¤£¤j°÷¡C
n«ç»ò¼W¥[©w§}ªÅ¶¡©O? n±q¨â¤è±µÛ¤â¡Cº¥ý§i¶D kernel ¥»¨n «O¯d¸û¤jªÅ¶¡; ¨ä¦¸¡A¬JµM¬O¦b©w§}ªÅ¶¡ªº³Ì¤W±¸ü¤J kernel¡A©Ò¥HÁÙ n½Õ§C¸ü¤Jªº¦ì§}¡A§_«h´N·|¶W¹L©w§}½d³ò¡C
¼W¥[ src/sys/i386/include/pmap.h ¸Ìªº NKPDE È «K¥i¹F¦¨²Ä¤@ӥؼСC1 GB ªº©w§}ªÅ¶¡·|¹³³o¼Ë¡G
#ifndef NKPDE
#ifdef SMP
#define NKPDE 254 /* addressable number of page tables/pde's */
#else
#define NKPDE 255 /* addressable number of page tables/pde's */
#endif /* SMP */
#endif
nºâ¥X NKPDE ªº¥¿½TÈ¡A±N·QnªºªÅ¶¡¤j¤p(¥H megabyte ¬°³æ ¦ì)°£¥H 4¡A±µµÛ³æ CPU ¾÷¾¹´î 1¡AÂù CPU «h¬O´î 2¡C
n¸Ñ¨M²Ä¤GÓ°ÝÃD¡A¥²¶·¦Û¦æºâ¥X kernel ³Q¸ü¤Jªº¦ì§}¡G¨D¥X 0x100100000 ´î±¼©w§}ªÅ¶¡¤j¤pªºÈ(¥H byte ¬°³æ¦ì)¡A¦p 1 GB ¤j¤p´N ¬O 0xc0100000¡C§â src/sys/i386/conf/Makefile.i386 ¸Ìªº LOAD_ADDRESS ³]¦¨³oÓÈ¡A±µµÛ¦b src/sys/i386/conf/kernel.script ¤¤¡A±N section ¦Cªí³Ì«e±ªº location counter ³]¦¨¬Û¦PªºÈ¡A¦p¤U¡G
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(btext)
SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/obj/elf/home/src/tmp/usr/i386-unknown-freebsdelf/lib);
SECTIONS
{
/* Read-only sections, merged into text segment: */
. = 0xc0100000 + SIZEOF_HEADERS;
.interp : { *(.interp) }
µM«á«·s config ©M°µ¥X·sªº kernel¡C¦b°õ¦æ¹³ ps(1)¡B top(1) ³oÃþµ{¦¡®É¥i¯à·|¸I¨ì°ÝÃD¡A°µ¤@¦¸ make world À³¸Ó´N¥i¥H¸Ñ¨M(©Î§â§ï¹Lªº pmap.h «þ¨ì /usr/include/vm/ ¤U¡A¦A¤â°Ê½sĶ libkvm¡Bps ©M top)¡C
ª`·N¡Gkernel ©Ò¯à©w§}ªºªÅ¶¡¤j¤p¥²¶·¬O 4 megabytes ªº¿¼Æ¡C
[David Greenman ¥[¤W ³o¤@¬q¡G§Ú»{¬° kernel ©w§}ªÅ¶¡¤j¤pÀ³¸Ó¬O 2 ªº¼¾¡A¦ý¤£¤j½T ©w³o¤@ÂI¡Cªº±Ò°Êµ{¦¡·|°Ê¨ì high order address bits¡A°O±o¥¦°²³] ¦Ü¤Ö¦³ 256 MB¡C]