Compiling Linux Kernel and Root Filesystem
How to (re)build the Linux kernel for the A10 GSRD.


Please note that the kernel executable and zImage is already delivered with the GSRD, and it is also part of the pre-built GSRD image. These instructions are useful when the kernel needs to be changed and recompiled.


The following are required:
  • Host PC running Linux (CentOS 6.6 was used for testing)
  • Access to Internet (in order to get the toolchain and the Linux kernel git trees)

Getting the Toolchain

The following commands are needed to download and extract the toolchain and set the CROSS_COMPILE variable accordingly:
$ cd ~
$ wget
$ tar xjf gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_linux.tar.bz2
$ export CROSS_COMPILE=~/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_linux/bin/arm-linux-gnueabihf-

Building the Linux Kernel

The following steps can be used to build the Linux kernel:

1. Clone the Linux kernel git trees from and get the right tag:
$ cd ~
$ git clone
$ cd linux-socfpga
$ git checkout -b test_branch rel_socfpga-3.10-ltsi_arria10_bringup_gsrd_ies

2. Compile the Linux kernel by using the following commands:
$ cd ~/linux-socfpga
$ export ARCH=arm
$ make socfpga_defconfig
$ make zImage

This will create the following files:
  • ~/linux-socfpga/arch/arm/boot/zImage - Compressed Linux Kernel
  • ~/linux-socfpga/vmlinux - Linux kernel ELF executable

Host Setup for Yocto

The Altera Linux Yocto recipes were tested to build correctly with Ubuntu 12.04 and CentOS 6.5 It may also work with other distributions. For a list of distributions against which Yocto project was tested see Altera Linux Yocto is officially built and tested using Ubuntu 12.04.

This section presents the packages that need to be installed on the host PC to allow the Yocto Recipes to be built. Since each machine may have been installed in a different way, the packages listed here are not an exhaustive list. Add packages as necessary if you encounter issues.

Ubuntu 12.04

These are the required packages that need to be installed:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install -y openjdk-7-jre tzdata-java libcups2 libjpeg8 icedtea-7-jre-jamvm openjdk-7-jre-headless openjdk-7-jdk git gawk wget g++ chrpath diffstat texinfo make 

If the host machine runs the 64bit version of the OS, then the following additional packages need to be installed:
$ sudo apt-get install ia32-libs

On Ubuntu 12.04 you will also need to make /bin/sh point to bash instead of dash. You can accomplish this by running:
sudo dpkg-reconfigure dash

and selecting "No". (Alternatively, you can run:
sudo ln -sf bash /bin/sh

however this is not recommended, as it may get undone by Ubuntu software updates.)

CentOS 6.5

These are the required packages that need to be installed:
$ sudo yum update
$ sudo yum groupinstall "Development Tools"
$ sudo yum install texi2html texinfo glibc-devel chrpath sqlite-devel

If the host machine runs the 64bit version of the OS, then the following additional packages need to be installed:
$ sudo yum install glibc.i686 libgcc.i686 libstdc++.i686 glibc-devel.i686 ncurses-libs.i686 zlib.i686 

On CentOS 6.5 newer version of Python, Git and Tar need to be downloaded, compiled, then added to the current search path. Note that the new packages will not be actually installed on the system, since that would break existing packages that depend on specific tool versions. Instead they will be added to the search path of the current console session.

These are the instructions for downloading and compiling the tools (only needs to be done once):
# python
cd ~
tar xf Python-2.7.8.tgz
cd Python-2.7.8
./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

# git
cd ~
tar xf git-1.7.8.tar.gz
cd git-1.7.8
./configure  --prefix=/usr/local

# tar
cd ~
tar xf tar-1.28.tar.gz
cd tar-1.28
./configure  --prefix=/usr/local

These are the instructions for adding the new tools to the search path. It needs to be done just before invoking the 'bitbake' commands:
export set PATH=~/Python-2.7.8:~/git-1.7.8:~/tar-1.28/src:$PATH

Build Linux Kernel and Rootfs Using Yocto Recipes

The Linux Kernel and Rootfs can be built using the Yocto Angstrom recipes that are provided as a Git tree.

Component Git address Tag
Yocto Angstrom Recipes angstrom-socfpga.git ACDS15.0.1_REL_GSRD_PR
This section presents how to clone the Yocto Project git tree and also how to build using it.

Note that only the Yocto Project build system and the recipes are cloned, all the dependencies are downloaded from Internet during the build process.

The commands for cloning the Yocto Project git trees and building Yocto Project are:
$ cd ~
$ git clone
$ cd angstrom-socfpga/
$ git checkout -b test_branch ACDS15.0.1_REL_GSRD_PR
$ MACHINE=arria10 ./ config arria10
$ export KERNEL_TAG=refs/tags/ACDS15.0.1_REL_GSRD_PR $ source ./environment-angstrom-v2014.12 $ export set PATH=~/Python-2.7.8:~/git-1.7.8:~/tar-1.28/src:$PATH ← only on CentOS 6.5 $ MACHINE=arria10 bitbake virtual/kernel gsrd-console-image

Note: replace test_branchwith the name of the branch you want to use locally.


The following line is required to fix a problem where the repository is pointing to a non-existant repository.
sed s:https\\\://\\\:// sources/layers.txt -i
The following line is required to fix a problem when can't connect the
change from :meta-openembedded,git://,dizzy,HEAD to :meta-openembedded,git://,dizzy,HEAD on sources/layers.txt 
change from :openembedded-core,git://,dizzy,HEAD to :openembedded-core,git://,dizzy,HEAD on sources/layers.txt 
change from :meta-altera,,angstrom-v2014.12-yocto1.7_a10,HEAD to :meta-altera,,angstrom-v2014.12-yocto1.7_gsrd15.0.1,1fbf402e996d5464648dfbcfe8a256dded83e377 on sources/layers.txt 
change from :meta-altera-refdes,,gsrd15.0.1,HEAD to :meta-altera-refdes,,gsrd-15.0.1,e076db12a0eb3e309efe75163648313131e55ce5 on sources/layers.txt 

Note: If your computer connects to the Internet using a proxy, you may need to use this command totell the Git utility about the proxy:
$ git config --global http.proxy <proxy_name>

Note: You may compile the standard Angstrom filesystem instead of the GSRD one, by replacing bitbake gsrd-console-image with bitbake console-image in the above commands.

The first time you build the Yocto Source Package it may take up to several hours depending on your host machine.

Once finished, all images should be generated in ~/angstrom-socfpga/deploy/glibc/images/arria10/. Some of the most important files created are:
File Description
vmlinux Kernel ELF file
zImage Compressed kernel image
Angstrom-gsrd-console-image-glibc-ipk-v2014.12-arria10.rootfs.cpio GSRD Root Filesystem in cpio archive format
Angstrom-gsrd-console-image-glibc-ipk-v2014.12-arria10.rootfs.ext3 GSRD Root Filesystem as ext3 image
Angstrom-gsrd-console-image-glibc-ipk-v2014.12-arria10.rootfs.tar.xz GSRD Root Filesystem in tar gzip archive format
Angstrom-console-image-glibc-ipk-v2014.12-arria10.rootfs.cpio Standard Angstrom Root Filesystem in cpio archive format
Angstrom-console-image-glibc-ipk-v2014.12-arria10.rootfs.ext3 Standard Angstrom Root Filesystem as ext3 image
Angstrom-console-image-glibc-ipk-v2014.12-arria10.rootfs.tar.xz Standard Angstrom Root Filesystem in tar gzip archive format
The above files are actually links to the actual build resulted files. Some build files have a timestamp attached to its name and each time it it rebuilt, Yocto updates the link to point to the latest file.

Give us your feedback

© 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors. Privacy.