[FE training-materials-updates] labs/buildroot-basic: update to Buildroot 2016.05
Thomas Petazzoni
thomas.petazzoni at free-electrons.com
Tue Jun 7 17:05:01 CEST 2016
Repository : git://git.free-electrons.com/training-materials.git
On branch : master
Link : http://git.free-electrons.com/training-materials/commit/?id=661e89dd69037b74a0ab661197a3664201c29d97
>---------------------------------------------------------------
commit 661e89dd69037b74a0ab661197a3664201c29d97
Author: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
Date: Tue Jun 7 14:40:41 2016 +0200
labs/buildroot-basic: update to Buildroot 2016.05
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
>---------------------------------------------------------------
661e89dd69037b74a0ab661197a3664201c29d97
labs/buildroot-basic/buildroot-basic.tex | 91 +++++++++++++++++---------------
1 file changed, 48 insertions(+), 43 deletions(-)
diff --git a/labs/buildroot-basic/buildroot-basic.tex b/labs/buildroot-basic/buildroot-basic.tex
index 71830b1..cc60639 100644
--- a/labs/buildroot-basic/buildroot-basic.tex
+++ b/labs/buildroot-basic/buildroot-basic.tex
@@ -42,18 +42,18 @@ git clone http://git.buildroot.net/git/buildroot.git
\end{verbatim}
In the worst case, if neither work, you can download the Buildroot
-tarball \code{buildroot-2015.08.1.tar.bz2} from
+tarball \code{buildroot-2016.5.tar.bz2} from
\code{http://buildroot.org/downloads/} and extract it. However in this
case, you won't be able to use {\em Git} to visualize your changes and
keep track of them.
Go into the newly created \code{buildroot} directory.
-We're going to start a branch from the {\em 2015.08.1} Buildroot
+We're going to start a branch from the {\em 2016.05} Buildroot
release, with which this training has been tested.
\begin{verbatim}
-git checkout -b felabs 2015.08.1
+git checkout -b felabs 2016.05
\end{verbatim}
\section{Configuring Buildroot}
@@ -93,7 +93,8 @@ Now, let's do the configuration:
\item On ARM two {\em Application Binary Interfaces} are available:
\code{EABI} and \code{EABIhf}. Unless you have backward
compatibility concerns with pre-built binaries, \code{EABIhf} is
- more efficient, so make this choice as the \code{Target ABI}.
+ more efficient, so make this choice as the \code{Target ABI}
+ (which should already be the default anyway).
\item The other parameters can be left to their default value:
\code{ELF} is the only available \code{Target Binary Format},
@@ -121,10 +122,12 @@ Now, let's do the configuration:
hesitate however to look at the available options when you select
\code{Buildroot toolchain} as the \code{Toolchain type}.
- \item Select \code{Linaro 2014.09} as the
+ \item Select \code{Linaro 2016.02} as the
\code{Toolchain}. Buildroot can either use pre-defined toolchains
such as the Linaro one, or custom toolchains (either downloaded
- from a given location, or pre-installed on your machine).
+ from a given location, or pre-installed on your machine). Note
+ that the Linaro toolchain version might be different if your
+ development machine is x86 32 bits and not x86 64 bits.
\end{itemize}
@@ -149,8 +152,8 @@ Now, let's do the configuration:
\item By default, the most recent Linux kernel version available at
the time of the Buildroot release is used. In our case, we want to
- use a specific version: \code{4.2}. So select \code{Custom
- version} as the \code{Kernel version}, and enter \code{4.2} in
+ use a specific version: \code{4.6}. So select \code{Custom
+ version} as the \code{Kernel version}, and enter \code{4.6} in
the \code{Kernel version} text field that appears.
\item Now, we need to define which kernel configuration to
@@ -158,7 +161,7 @@ Now, let's do the configuration:
the kernel sources themselves, called a {\em defconfig}. To
identify which {\em defconfig} to use, you can look in the kernel
sources directly, at
- \url{http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/configs/?id=v4.2}. In
+ \url{http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/configs/?id=v4.6}. In
practice, for this platform, it is not trivial to find which one
to use: the AM335x processor is supported in the Linux kernel as
part of the support for many other Texas Instruments processors:
@@ -171,17 +174,17 @@ Now, let's do the configuration:
\code{omap2plus} in the \code{Defconfig name} option.
\item The \code{Kernel binary format} is the next option. Since we
- are going to use a recent U-Boot bootloader, we'll select the
- \code{zImage} format. The \code{uImage} format used to be the norm
- on ARM platforms, but everybody is now transitioning to the
- \code{zImage} format.
+ are going to use a recent U-Boot bootloader, we'll keep the
+ default of the \code{zImage} format. The \code{uImage} format used
+ to be the norm on ARM platforms, but everybody is now
+ transitioning to the \code{zImage} format.
\item On ARM, most of the platforms now use the {\em Device Tree} to
describe the hardware. The BeagleBone Black is in this situation,
so you'll have to enable the \code{Build a Device Tree Blob}
option. At
- \url{http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/?id=v4.2},
- you can see the list of all Device Tree files available in the 4.2
+ \url{http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/?id=v4.6},
+ you can see the list of all Device Tree files available in the 4.6
Linux kernel (note: the Device Tree files for boards use the
\code{.dts} extension). The one for the BeagleBone Black is
\code{am335x-boneblack.dts}. Even if talking about Device Tree is
@@ -194,12 +197,12 @@ Now, let's do the configuration:
\end{itemize}
\item \code{Target packages} menu. This is probably the most important
- menu, as this is the one where you can select amongst the 1600+
+ menu, as this is the one where you can select amongst the 1800+
available Buildroot packages which ones should be built and
installed in your system. For our basic system, enabling
- \code{Busybox} is sufficient, but feel free to explore the available
- packages. We'll have the opportunity to enable some more packages in
- the next labs.
+ \code{Busybox} is sufficient and is already enabled by default, but
+ feel free to explore the available packages. We'll have the
+ opportunity to enable some more packages in the next labs.
\item \code{Filesystem images} menu. For now, keep only the \code{tar
the root filesystem} option enabled. We'll take care separately of
@@ -212,14 +215,21 @@ Now, let's do the configuration:
\item We'll use the most popular ARM bootloader, {\em U-Boot}, so
enable it in the configuration.
+ \item Select \code{Kconfig} as the \code{Build system}. U-Boot is
+ transitioning from a situation where all the hardware platforms
+ were described in C header files to a system where U-Boot re-uses
+ the Linux kernel configuration logic. Since we are going to use a
+ recent enough U-Boot version, we are going to use the latter,
+ called {\em Kconfig}.
+
+ \item You can keep using the default \code{2016.03} version as the
+ U-Boot version.
+
\item Look at
\url{http://git.denx.de/?p=u-boot.git;a=tree;f=configs} to
identify the available U-Boot configuration. The one matching the
BeagleBone Black is \code{am335x_boneblack_defconfig}, so type
- \code{am335x_boneblack} in \code{U-Boot board name}.
-
- \item Use \code{2015.04} as the U-Boot version, by using the
- \code{Custom version} option.
+ \code{am335x_boneblack} in \code{Board defconfig}.
\item U-Boot on AM335x is split in two parts: the first stage
bootloader called \code{MLO} and the second stage bootloader
@@ -247,16 +257,6 @@ make 2>&1 | tee build.log
While the build is on-going, please go through the following sections
to prepare what will be needed to test the build results.
-If you're running on a x86\_64 Linux installation, you will very
-quickly get a message {\em Cannot execute cross-compiler: ...}. This
-is because the pre-built toolchain selected in the configuration has
-been built for x86 32 bits, not x86 64 bits. In this case, we need to
-install the 32 bits libraries used by the toolchain:
-
-\begin{verbatim}
-apt-get install libc6:i386 libstdc++6:i386 zlib1g:i386
-\end{verbatim}
-
\section{Prepare the BeagleBone Black}
The BeagleBone Black is powered via the USB-A to mini-USB cable,
@@ -300,8 +300,8 @@ the \code{dialout} group:
sudo adduser $USER dialout
\end{verbatim}
-You now need to log out and log in again to make the new group visible
-everywhere.
+You now need to log out and log in again so that the system actually
+sees your user as being part of the {\em dialout} group.
Now, you can run \code{picocom -b 115200 /dev/ttyUSB0}, to start
serial communication on \code{/dev/ttyUSB0}, with a baudrate of
@@ -313,18 +313,18 @@ powered up yet.
\section{Prepare the SD card}
-Our SD card needs to be formatted in two partitions:
+Our SD card needs to be split in two partitions:
\begin{itemize}
-\item The first partition for the bootloader. It needs to comply with
+\item A first partition for the bootloader. It needs to comply with
the requirements of the AM335x so that it can find the bootloader in
this partition. It should be a FAT16 partition. We will store the
bootloader (\code{MLO} and \code{u-boot.img}), the kernel image
(\code{zImage}), the Device Tree (\code{am335x-boneblack.dtb}) and a
special U-Boot script for the boot.
-\item The second partition for the root filesystem. It can use
+\item A second partition for the root filesystem. It can use
whichever filesystem type you want, but for our system, we'll use
{\em ext4}.
@@ -364,11 +364,11 @@ To format our SD card, do the following steps:
\item Chose the {\em dos} partition table type
- \item Create a first small partition (16 MB or 32 MB) with type \code{e}
- ({\em W95 FAT16}) and mark it bootable
+ \item Create a first small partition (16 MB or 32 MB), primary, with
+ type \code{e} ({\em W95 FAT16}) and mark it bootable
- \item Create a second partition with the rest of the available space,
- with type \code{83} ({\em Linux}).
+ \item Create a second partition, also primary, with the rest of the
+ available space, with type \code{83} ({\em Linux}).
\item Exit \code{cfdisk}
@@ -422,6 +422,8 @@ uenvcmd=run loadimage;run loadramdisk;run findfdt;run loadfdt;run mmcloados
\end{itemize}
+Cleanly unmount the two SD card partitions, and eject the SD card.
+
\section{Boot the system}
Insert the SD card in the BeagleBone Black. Push the S2 button
@@ -433,7 +435,10 @@ You should see your system booting. Make sure that the U-Boot SPL and
U-Boot version and build dates match with the current date. Do the
same check for the Linux kernel.
-Login as \code{root} on the BeagleBone Black, and explore the system.
+Login as \code{root} on the BeagleBone Black, and explore the
+system. Run \code{ps} to see which processes are running, and look at
+what Buildroot has generated in \code{/bin}, \code{/lib}, \code{/usr}
+and \code{/etc}.
Note: if your system doesn't boot as expected, make sure to reset the
U-Boot environment by running the following U-Boot commands:
More information about the training-materials-updates
mailing list