The Linux kernel

From IGEP - ISEE Wiki

Revision as of 13:46, 12 March 2018 by Manel Caro (talk | contribs) (Linux kernels)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

What is Linux?

The Linux Kernel ArchivesLinux is a clone of the operating system Unix, written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX and Single UNIX Specification compliance.

It has all the features you would expect in a modern fully-fledged Unix, including true multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management, and multistack networking including IPv4 and IPv6.

Although originally developed first for 32-bit x86-based PCs (386 or higher), today Linux also runs on a multitude of other processor architectures, in both 32- and 64-bit variants.

Overview of How-To

This How-To is meant to be a starting point for people to learn build a kernel image for IGEP Processor Boards as quickly and easily as possible.

How to cross compile the linux kernel

In order to build the Linux Kernel for IGEP PROCESSOR BOARDS it's recommended to cross-compile the kernel, that's, build the kernel in your HOST machine for a target architecture.

To setup the cross-compiling there are two fundamental variables that the kernel uses to select the target architecture. Normally these values are guessed based on your build environment, but of course that environment here does not match our target embedded system, so we'll need to override them. The variables in question are ARCH and CROSS_COMPILE.

The ARCH variable is the architecture you're targetting as the kernel knows it. For IGEP PROCESSOR BOARDS you'll set to "arm" architecture.

Hopefully the CROSS_COMPILE variable is pretty self-explanatory. Set this to the prefix of your toolchain (including the trailing dash "-"). So if your toolchain is invoked as say arm-linux-gnueabihf-gcc, just chop off that trailing gcc and that's what you use: arm-linux-gnueabihf-.

There is an additional variable, INSTALL_MOD_PATH, which defines where the /lib directory will be created, and all the modules stored. While you don't have to transfer the kernel sources to your target device, if you build any modules, you'll want this directory.

As example, once you've downloaded the kernel source, you should follow these steps:

make ARCH=arm CROSS_COMPILE=[cross compiler] [defconfig]
make ARCH=arm CROSS_COMPILE=[cross compiler] zImage modules

Newest kernels can require build the dtbs too as:

make ARCH=arm CROSS_COMPILE=[cross compiler] zImage modules dtbs

The result will be a zImage file in ${KERNEL_SOURCES}/arch/arm/boot

And dabs will be in ${KERNEL_SOURCES}/arch/arm/boot/dts

At last you can install the kernel modules to your target rootfs using this command

make ARCH=arm CROSS_COMPILE=[cross compiler] modules_install INSTALL_MOD_PATH=[path to your target rootfs]


make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=/media/user/rootfs

Linux kernels

IGEP Boards based on Texas Instruments  Processors

IGEP Boards based on NXP-Freescale Processors