Sean Hincheeinitial push75d07b48 years agoHistory
155 lines · 4.9 KB · Text
RawDownload
Linux emulationD1335047570Asl#Linuxemu is a program that can execute Linux/i386 ELF binaries on#Plan9. It was started by Russ Cox and development was continued by#cinap_lenrek. Please contact cinap_lenrek AT gmx DOT de with bug#reports or improvements.##SOURCE##[/n/sources/contrib/cinap_lenrek/linuxemu3.tgz |#http://plan9.bell-labs.com/sources/contrib/cinap_lenrek/linuxemu3.tgz]##[http://9hal.ath.cx/usr/cinap_lenrek/linuxemu3.tgz |#http://9hal.ath.cx/usr/cinap_lenrek/linuxemu3.tgz]##DOCUMENTATION##Documentation is provided in the doc directory:##! 	doc/linuxemu.txt#! 	doc/todo.txt##INSTALLATION##! 	tar xzf linuxemu3.tgz#! 	cd linuxemu3#! 	mk#! 	mk install##BOOTSTRAP##You need a Linux rootfilesystem packed in a tarball. Go! Get some#Linux rootfs:##[http://9hal.ath.cx/usr/cinap_lenrek/mroot-linuxemu.tbz |#http://9hal.ath.cx/usr/cinap_lenrek/mroot-linuxemu.tbz]##[http://plan9.stanleylieber.com/linuxemu/mroot.tgz |#http://plan9.stanleylieber.com/linuxemu/mroot.tgz]##The -linuxemu version contains no symlinks and can be extracted with#plain plan9 tools bunzip/tar.##The mroot.tgz version contains the same Debian Sarge base as#-linuxemu, but with several additional packages pre-installed:##! 	9base#! 	dmenu-4.1.1#! 	dwm-5.8.2#! 	gcc 3.3.5#! 	linux-kernel-headers#! 	mercurial 0.9.4#! 	opera 10.11#! 	python 2.3.5#! 	xlib-dev##and more. View its [setup |#http://plan9.stanleylieber.com/linuxemu/setup] file for more details.##You can create your own with debootstrap on Debian Linux, or help#write an installer that unpacks and installs Slackware on Plan 9...#In any case, linuxemu is not hardwired to any Linux distribution!##RUNNING##Use the provided "linux" script to chroot into your Linux rootfs.#The "linux" script is neccesary because for Linux programs to run,#shared libraries from your rootfs have to appear at /lib and#/usr/lib, while configuration files are expected to be in /etc. The#script will build a private namespace and bind the Linux rootfs over#the Plan 9 root. the original Plan 9 namespace is mounted at /9.##! 	linux -r ./mroot /bin/bash -i##If the -r option is omitted, the Linux rootfs defaults to#/sys/lib/linux. you may put your Linux rootfs there or add a bind to#your $home/lib/profile.##In the Linux rootfs, /etc/resolv.conf should be changed to match#your network nameserver. In addition, /etc/apt/sources.list should#be updated to a working Debian mirror. (Sarge packages can still be#accessed at deb http://archive.debian.org/debian-archive/debian#sarge main)##EXAMPLES##Linux X11 programs may be used in conjunction with the Plan 9 [equis#| http://www.plan9.bell-labs.com/wiki/plan9/X11_installation] X11#contrib package. For example, to run the Opera web browser under#your Linux rootfs, start equis in a rio window, chroot into your#LInux rootfs and:##! 	dwm &#! 	opera &##Opera should (eventually) appear in the equis window. A window#manager (this example uses dwm) is recommended so that X11 programs#work properly.##DEBUGGING##If linuxemu crashes, use acid to figure out whats going on:##! 	mk acid#! 	acid -l linuxemu.acid <pid>##Then you can issue the following commands:##! 	ustk()				dump a (userspace) stacktrace for the current thread#! 	umem(Current())			dump the memory mappings#! 	ufds(Current())			dump the filedescriptor table#! 	utrace(Current())		dump the internal tracebuffer (enabled by -d option)##Use xasm()/xcasm() for disassembly for Linux code.##You can also enable full trace logging:##! 	linux -r ./mroot -dd /bin/bash -i >[2]/tmp/linuxemu.log##This slows linuxemu down. In case of race conditions, it often#happens that the bug disapears when doing full trace logging!##NPTL##If you get one of these errors:##! 	cannot set up thread-local storage: cannot set up LDT for thread-local storage##This is glibc/libpthread complaining! The problem is the following:#glibc on i386 decided at some point to use the extra segment#registers GS and FS as an indirection pointer for thread local#storage. The operating system kernel therfore must have a mechanism#to let userspace change descriptor table entries and swap them#in/out on context switch.##To make it work here are several options:##1) Recompile and link the program with a pre NPTL version of glibc.##2) On some distributions, a non-tls version of libc/libpthread is#available. in the -linuxemu fsroot, the NPTL version is in /lib/tls,#the older version is in /lib. By renaming /lib/tls to#/lib/_tls_disabled_ the loader will use the non-tls version.##3) Cinap made a kernel patch that adds support for per process#descriptors to Plan 9:##[http://plan9.bell-labs.com/sources/contrib/cinap_lenrek/segdescpatch | /n/sources/contrib/cinap_lenrek/segdescpatch]##[http://9hal.ath.cx/usr/cinap_lenrek/segdescpatch.tgz |#http://9hal.ath.cx/usr/cinap_lenrek/segdescpatch.tgz]##The above patch adds the files gdt and ldt to devarch (#P).#