10.2 °²×°

¡¡¡¡Ä¬ÈÏÇé¿öÏ£¬ ²¢²»¿ªÆô 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 ÕÂÖØÐ±àÒëÄںˡ£

10.2.1 °²×°LinuxÔËÐÐʱ¿â

¡¡¡¡ÓÐÁ½ÖÖ·½·¨À´°²×°LinuxÔËÐÐʱ¿â£¬ÒªÃ´Ê¹ÓÃlinux_base port£¬ ҪôÊÖ¶¯°²×°¡£

10.2.1.1 ͨ¹ýʹÓà 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Ó¦ÓóÌÐòÐèÒªµÄÄǸö°æ±¾À´°²×°¡£

10.2.1.2 ÊÖ¶¯°²×°

¡¡¡¡Èç¹ûÄúûÓа²×° 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 ¶þ½øÖƳÌÐò¡£

10.2.1.3 ÈçºÎ°²×°¶îÍâµÄ¹²Ïí¿â

¡¡¡¡Èç¹ûÄú°²×°ÁË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 µÄÔËÐÐʱÁ¬½ÓÆ÷»á×Ô¼ºÑ°ÕÒÆ¥ÅäµÄÖ÷ÐÞ¶©ºÅ£¬Äú²»ÐèҪΪ´Ëµ£ÐÄ¡£

10.2.2 °²×°Linux ELF³ÌÐò

¡¡¡¡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³ÌÐòÖУ¬ÄúÒÔºóÓöµ½Õâ¸öÎÊÌâµÄ»ú»áÔ½À´Ô½ÉÙ¡£

10.2.3 °²×°¸÷ÖÖ»ùÓÚ RPM µÄÓ¦ÓóÌÐò

¡¡¡¡FreeBSD ʹÓÃ×Ô¼ºµÄ°üÊý¾Ý¿âÀ´¸ú×ÙËùÓÐµÄ ports (°üÀ¨ Linux® ports)¡£ ËùÒÔÎÞ·¨Ê¹ÓÃ(²»Ö§³Ö) Linux RPM Êý¾Ý¿â¡£

¡¡¡¡Èç¹ûÄãÐèÒª°²×°ÈÎÒâµÄÒ»¸ö»ùÓÚ RPM µÄ Linux Ó¦ÓóÌÐò£¬ ¿ÉÒÔͨ¹ýһϵIJ½ÖèÍê³É£º

# cd /compat/linux
# rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id

¡¡¡¡È»ºó¶ÔÒѰ²×°µÄ ELF ¶þ½øÖƳÌÐò(²»°üÀ¨¿â)ÔËÐÐ brandelf¡£ ÓôËÖÖ·½·¨°²×°µÄ³ÌÐò²»Äܱ»ÍêÈ«Ð¶ÔØ£¬ µ«ÊÇ¿ÉÄÜÓÐÖúÓÚ×öЩ²âÊÔ¡£

10.2.4 ÅäÖÃÖ÷»úÃû½âÎöÆ÷

¡¡¡¡Èç¹û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>.