2012年07月10日

LTSIのカーネルをビルドしてKZM-A9-GTボードで動かしてみる

更新しました。こちらのページを参照してください。

LTSIのカーネルにはKZM-A9-GTボード(kzm9g)のサポートがバックポートされています。

LTSIのカーネルをソースを取得してビルドする手順を紹介します。



開発環境として、 Ubuntu 12.04 LTS (x86_64)を使用しています。

0.準備

0.1 パッチコマンドの準備

LTSIのリポジトリにはquiltコマンドで扱える形式のパッチが登録されています。このパッチの中にはファイル名の変更を含むものがあります。通常のpatchコマンドではファイルのrenameはまだサポートされていないので、最新版のパッチをソースアーカイブから持って来てビルド、インストールする必要があります。

$ mkdir work
$ cd work/
$ wget ftp://alpha.gnu.org/gnu/patch/patch-2.6.1.169-7096.tar.gz
$ tar xvf patch-2.6.1.169-7096.tar.gz 
$ mkdir obj
$ cd obj
$ ../patch-2.6.1.169-7096/configure 
$ make
$ sudo make install

patchコマンドのバージョンを確認します。

$ which patch
/usr/local/bin/patch
$ patch --version
GNU patch 2.6.1.169-7096
Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc.
Copyright (C) 1988 Larry Wall

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Larry Wall and Paul Eggert
$ 

0.2 クロスコンパイラのインストール

今回はLinaroのサイトにあるLong Term Supportのコンパイラを使用しました。

  $ wget http://launchpad.net/gcc-arm-embedded/4.6/2011-q4-major/+download/arm-none-eabi-gcc-4_6-20111208.tar.bz2
  $ sudo tar xvf arm-none-eabi-gcc-4_6-20111208.tar.bz2 -C /usr/local

0.3 その他のツールのインストール

 $ sudo apt-get git-core quilt u-boot-tools libncurses5-dev

libncurses5-devは make menuconfig を行うのに必要です。

1. LTSIパッチの取得

$ mkdir ltsi3036
$ cd ltsi3036
$ git clone http://git.linuxfoundation.org/ltsi-kernel.git
$ cat ltsi-kernel/KERNEL_VERSION 
3.0.36

このLTSIのパッチは3.0.36をベースにしてます。

2. 安定版カーネルのソースの取得とパッチの適用

$ git clone http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-stable
$ cd linux-stable/
$ git checkout v3.0.36 -b ltsi3036
$ export QUILT_PATCHES=../ltsi-kernel/
$ quilt push -a

3. ビルド

$ export ARCH=arm
$ export CROSS_COMPILE=/usr/local/arm-none-eabi-gcc-4_6/bin/arm-none-eabi-
$ make kzm9g_defconfig
$ make menuconfig

make menuconfig ではカーネルのブートパラメータを変更したり、使用するファイルシステムを追加したりします。

例えば以下を追加します。

CONFIG_BLK_DEV_INITRD=y
CONFIG_CMDLINE_EXTEND=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y
CONFIG_EXT4_FS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_INFO=y
$ make uImage

これで arch/arm/boot/uImage ができあがります。

4. KZM-A9-GTボードで動かす

U-BootからtftpでuImageをロードして動かしてみます。

$ cp arch/arm/boot/uImage /tftpboot/uImage.ltsi3036

KZM-A9-GTボードのU-Bootのプロンプトで

KZM-A9-GT# tftpboot uImage.ltsi3036
smc911x: detected LAN9221 controller
smc911x: phy initialized
smc911x: MAC 00:01:9b:04:04:10
Using smc911x-0 device
TFTP from server 192.168.1.110; our IP address is 192.168.1.162
Filename 'uImage.ltsi3036'.
Load address: 0x43000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ##########################################
done
Bytes transferred = 2209092 (21b544 hex)

bootmと入力すれば起動できます。

KZM-A9-GT# bootm
## Booting kernel from Legacy Image at 43000000 ...
   Image Name:   Linux-3.0.36-ltsi+
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2209028 Bytes = 2.1 MiB
   Load Address: 41008000
   Entry Point:  41008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Booting Linux on physical CPU 0
Linux version 3.0.36-ltsi+ (koba@koba-linux2) (gcc version 4.6.2 20110921 (release) [ARM/embedded-4_6-branch revision 182083] (GNU Tools for ARM Embedded Processors) ) #2 SMP PREEMPT Tue Jul 10 11:20:45 JST 2012
CPU: ARMv7 Processor [412fc098] revision 8 (ARMv7), cr=10c5387d
CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: kzm9g
debug: ignoring loglevel setting.
Memory policy: ECC disabled, Data cache writealloc
On node 0 totalpages: 126976
free_area_init_node: node 0, pgdat c04459a0, node_mem_map c0475000
  Normal zone: 992 pages used for memmap
  Normal zone: 0 pages reserved
  Normal zone: 125984 pages, LIFO batch:31
bootconsole [early_ttySC4] enabled
PERCPU: Embedded 7 pages/cpu @c085a000 s4640 r8192 d15840 u32768
pcpu-alloc: s4640 r8192 d15840 u32768 alloc=8*4096
pcpu-alloc: [0] 0 [0] 1
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 125984
Kernel command line: console=tty0 console=ttySC4,115200 root=/dev/nfs ip=dhcp ignore_loglevel earlyprintk=sh-sci.4,115200 root=/dev/sda2
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 496MB = 496MB total
  ...


トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード