TS-7600 kernel compile guide
For adding new support to the kernel, or recompiling with more specific options, the kernel can be customized and re-built. An x86 compatible Linux workstation that can handle cross compilation is required. We recommend using a Debian distribution. Compiling the kernel on the device is not supported or recommended. Before building the kernel, the necessary support libraries will need to be installed on the Linux workstation:
Prerequisites
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 using a 64-bit system, then 32-bit compatibility libraries will be required for the toolchain, for newer Debian and Ubuntu distributions with Multiarch support, use the command:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6-dev:i386 zlib1g-dev:i386
On older distributions:
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/embeddedTS/linux-2.6.35.3-imx28.git
# This sets up the default configuration that we ship with
make ts7600_defconfig
ln -sf initramfs.cpio-ts7600 initramfs.cpio
Once the configuration is loaded, any needed changes can be made to it. A common reason for recompiling is to add support that was not built into the standard image's kernel. An ncurses menu to browse available configuration options can be opened with:
make menuconfig
The "/" key is to search for specific terms through the kernel.
Build the kernel
Once any customization is completed, the kernel can be built. This usually takes about 5-10 minutes depending on workstation CPU speeds:
make
Build bootstream
The i.MX28 utilizes what NXP calls a bootstream
This is a series of bootlets
that are all put together in a binary blob that make up a bootloader for the whole system. The in-CPU ROM bootloader is very small and therefore uses the bootstream
on the boot media to handle further loading. The default bootstream
sets up RAM, power, and contains the kernel to be run. Every time the kernel is built, a new bootstream
must be compiled containing the new kernel image. The following script is used to take the newly built kernel and output a bootstream
for an SPI device as well as an SD card:
./build_bootstream
This will create two files, imx-bootlets-src-10.12.01/imx28_ivt_linux.sb
and imx-bootlets-src-10.12.01/imx28_ivt_linux.spi
. The imx28_ivt_linux.sb
file is the standard image used for the SD card, while the imx28_ivt_linux.spi
is meant to be imaged to the SPI flash device on the TS-7600.
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:
./build_wireless
Install the bootstream (kernel/initramfs) and Modules
Next, install the kernel and modules to the SD card. NXP uses a specialized booting mechanism for their processor, so to simplify installation we provide two scripts to handle installation of the kernel+bootstream, kernel modules, headers, and compat-wireless modules.
For example, if your workstation's SD card is /dev/mmcblk0:
./install_bootstream imx-bootlets-src-10.12.01/imx28_ivt_linux.sb mmcblk0 p1
./install_hdr_mod mmcblk0p2
Note: | On newer Linux distributions, the output of 'fdisk' has changed. If the unit fails to boot after a compile, take a look at the output of the './install_bootstream ... ' command. If the line
./install_bootstream: line 122: [: !=: unary operator expected
is printed, then a patch must be applied to address this issue. Use the following command to apply the patch: patch -p1 < install_bootstream-newer-fdisk.patch
|
Install the bootstream (kernel/initramfs) to SPI flash
The ./build_bootstream
command creates the file imx-bootlets-src-10.12.01/imx28_ivt_linux.spi
that can be used to program the SPI flash, see the SPI Flash section for more information. The ./install_hdr_mod
command copies both the SPI bootstream and the stock bootstream to /lib/modules
so they may be used to program SPI devices or NAND.
This bootstream is the exact same kernel/initramfs that is made for the SD card, it has the exact same init script.