%
% This document is released under the GPL
% Initially written by Stefan Reinauer, <stepan@coresystems.de>
%

\documentclass[titlepage,12pt]{article}
\usepackage{a4}
\usepackage{graphicx}
\usepackage{epsfig}
\usepackage{epstopdf}
\usepackage{url}
\usepackage{color}
% \usepackage{geometry}
\usepackage[pdftex]{hyperref}
% \usepackage{makeidx}
% \makeindex
% \geometry{left=2cm,right=2cm,top=2cm,bottom=2cm}

\hypersetup{
    urlbordercolor={1 1 1},
    menubordercolor={1 1 1},
    linkbordercolor={1 1 1},
    colorlinks=false,
    % pdfpagemode=None,  % PDF-Viewer starts without TOC
    % pdfstartview=FitH,
    pdftitle={coreboot Porting Guide},
    pdfauthor={Zheng Bao},
    pdfsubject={coreboot configuration and build process},
    pdfkeywords={coreboot, AMD, configuration, Build}
}

\setlength{\parindent}{0pt}
\setlength{\hoffset}{0pt}

\title{coreboot from Scratch}
\author{Stefan Reinauer $<$stepan@coresystems.de$>$\and Zheng Bao $<$zheng.bao@amd.com$>$}
\date{Dec 4th, 2013}

\begin{document}

\maketitle

\thispagestyle{empty}

\tableofcontents

\newpage

\section{What is coreboot}
coreboot aims to replace the normal BIOS found on x86, AMD64, PPC,
Alpha, and other machines with a Linux kernel that can boot Linux from a cold
start. The startup code of an average coreboot port is about 500 lines of
assembly and 5000 lines of C. It executes 16 instructions to get into 32bit
protected mode and then performs DRAM and other hardware initializations
required before Linux can take over.

The projects primary motivation initially was maintenance of large
clusters. Not surprisingly interest and contributions have come from
people with varying backgrounds.  Nowadays a large and growing number of
Systems can be booted with coreboot, including embedded systems,
Desktop PCs and Servers.

This document is used to build, modify, and port the coreboot code
base on the AMD platform.


\section{Changes}

 \begin{itemize}
 \item 2013/12/20 Add Git, Gerrit, toolchains building.
 \item 2009/04/19 replace LinuxBIOS with coreboot
 \item 2004/06/02 url and language fixes from Ken Fuchs $<$kfuchs@winternet.com$>$
 \item 2004/02/10 ACPI and option ROM updates
 \item 2003/11/18 initial release
 \end{itemize}

%
% Build Requirements
%

\section{Build Requirements}
To build coreboot for AMD64 from the sources you need a recent Linux.
SUSE Linux 11.2, CentOS release 6.3, Fedora Core 16, Cygwin, FreeBSD,
NetBSD are known to work fine.

To build the toolchain, you need following host compilers:

 \begin{itemize}
 \item GNUtar
 \item GNUpatch
 \item GNUmake
 \item GCC
 \item binutils
 \item bison
 \item flex
 \item m4
 \item wget
 \end{itemize}

Besides the tools above, after the toolchains are built, you also need the following
tools to build the source.

 \begin{itemize}
 \item git: Get the source code from repository
 \item libncurses-dev (or ncursesw, ncurses, curses, pdcursesw, pdcurses): for menuconfig
 \item python: Optional for gdb.
 \item perl: Optional for gdb.
 \end{itemize}

%
% Getting coreboot
%

\section{Getting coreboot}
The latest coreboot sources are available via GIT.
For users who doesn't need to change and commit the code:
{ \small
\begin{verbatim}
$ git clone https://review.coreboot.org/coreboot
\end{verbatim}
}
For developers, you need to get a gerrit account which you can register
at \url{https://review.coreboot.org}. Please refer section ~\ref{sec:gerrit}
{ \small
\begin{verbatim}
$ git clone ssh://<username>@review.coreboot.org:29418/coreboot
$ git clone https://[<username>:<password>@]review.coreboot.org/coreboot.git
\end{verbatim}
}

Checks out a sub-repository in the 3rdparty directory.
{ \small
\begin{verbatim}
$ git submodule update --init --checkout
\end{verbatim}
}

%
% Building the toolchain
%

\section{Building the toolchain}
coreboot recommends and guarantees the toolchain integrated with coreboot.
Linux distributions usually modify their compilers in ways incompatible with coreboot.

{ \small
\begin{verbatim}
$ cd coreboot
$ make crossgcc
\end{verbatim}
}

or

{ \small
\begin{verbatim}
$ cd util/crossgcc
$ buildgcc
\end{verbatim}
}

The buildgcc will try to get packages from website. You need to make sure you can
get access the internet. Or you can get the source.tar.gz and put it in util/crossgcc/tarballs.

{ \small
\textcolor{blue} {Welcome to the} \textcolor{red} {coreboot} \textcolor{blue} {cross toolchain builder v1.23 (September 20th, 2013)}

Target arch is now i386-elf

Will skip GDB ... ok

Downloading tar balls ...

 * gmp-5.1.2.tar.bz2 (cached)

 * mpfr-3.1.2.tar.bz2 (cached)

 * mpc-1.0.1.tar.gz (cached)

 * libelf-0.8.13.tar.gz (cached)

 * gcc-4.7.3.tar.bz2 (cached)

 * binutils-2.23.2.tar.bz2 (cached)

 * acpica-unix-20130626.tar.gz (cached)

Downloaded tar balls ... \textcolor {green}{ok}

Unpacking and patching ...

 * gmp-5.1.2.tar.bz2

 * mpfr-3.1.2.tar.bz2

 * mpc-1.0.1.tar.gz

 * libelf-0.8.13.tar.gz

 * gcc-4.7.3.tar.bz2

 * binutils-2.23.2.tar.bz2

   o binutils-2.23.2\_arv7a.patch

   o binutils-2.23.2\_no-bfd-doc.patch

 * acpica-unix-20130626.tar.gz

Unpacked and patched ... \textcolor {green}{ok}

Building GMP 5.1.2 ... \textcolor {green}{ok}

Building MPFR 3.1.2 ... \textcolor {green}{ok}

Building MPC 1.0.1 ... \textcolor {green}{ok}

Building libelf 0.8.13 ... \textcolor {green}{ok}

Building binutils 2.23.2 ... \textcolor {green}{ok}

Building GCC 4.7.3 ...  ok

Skipping Expat (Python scripting not enabled)

Skipping Python (Python scripting not enabled)

Skipping GDB (GDB support not enabled)

Building IASL 20130626 ... \textcolor {green}{ok}

Cleaning up... \textcolor {green}{ok}

\textcolor {green}{You can now run your i386-elf cross toolchain from /home/baozheng/x86/coreboot-gerrit/util/crossgcc/xgcc.}
}
If you are lucky, you can get toolchains located in util/crossgcc/xgcc.

%
% Build coreboot
%

\section{Building coreboot}
\subsection{Build main module of coreboot}
{ \small
\begin{verbatim}
$ cd coreboot
$ make menuconfig
.config - coreboot v4.0-4895-gc5025a4-dirty Configuration
+------------------------ coreboot Configuration -------------------------+
|  Arrow keys navigate the menu.  <Enter> selects submenus --->.          |
|  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, |
|  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> |
|  for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < >       |
| +---------------------------------------------------------------------+ |
| |        General setup  --->                                          | |
| |        Mainboard  --->                                              | |
| |        Architecture (x86)  --->                                     | |
| |        Chipset  --->                                                | |
| |        Devices  --->                                                | |
| |        VGA BIOS  --->                                               | |
| |        Display  --->                                                | |
| |        PXE ROM  --->                                                | |
| |        Generic Drivers  --->                                        | |
| |        Console  --->                                                | |
| |    [ ] Relocatable Modules                                          | |
| |        System tables  --->                                          | |
| |        Payload  --->                                                | |
| |        Debugging  --->                                              | |
| |    ---                                                              | |
| +----v(+)-------------------------------------------------------------+ |
+-------------------------------------------------------------------------+
|                    <Select>    < Exit >    < Help >                     |
+-------------------------------------------------------------------------
\end{verbatim}
}
Select Mainboard -$>$ Mainboard Vendor -$>$ AMD
                 -$>$ Mainboard Model  -$>$ Olive Hill

Then save, exit and run make.

{ \small
\begin{verbatim}
$ make
\end{verbatim}
}
The built image, coreboot.rom, is located at folder build.

\section{Programming coreboot to flash memory}
The image resulting from a coreboot build can be directly programmed to
a flash device, either using an external flash programmers, e.g., Dediprog SF100, or by using the
Linux flash utility, flashrom.


\subsection{Add modules and payload}

\subsubsection{VGA BIOS}
There is a big Chance that you need to get a VGA BIOS.
{ \small
\begin{verbatim}
.config - coreboot v4.0 Configuration
------------------------------------------------------------------------------
+-------------------------------- VGA BIOS --------------------------------+
|  Arrow keys navigate the menu.  <Enter> selects submenus --->.           |
|  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes,  |
|  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </>  |
|  for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < > module |
| +----------------------------------------------------------------------+ |
| |    [*] Add a VGA BIOS image                                          | |
| |    (vgabios.bin) VGA BIOS path and filename                          | |
| |    (1002,1306) VGA device PCI IDs                                    | |
| |                                                                      | |
| |                                                                      | |
| |                                                                      | |
| |                                                                      | |
| |                                                                      | |
| |                                                                      | |
| +----------------------------------------------------------------------+ |
+--------------------------------------------------------------------------+
|                     <Select>    < Exit >    < Help >                     |
+--------------------------------------------------------------------------+
\end{verbatim}
}
Select VGA BIOS. ``The VGA device PCI IDs'' should be the same as your device. Get the
Option ROM from Vendor's website.

\subsubsection{Payload}
coreboot in itself is "only" minimal code for initializing a mainboard
with peripherals. After the initialization, it jumps to a payload.

Currently, SeaBIOS is the most widely used payload. The best way to integrate SeaBIOS
is setting it in menuconfig.
{ \small
\begin{verbatim}
+------------------------------- Payload ---------------------------------+
|  Arrow keys navigate the menu.  <Enter> selects submenus --->.           |
|  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes,  |
|  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </>  |
|  for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < > module |
| +----------------------------------------------------------------------+ |
| |        Add a payload (SeaBIOS)  --->                                 | |
| |        SeaBIOS version (1.7.2.1)  --->                               | |
| |    [*] Use LZMA compression for payloads (NEW)                       | |
| |                                                                      | |
| |                                                                      | |
| |                                                                      | |
| |                                                                      | |
| |                                                                      | |
| |                                                                      | |
| +----------------------------------------------------------------------+ |
+--------------------------------------------------------------------------+
|                     <Select>    < Exit >    < Help >                     |
+--------------------------------------------------------------------------+
\end{verbatim}
The script in Makefile will automatically checkout, config, build the SeaBIOS source,
and integrat the binary into the final image.

%
% Working with Git
%

\section{Working with Git}
\subsection{Configuration of Git}
Inside the checkout you should install a commit-msg hook that adds a
Change-Id into commit messages, which uniquely identifies the logical
change in Gerrit even across multiple iterations of the commit. The
hook only needs to be installed once per clone, and installation can
be done with:
{ \small
\begin{verbatim}
$ cd coreboot
$ cp ./util/gitconfig/* .git/hooks
\end{verbatim}
}
configure your name and email in git.
{ \small
\begin{verbatim}
$ git config --global user.name "Your Name Comes Here"
$ git config --global user.email your.email@example.com'
\end{verbatim}
}
The name~\ref{user name} and email~\ref{Contact Information} should be the same the settings in gerrit.
Otherwise you can not push you code to community.

Then run the following command once, to tell git that by default you
want to submit all commits in the currently checked-out branch for
review on gerrit:
{ \small
\begin{verbatim}
$ git config remote.origin.push HEAD:refs/for/main
\end{verbatim}
}

The above configurations for git has been integrated into Makefile. You can run
{ \small
\begin{verbatim}
$ make gitconfig
\end{verbatim}
}

\subsection{Work flow}

It is recommended that you make a new branch when you start to work, not pushing changes to main.
{ \small
\begin{verbatim}
$ git checkout main -b mybranch
\end{verbatim}
}
After you have done your changes, run:
{ \small
\begin{verbatim}
$ git add file_need_to_submit.c
$ git commit -m "my first change."
\end{verbatim}
}

% Does anyone have a better word to describe the philosophy of splitting changes to patches?
You need to realize that the changes you have made should be well divided into
several commits. Each of them has one and only one meaning. You could use git rebase -i to
split, squash, remove, rewrite you comment.

Here is an example of a well-formatted commit message:

{ \small
\begin{verbatim}
examplecomponent: Refactor duplicated setup into a function

Setting up the demo device correctly requires the exact same register
values to be written into each of the PCI device functions. Moving the
writes into a function allows also otherexamplecomponent to use them.

Signed-off-by: Joe Hacker <joe@hacker.email>
\end{verbatim}
}

Then you can push the code.
{ \small
\begin{verbatim}
$ git push
\end{verbatim}
}

You can go to the ~\ref{sec:gerrit} gerrit to see if your changes is successfully pushed.

Often it might happen that the patch you sent for approval is not good
enough from the first attempt. Gerrit and git make it easy to track
patch evolution during the review process until patches meet our
quality standards and are ready for approval.

You can easily modify a patch sent to gerrit by you or even by someone
else. Just apply it locally using one of the possible ways to do it,
make a new local commit that fixes the issues reported by the
reviewers, then rebase the change by preserving the same Change-ID. We
recommend you to use the git rebase command in interactive mode,

Once your patch gets a +2 comment, your patch can be merged (cherry-pick, actually) to origin/main.

%
% Working with Gerrit
%

\section{Working with Gerrit}
\label{sec:gerrit}
If you are a coreboot user, not planning to contribute, you can skip this section.
\subsection{Get gerrit account}
You need to get an OpenID first. Currently Google account give you an OpenID. It means, if you have a gmail account, you have an OpenID. You can try to signed in.
click \url{https://review.coreboot.org}

%\includegraphics[width=6.00in,height=1.00in]{gerrit_signin.png}
{ \small
\begin{verbatim}
+-----------------------------------------------------------+
|All    Projects  Documentation           Register  Sign In |
|Open Merged   Abandoned                                    |
|Search for status:open                                     |
+-----------------------------------------------------------+
|Subject      Status   Owner  Project  Branch Updated CR V  |
|cpu: Rename..      Alexandru coreboot main   1:20 PM +1    |
|cpu: Only a..      Alexandru coreboot main   1:17 PM    X  |
|arch/x86: D..      Alexandru coreboot main   1:09 PM       |
|                                                           |
|                                                  Next ->  |
|Press '?' to view keyboard shortcuts | Powered by Gerrit   |
+-----------------------------------------------------------+
\end{verbatim}
}
Click ``Sign In'', You will get

%\includegraphics[width=6.00in,height=4.00in]{openid.png}

You will be redirected to Google to get logging in.

% \includegraphics[width=6.00in,height=1.50in]{login.png}
{ \small
\begin{verbatim}
Sign In to Gerrit Code Review at review.coreboot.org
+--------------------------------------------------+
+--------------------------------------------------+
[] Remember me
Sign In Cancel
Sign in with a Google Account
Sign in with a Yahoo! ID
What is OpenID?

OpenID provides secure single-sign-on, without revealing your passwords to this website.

There are many OpenID providers available. You may already be member of one!

Get OpenID
\end{verbatim}
}

\subsection{Configure account}
Click the dropdown button near the user name and click ``Settings''

% \includegraphics[width=6.00in,height=4.00in]{settings}
% \epsfig{figure=keystroke_left}
% \epstopdf {file=settings.eps}
% \epsfig{file=settings.eps}

\label{user name} In ``profile'' section, type the user name for git. This probably can be changed only once.
{ \small
\begin{verbatim}
Profile               Username      zbao
Preferences           Full Name     Zheng Bao
Watched Projects      Email Address zheng.bao@amd.com
Contact Information   Registered    Jun 28, 2011 4:33 PM
SSH Public Keys       Account ID    1000034
HTTP Password
Identities
Groups
\end{verbatim}
}

\label{Contact Information} In ``Contact Information'', enter you full name and your Email, which should be configured in your .gitconfig
{ \small
\begin{verbatim}
      Full Name  __________________________________
Preferred Email  ______________   Registered Email

Save Changes
\end{verbatim}
}

In ``SSH Public Keys'' section, upload your public key.
{ \small
\begin{verbatim}
Status  Algorithm   Key Comment

Delete
Add SSH Public Key
 > How to Generate an SSH Key
+--------------------------+
|                          |
|                          |
|                          |
|                          |
|                          |
|                          |
|                          |
|                          |
|                          |
+--------------------------+
clear       Add  Close
\end{verbatim}
}

Click ``Add Key ...''
Go back to you linux command line and type:
{ \small
\begin{verbatim}
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhengbao/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zhengbao/.ssh/id_rsa.
Your public key has been saved in /home/zhengbao/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx zhengb@host.domain
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
+-----------------+
\end{verbatim}
}
The data in ~/.ssh/id\_rsa.pub is your public key. Copy them to the box in the page of ``SSH Public Keys'' and click add.

In ``HTTP Password'' section, click button ``Generate Password''. You will get the password for http checkout.
{ \small
\begin{verbatim}
Username    XXX
Password    XXXXXXXXXXXX

Generate Password   Clear Password

\end{verbatim}
}

\subsection{Reviewing Changes}
For each listed changes in Gerrit, you can review, comment, evaluate,
cherry-pick, and even re-submit them. For you own patches, only you can
abandon them. Click in the file and commit message, you can add in-line comment.

%
% 14 Glossary
%

\section{Glossary}
\begin{itemize}
\item payload

coreboot only cares about low level machine initialization, but also has
very simple mechanisms to boot a file either from FLASHROM or IDE. That
file, possibly a Linux Kernel, a boot loader or Etherboot, are called
payload, since it is the first software executed that does not cope with
pure initialization.

\item flash device

Flash devices are commonly used in all different computers since unlike
ROMs they can be electronically erased and reprogrammed.

\item Gerrit

Gerrit is a web based code review system, facilitating online code
reviews for projects using the Git version control system.

Gerrit makes reviews easier by showing changes in a side-by-side
display, and allowing inline comments to be added by any reviewer.

Gerrit simplifies Git based project maintainership by permitting any
authorized user to submit changes to the upstream Git repository, rather
than requiring all approved changes to be merged in by hand by the
project maintainer. This functionality enables a more centralized
usage of Git.

\end{itemize}

\newpage

%
% 14 Bibliography
%

\section{Bibliography}
\subsection{Additional Papers on coreboot}

\begin{itemize}
 \item
 \textit{\url{https://www.coreboot.org/Documentation}}
\end{itemize}

\subsection {Links}

\begin{itemize}
 \item Etherboot: \textit{\url{http://www.etherboot.org/}}
 \item OpenBIOS: \textit{\url{http://www.openbios.org/}}
 \item Flashrom: \textit{\url{http://www.flashrom.org/}}
 \item Seabios: \textit{\url{http://www.seabios.org/}}
\end{itemize}


\end{document}
