User Tools

Site Tools


making_kernel_with_dtb

This is an old revision of the document!


Introduction

Since Linux x.y.z, the kernel support arm device via a device tree. The idea is to make one kernel which supports all platform. The bootloader passes a device tree binary (DTB) to Linux, describing the platform. If the bootloader can't pass the DTB to the kernel, you need to append to it.

Toolchain

You need a toolchain for cross-compiling the kernel

Distribution name command to get mkimage command toolchain triplet
Ubuntu 12.10 sudo apt-get install arm-linux-gnueabi-gcc arm-linux-gnueabi-

Setting up kernel source

Get the source from lacie-nas.org :

git-clone git://lacie-nas.org/linux-lacie.git

As DTB is not yet in mainstream for marvell platforms, you need to check out the DTB branch

cd linux-lacie
git checkout -b remotes/origin/kirkwood/dtb-append

Making kernel

Next build your kernel with your toolchain ( here is for kirkwood ) :

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-  kirkwood_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

This will build kernel image, and dtb for all kirkwood platforms.

Preparing the kernel for u-boot

Now you have to append the DTB to kernel. DTB are in the arch/arm/boot/ directory. Choose the one corresponding to your device ( here this is a network space 2 lite ) :

cat arch/arm/boot/zImage arch/arm/boot/kirkwood-ns2lite.dtb > zImage+kirkwood-ns2lite.dtb

Now you need to add an header for u-boot loader. First get the “mkimage” command :

Distribution name command to get an arm toolchain
Ubuntu 12.10 sudo apt-get install u-boot-tools

Make uImage. This is the binary to be loaded by u-boot :

mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Linux+dtb -d zImage+kirkwood-ns2lite.dtb uImage

You can now boot this image :

U-Boot 2012.10 (Dec 03 2012 - 12:59:10) NS v2 Lite

SoC:   Kirkwood 88F6281_A1
DRAM:  128 MiB
WARNING: Caches not enabled
SF: Detected MX25L4005 with page size 64 KiB, total 512 KiB
In:    nc
Out:   nc
Err:   nc
Net:   egiga0
88E1318 Initialized on egiga0
Hit any key to stop autoboot:  0
ns2>
ns2> tftp uImage
Using egiga0 device
TFTP from server 192.168.1.19; our IP address is 192.168.1.65
Filename 'uImage'.
Load address: 0x800000
Loading: #################################################################
         #################################################################
         ######################################################
done
Bytes transferred = 2689852 (290b3c hex)
ns2> bootm
## Booting kernel from Legacy Image at 00800000 ...
   Image Name:   Linux+dtb
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2689788 Bytes = 2.6 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
   Loading Kernel Image ...
making_kernel_with_dtb.1354806299.txt.gz · Last modified: 2012/12/06 16:04 by 78.122.157.53