¡¡¡¡Ä¬ÈÏÇé¿öÏ£¬ ²¢²»¿ªÆô Linux ¶þ½øÖƼæÈÝÖ§³Ö¡£ ÆôÓÃÕâÒ»¹¦ÄÜ×î¼òµ¥µÄ·½·¨ÊÇÔØÈë linux KLD Ä£¿é (¡°Kernel LoaDable object¡±)¡£ ÒÔ root µÄÉí·Ý£¬ ¼üÈëÏÂÁÐÃüÁî¼´¿É£º
# kldload linux
¡¡¡¡Èç¹ûÏ£Íû Linux ¼æÈÝÖ§³ÖÔÚϵͳ³õʼ»¯¹ý³ÌÖÐ×Ô¶¯ÆôÓ㬠ÔòÓ¦ÔÚ /etc/rc.conf ÖÐÔö¼Ó£º
linux_enable="YES"
¡¡¡¡kldstat(8)¿ÉÒÔÓÃÀ´¼ì²éKLDÄ£¿éÊÇ·ñ¼ÓÔØ£º
% kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko
¡¡¡¡Èç¹ûÄú²»Ïë»òÕßÎÞ·¨½«Linux KLD¼ÓÔØ£¬Äú¾ÍÐèÒªÔÚÄÚºËÖо²Ì¬Á´½Ó½øLinux¶þ½øÖƼæÈÝģʽ¡£Äú±ØÐëÔÚ ÄúµÄÄÚºËÅäÖÃÎļþÀïÃæ¼ÓÈëoptions COMPAT_LINUX£¬È»ºó°´ÕÕµÚ 8 ÕÂÖØÐ±àÒëÄںˡ£
¡¡¡¡ÓÐÁ½ÖÖ·½·¨À´°²×°LinuxÔËÐÐʱ¿â£¬ÒªÃ´Ê¹ÓÃlinux_base port£¬ ҪôÊÖ¶¯°²×°¡£
¡¡¡¡ÕâÊÇ×îÈÝÒ׵ݲװ·½·¨£¬Ö»ÐèÒªÏñ°²×°ÆäËûportÒ»Ñù´Ó Ports CollectionÀ´°²×°£º
# cd /usr/ports/emulators/linux_base-f10 # make install distclean
×¢Òâ: ¶ÔÓÚ FreeBSD 8.0 ֮ǰµÄ°æ±¾µÄ FreeBSD ϵͳ£¬ ÄãÐèҪʹÓà emulators/linux_base-fc4 port ¶ø²»ÊÇ emulators/linux_base-f10¡£
¡¡¡¡ ÄúÏÖÔÚÓ¦µ±Êǹ¤×÷ÔÚLinux¼æÈÝģʽÏÂÁË¡£Ò»Ð©³ÌÐò¿ÉÄÜ»áÌáʾϵͳ¿âµÄ°æ±¾²»ÕýÈ·¡£Í¨³££¬Õâ²»ÊÇÎÊÌâ¡£
×¢Òâ: Óжà¸ö°æ±¾µÄemulators/linux_base port£¬Õë¶Ô²»Í¬µÄ°æ±¾µÄLinux¡£ ÄúÓ¦¸ÃÑ¡Ôñ×î½Ó½üLinuxÓ¦ÓóÌÐòÐèÒªµÄÄǸö°æ±¾À´°²×°¡£
¡¡¡¡Èç¹ûÄúûÓа²×° Ports Collection£¬ÄúÒ²¿ÉÒÔͨ¹ýÊÖ¶¯À´°²×°LinuxÔËÐÐʱ¿â¡£ Äú½«ÐèÒªÕâЩ³ÌÐòÒÀÀµµÄLinux¹²Ïí¿â£¬¶øÇÒÄúÐèÒª´´½¨Ò»¸ö¡°shadow root¡± Ŀ¼/compat/linux£¬ÈκÎÒª±»Linux³ÌÐò´ò¿ªµÄ¹²Ïí¿â¶¼Ê×ÏÈÔÚÕâ¸öĿ¼ÀïÃæ²éÕÒ¡£ ËùÒÔ£¬Èç¹ûÒ»¸öLinux³ÌÐò¼ÓÔØÁË£¬ÀýÈ磬/lib/libc.so£¬FreeBSD »áÊ×Ïȳ¢ÊÔ´ò¿ª /compat/linux/lib/libc.so£¬Èç¹û²»´æÔÚ£¬Ëü½«³¢ÊÔ´ò¿ª/lib/libc.so¡£ ¹²Ïí¿âÓ¦¸Ã°²×°ÔÚ/compat/linux/lib¶ø²»ÊÇLinux ld.so±¨¸æµÄÆäËû·¾¶¡£
¡¡¡¡Í¨³££¬ÄúÐèҪѰÕÒLinux³ÌÐòÒÀÀµµÄ¹²Ïí¿â¡£ ´Ëºó£¬ ÄãµÄϵͳÉϾͻáÓÐÒ»×é Linux ¹²Ïí¿â£¬ Õâ×é¹²Ïí¿â×ãÒÔÓÃÀ´ÔËÐÐа²×°µÄ Linux ¶þ½øÖƳÌÐò¡£
¡¡¡¡Èç¹ûÄú°²×°ÁËlinux_base port£¬µ«ÊÇÄúµÄ ÄúµÄÓ¦ÓóÌÐòÈԻᱨ¸æ¶ªÊ§¹²Ïí¿âµÄÐÅÏ¢£¿ÄúÈçºÎÖªµÀLinux³ÌÐòÐèÒªÄĸö¹²Ïí¿â£¿ »ù±¾ÉÏ£¬ÓÐÁ½ÖÖ¿ÉÄÜÐÔ£¨½ÓÏÂÀ´µÄÖ¸ÁîÐèÒªrootȨÏÞ£©£º
¡¡¡¡Èç¹ûÄúÓпÉÒÔ·ÃÎʵÄLinuxϵͳ£¬ ¿´¿´Ó¦ÓóÌÐòÐèҪʲô¹²Ïí¿â£¬ °ÑËüÃǸ´ÖƵ½ÄúµÄFreeBSDϵͳ¡£¿´ÏÂÃæµÄÀý×Ó£º
ÎÒÃǼÙÉèÄúͨ¹ýFTPµÃµ½Linux³ÌÐòDoom£¬ ²¢°ÑËü·ÅÔÚÄúÄÜ·ÃÎʵÄLinuxϵͳÉÏ¡£È»ºóÄú¿ÉÒÔͨ¹ýldd linuxdoomÀ´¼ì²éÐèÒªÄÄЩ¹²Ïí¿â£¬ ¾ÍÏñÕâÑù£º
% ldd linuxdoom libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
ÄúÐèÒªµÃµ½ÉÏÃæÊä³öµÄÓÒÁеÄËùÓÐÎļþ£¬²¢°ÑËüÃǸ´ÖƵ½ /compat/linux£¬ µÚÒ»ÁеÄÃû×ÖÓ÷ûºÅÁ¬½ÓÖ¸ÏòËüÃÇ¡£ÕâÑùÄúµÄFreeBSDϵͳÉϾÍÓÐÁËÕâЩÎļþ£º
/compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
×¢Òâ: Èç¹ûÄúÒѾÓÐÁËÒ»¸öÓëldd Êä³öµÄµÚÒ»ÁеÄÖ÷ÐÞ¶©ºÅÏàÆ¥ÅäµÄLinux¹²Ïí¿â£¬ Äú¾ÍÒѾÍê³ÉÁ˹¤×÷£¬ ¶ø²»ÐèÒª°ÑÓÒÁÐÃüÃûµÄÎļþ¸´ÖƵ½ÄúµÄϵͳÉÏÁË¡£ Èç¹ûÓÐÒ»¸öеİ汾£¬ ÄÇÎÞÂÛÈçºÎ¶¼Òª¸´ÖÆÒ»¸ö¹²Ïí¿â¡£ Äú¿ÉÒÔɾµô¾ÉµÄ£¬ ÄúÖ»Òª×öÒ»¸ö·ûºÅÁ¬½Óµ½Ðµİ汾¡£ ËùÒÔ£¬Èç¹ûÓÐÕâЩ¿âÔÚÄúµÄϵͳÉÏ£º
/compat/linux/lib/libc.so.4.6.27 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27Èç¹ûÄú¸ù¾ÝlddÊä³öµÄ·¢ÏÖÐèÒªÒ»¸ö¸üа汾µÄ¿â£º
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29Èç¹û½áβµÄÊý×ÖÖ»ÓÐÒ»µ½Á½¸ö°æ±¾¹ýÆÚ£¬ÄÇÒ²²»Òªµ£Ðĸ´ÖÆ /lib/libc.so.4.6.29£¬ ÒòΪ³ÌÐòÔÚÉÔ΢¾ÉһЩµÄ°æ±¾ÉÏÒ²Äܺܺõع¤×÷¡£ È»¶ø£¬Èç¹ûϲ»¶µÄ»°£¬Äú¿ÉÒÔÌæ»»libc.so£¬±ä³ÉÕâÑù£º
/compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
×¢Òâ: ·ûºÅÁ´½Ó»úÖÆ ½ö½öÊÇ Linux ³ÌÐòÐèÒªµÄ¡£ FreeBSD µÄÔËÐÐʱÁ¬½ÓÆ÷»á×Ô¼ºÑ°ÕÒÆ¥ÅäµÄÖ÷ÐÞ¶©ºÅ£¬Äú²»ÐèҪΪ´Ëµ£ÐÄ¡£
¡¡¡¡ELF¸ñʽµÄ³ÌÐòÐèÒªÒ»²½¶îÍâµÄ²½Öè¡°±ê¼Ç¡±¡£Èç¹ûÄú³¢ÊÔÔËÐÐûÓбê¼ÇµÄELF³ÌÐò£¬ Äú»áµÃµ½ÏñÏÂÃæÕâÑùµÄ´íÎóÐÅÏ¢£º
% ./my-linux-elf-binary ELF binary type not known Abort
¡¡¡¡Îª°ïÖú FreeBSD Äں˷ֱæ FreeBSD ELF Ö´ÐÐÎļþºÍ Linux Ö´ÐÐÎļþ£¬ ÐèҪʹÓà brandelf(1) ¹¤¾ß¡£
% brandelf -t Linux my-linux-elf-binary
¡¡¡¡GNU¹¤¾ßÏÖÔÚ»á×Ô¶¯°ÑÊʵ±µÄ±ê¼ÇÐÅÏ¢·Åµ½ELF³ÌÐòÖУ¬ÄúÒÔºóÓöµ½Õâ¸öÎÊÌâµÄ»ú»áÔ½À´Ô½ÉÙ¡£
¡¡¡¡FreeBSD ʹÓÃ×Ô¼ºµÄ°üÊý¾Ý¿âÀ´¸ú×ÙËùÓÐµÄ ports (°üÀ¨ Linux® ports)¡£ ËùÒÔÎÞ·¨Ê¹ÓÃ(²»Ö§³Ö) Linux RPM Êý¾Ý¿â¡£
¡¡¡¡Èç¹ûÄãÐèÒª°²×°ÈÎÒâµÄÒ»¸ö»ùÓÚ RPM µÄ Linux Ó¦ÓóÌÐò£¬ ¿ÉÒÔͨ¹ýһϵIJ½ÖèÍê³É£º
# cd /compat/linux # rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id
¡¡¡¡È»ºó¶ÔÒѰ²×°µÄ ELF ¶þ½øÖƳÌÐò(²»°üÀ¨¿â)ÔËÐÐ brandelf¡£ ÓôËÖÖ·½·¨°²×°µÄ³ÌÐò²»Äܱ»ÍêÈ«Ð¶ÔØ£¬ µ«ÊÇ¿ÉÄÜÓÐÖúÓÚ×öЩ²âÊÔ¡£
¡¡¡¡Èç¹ûDNS²»ÄÜÕý³£¹¤×÷»òÊÇÄúµÃµ½ÏÂÁÐÐÅÏ¢£º
resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword
¡¡¡¡Äú¾ÍÐèÒªÅäÖÃ/compat/linux/etc/host.confÎļþ£¬´ËÎļþ°üº¬£º
order hosts, bind multi on
¡¡¡¡orderÕâÒ»ÐÐÖ¸³ö/etc/hostsÏȱ»ËÑË÷ÔÙ½Ó×ÅËÑË÷DNS¡£ Èç¹û/compat/linux/etc/host.confûÓб»°²×°£¬Linux³ÌÐò»á¶ÁÈ¡FreeBSDµÄ /etc/host.confÈ»ºóÌáʾ²»¼æÈݵÄFreeBSDÓï·¨¡£ Èç¹ûÄúûÓÐʹÓÃ/etc/resolv.conf ÎļþÉèÖÃDNS£¬Ó¦¸Ãɾ³ýbind¡£
±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.