1 \section{Supported x86 hardware%
2 \label{supported-hardware}%
5 Barrelfish currently runs on:
7 \item x86 CPUs in either IA-32 or AMD64 mode. The following systems
11 \item Intel Xeon Clovertown, Gainestown, Beckton (X5355, E5520, X7560, L5520,
14 \item AMD Opteron Santa Rosa, Barcelona, Shanghai, Istanbul, Magny Cours
15 (2220, 8350, 8374, 8380, 8431, 6174)
19 \item Intel Single-Chip Cloud Computer (SCC), both Copper Ridge and Rocky Lake
26 The biggest compatibility problems are likely to be in the PCI/ACPI code. We
27 usually discover new quirks (or missing functionality in the ACPI glue code)
28 on each new machine we test. The following systems are known to work:
36 \item Tyan n6650W and S4985
38 \item Supermicro H8QM3-2
40 \item Dell PowerEdge R610 and R905
42 \item Sun Fire X2270 and X4440
44 \item Intel/Quanta QSSC-S4R
46 \item Lenovo X200 and X301 laptops
48 \item ASUS Eee PC 1015PEM netbooks
54 In addition, a port to the ARM architectures is in progress. This is
55 less complete than the x86 and SCC ports, and not described in this
56 document, but feel free to ask for help on the mailing list.
58 The e1000n driver should work with most recent Intel gigabit ethernet
59 controllers (see the list in devices/e1000.dev). We've mostly used the
60 82572EI (PCI device ID 0x1082).
62 You should also be able to boot Barrelfish on a recent version of QEMU (0.14);
63 note that the e1000 device emulated by QEMU is not supported by our driver.
66 \section{REQUIRED TOOLS%
67 \label{required-tools}%
70 The following are required to build Barrelfish and its tools:
80 \item 4.4.5, and 4.5.2 are known to work
82 \item cross-compiling between i386 and x86\_64 works (requires libc6-dev-i386
83 to build 32 bit on 64 bit machine)
85 \item for the ARM port, we recommend the EABI tools available from \href{http://www.codesourcery.com/sgpp/lite/arm}{CodeSourcery}.
89 \item GNU binutils (2.19 is known to work)
93 \item GHC v7.4 and Parsec 3.1
94 - older versions of the tree supported v6.10 or v6.12.2 with Parsec 2.1
95 - GHC v6.12.1 has a known bug and is unable to build our tools
96 - earlier versions of GHC are unsupported
102 Our build system may not be very portable; if in doubt, try building on a
103 recent Debian or Ubuntu system, as these are what we use.
109 \newcounter{listcnt0}
110 \begin{list}{\arabic{listcnt0}.}
112 \usecounter{listcnt0}
113 \setlength{\rightmargin}{\leftmargin}
116 \item Assuming you have already unpacked the sources, create a build directory
118 \begin{quote}{\ttfamily \raggedright \noindent
119 \$~mkdir~build~\&\&~cd~build
124 1. Run \texttt{hake.sh}, giving it the path to the source directory and target
127 \begin{quote}{\ttfamily \raggedright \noindent
128 \$~../hake/hake.sh~..~x86\_64
132 This will configure the build directory and use GHC to compile and then run
133 hake, a tool used to generate the \texttt{Makefile}.
135 3. Optionally, edit the configuration parameters in \texttt{hake/Config.hs} and
136 run \texttt{make rehake} to apply them.
137 \setcounter{listcnt0}{0}
138 \begin{list}{\arabic{listcnt0}.}
140 \usecounter{listcnt0}
141 \addtocounter{listcnt0}{3}
142 \setlength{\rightmargin}{\leftmargin}
145 \item Run make, and wait
147 \begin{quote}{\ttfamily \raggedright \noindent
152 \item If everything worked, you should now be able to run Barrelfish inside QEMU
154 \begin{quote}{\ttfamily \raggedright \noindent
155 \$~make~sim~ARCH=x86\_64
161 \section{INSTALLING AND BOOTING%
162 \label{installing-and-booting}%
165 Barrelfish requires a Multiboot-compliant bootloader that is capable of loading
166 an ELF64 image. At the time of writing, this doesn't include the default GRUB.
167 Your options are either:
173 \item use the pre-loader ``elver'' that can be found in the tools directory
175 \item patch GRUB to support a 64-bit kernel image, using this \href{http://savannah.gnu.org/bugs/?17963}{patch}.
181 ``Installing'' Barrelfish currently consists of copying the ELF files for the CPU
182 driver and user programs to a location that the target machine can boot from,
183 and writing a suitable menu.lst file that instructs the bootloader (GRUB) which
184 programs to load and the arguments to pass them.
186 If you specify an appropriate INSTALL\_PREFIX, \texttt{make install} will copy the
187 binaries to the right place for you, eg
189 \begin{quote}{\ttfamily \raggedright \noindent
190 \$~make~install~INSTALL\_PREFIX=/tftpboot/barrelfish
194 We usually boot Barrelfish via PXE/TFTP, although loading from a local disk
195 also works. Instructions for setting up GRUB to do this are beyond the scope of
196 this document. Assuming you have such a setup, here is a sample menu.lst file
197 for a basic diskless boot that doesn't do anything useful beyond probing the
198 PCI buses and starting a basic shell
200 \begin{quote}{\ttfamily \raggedright \noindent
203 kernel~/barrelfish/x86\_64/sbin/elver\\
204 module~/barrelfish/x86\_64/sbin/cpu\\
205 module~/barrelfish/x86\_64/sbin/init\\
206 module~/barrelfish/x86\_64/sbin/mem\_serv\\
207 module~/barrelfish/x86\_64/sbin/monitor\\
208 module~/barrelfish/x86\_64/sbin/ramfsd~boot\\
209 module~/barrelfish/x86\_64/sbin/skb~boot\\
210 modulenounzip~/barrelfish/skb\_ramfs.cpio.gz~nospawn\\
211 module~/barrelfish/x86\_64/sbin/acpi~boot\\
212 module~/barrelfish/x86\_64/sbin/pci~boot\\
213 module~/barrelfish/x86\_64/sbin/spawnd~boot\\
214 module~/barrelfish/x86\_64/sbin/serial\\
215 module~/barrelfish/x86\_64/sbin/fish
219 There are many other programs you can load (take a look around the usr tree for
220 examples). To start a program on a core other than the BSP core, pass
221 \texttt{core=N} as its first argument.
223 If things work, you should see output on both the VGA console and COM1.