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 ...