2012年09月24日

LTSI3.0のカーネルをビルドしてKZM-A9-GTボードで動かしてみる(更新)

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

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

以前のページから更新しています。

  • patchコマンドのversionが2.7になりました。
  • LTSIのmasterが3.4に移行したので、3.0のブランチをチェックアウトするようにしました。
  • LTSI3.0のベースのversionが3.0.43になりました。


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

0.準備

0.1 パッチコマンドの準備

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

$ mkdir work
$ cd work
$ wget http://ftp.gnu.org/gnu/patch/patch-2.7.tar.bz2
$ tar xvf patch-2.7.tar.bz2 
$ mkdir obj
$ cd obj
$ ../patch-2.7/configure 
$ make
$ sudo make install

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

$ which patch
/usr/local/bin/patch
$ patch --version
GNU patch 2.7
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 ltsi30
$ cd ltsi30
$ git clone http://git.linuxfoundation.org/ltsi-kernel.git
$ cd ltsi-kernel/
$ git branch -a
* master
  remotes/origin/3.0-ltsi
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git checkout -b 3.0-ltsi remotes/origin/3.0-ltsi
Branch 3.0-ltsi set up to track remote branch 3.0-ltsi from origin.
Switched to a new branch '3.0-ltsi'
$ cat KERNEL_VERSION 
3.0.43
$ cd ..

LTSIのmasterは既に3.4に移行しているので、3.0-ltsiのブランチをチェックアウトします。

KERNEL_VERSIONのfileに、ベースにしているカーネルのバージョンが書かれています。このLTSIのパッチは3.0.43をベースにしてます。

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

安定版カーネルのv3.0.43のタグをチェックアウトします。

$ git clone http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
$ cd linux-stable/
$ git checkout v3.0.43 -b ltsi3043

quiltコマンドでLTSI用のパッチを全て適用します。patchコマンドを更新しておかないとここでエラーが出ます。

$ 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_PRINTK_TIME=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.ltsi3043

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

KZM-A9-GT# set ipaddr 192.168.1.162
KZM-A9-GT# set serverip 192.168.1.110
KZM-A9-GT# set bootargs root=/dev/mmcblk0p2
KZM-A9-GT# tftpboot uImage.ltsi3043
smc911x: detected LAN9221 controller
smc911x: phy initialized
smc911x: MAC 00:01:9b:04:04:12
Using smc911x-0 device
TFTP from server 192.168.1.110; our IP address is 192.168.1.162
Filename 'uImage.ltsi3043'.
Load address: 0x43000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ############################################
done
Bytes transferred = 2222036 (21e7d4 hex)

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

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

Starting kernel ...

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

  ...


トラックバックURL

コメントする

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

QRコード
QRコード