TS-7680 kernel compile guide: Difference between revisions

From embeddedTS Manuals
No edit summary
(Updated kernel compile for 3.14)
Line 2: Line 2:


''' Prerequisites '''
''' Prerequisites '''
All systems:
Download and unpack the cross compiler
<source lang=bash>
wget ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7680-linux/cross-toolchains/imx28-cross-glibc.tar.bz2
tar xvf imx28-cross-glibc.tar.bz2 -C /path/to/folder/
</source>
/path/to/folder can be any directory so long as the current user has permissions to write to it.  Remember this path as its used later during the kernel build procedure.


RHEL/Fedora/CentOS:
RHEL/Fedora/CentOS:
Line 8: Line 18:
yum groupinstall "Development Tools" "Development Libraries"
yum groupinstall "Development Tools" "Development Libraries"
</source>
</source>
Ubuntu/Debian:
Ubuntu/Debian:
<source lang=bash>
<source lang=bash>
Line 20: Line 32:


<source lang=bash>
<source lang=bash>
git clone https://github.com/embeddedarm/linux-2.6.35.3-imx28.git
git clone https://github.com/embeddedarm/linux-3.14.28-imx28.git
cd linux-2.6.35.3-imx28/
cd linux-3.14.28-imx28/
 
# These next commands set up some necessary environment variables
export ARCH=arm
export CROSS_COMPILE=/path/to/folder/arm-fsl-linux-gnueabi/bin/arm-linux-
export LOADADDR=0x40008000


# This sets up the default configuration that we ship with
# This sets up the default configuration that we ship with
make ts7680_defconfig
make ts7680_defconfig
ln -sf initramfs.cpio-ts7680 initramfs.cpio
</source>
</source>


Line 41: Line 57:
make && make uImage && make modules
make && make uImage && make modules
</source>
</source>
We recommend running 'make' with the -jX argument, where X is the number of CPU cores+1 present on the build machine.  This will greatly increase build speed.


'''Build bootstream'''
'''Install the kernel/initramfs, headers, and modules '''
 
The i.MX28 utilizes what Freescale calls a "bootstream," this is a series of "bootlets" that are all put together in a binary blob.  The default bootstream sets up RAM, power, and contains the kernel to be run.  Every time a kernel is rebuilt, a new bootstream must be compiled containing the new kernel image. The TS-7680 does not utilize this format directly, however this command needs to be run for completeness to ensure the remaining scripts run properly.  The following script is used to take the newly built kernel and output a bootstream for the SD card:
<source lang=bash>
./build_bootstream
</source>
 
This will create imx-bootlets-src-10.12.01/imx28_ivt_linux.sb The .sb file is the standard image used for the SD card and NAND.
 
'''Building External Wireless Modules'''
 
In order to support the wide range of USB wifi modules that Technologic Systems has offered over the years, the compat-wireless project is used to build all compatible modules.  A simple command is used to build them:
<source lang=bash>
./build_wireless
</source>
 
'''Install the bootstream (kernel/initramfs) and Modules '''


Next you need to install the kernel and modules to the SD card.  We provide a simple script to copy the kernel file, kernel modules, headers, and compat-wireless modules to the SD card to update everything at once.
Next you need to install the kernel and modules to the SD card.  We provide a simple script to copy the kernel uImage file, kernel modules, and headers to the SD card to update everything at once.


For example, if your workstation's SD card is /dev/mmcblk0:
For example, if your workstation's SD card is /dev/mmcblk0:

Revision as of 16:05, 29 April 2015

For adding new support to the kernel, or recompiling with more specific options you will need to have an x86 compatible Linux host available that can handle the cross compiling. Compiling the kernel on the board is not supported or recommended. Before building the kernel you will need to install a few support libraries on your workstation:

Prerequisites

All systems:

Download and unpack the cross compiler

wget ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7680-linux/cross-toolchains/imx28-cross-glibc.tar.bz2
tar xvf imx28-cross-glibc.tar.bz2 -C /path/to/folder/

/path/to/folder can be any directory so long as the current user has permissions to write to it. Remember this path as its used later during the kernel build procedure.


RHEL/Fedora/CentOS:

yum install ncurses-devel ncurses
yum groupinstall "Development Tools" "Development Libraries"


Ubuntu/Debian:

sudo apt-get install build-essential libncurses5-dev libncursesw5-dev git
## If you are on a 64-bit system then 32-bit libraries will be required for the toolchain
# sudo apt-get install ia32-libs

For other distributions, please refer to their documentation to find equivalent tools.

Download sources and configure

git clone https://github.com/embeddedarm/linux-3.14.28-imx28.git
cd linux-3.14.28-imx28/

# These next commands set up some necessary environment variables
export ARCH=arm
export CROSS_COMPILE=/path/to/folder/arm-fsl-linux-gnueabi/bin/arm-linux-
export LOADADDR=0x40008000

# This sets up the default configuration that we ship with
make ts7680_defconfig

Once you have the configuration ready you can make your changes to the kernel. Commonly a reason for recompiling is to add support that was not built into the standard image's kernel. You can get a menu to browse available options by running:

make menuconfig

You can use the "/" key to search for specific terms through the kernel.

Build the kernel

Once you have it configured you can begin building the kernel. This usually takes about 5-10 minutes. This group of commands will also output a uImage file used by U-Boot on the TS-7680.

make && make uImage && make modules

We recommend running 'make' with the -jX argument, where X is the number of CPU cores+1 present on the build machine. This will greatly increase build speed.

Install the kernel/initramfs, headers, and modules

Next you need to install the kernel and modules to the SD card. We provide a simple script to copy the kernel uImage file, kernel modules, and headers to the SD card to update everything at once.

For example, if your workstation's SD card is /dev/mmcblk0:

./install_hdr_mod mmcblk0p2


If your workstation's SD card is /dev/sdc:

./install_hdr_mod sdc2