カーネルの再構築

MA-E210のカーネルをビルドする方法について説明します。

まず、ビルドする作業ディレクトリを作成します。

user1@ma-devel ~ $ mkdir src
user1@ma-devel ~ $ cd src/
user1@ma-devel ~/src $ 

次に、gitリポジトリからカーネルのソースを取得します。

user1@ma-devel ~/src $ git clone http://133.242.204.151/gitlab/ma-e2xx/linux-2-6-28-x_mae2xx.git
Cloning into 'linux-2-6-28-x_mae2xx'...
remote: Counting objects: 28035, done.
remote: Compressing objects: 100% (11528/11528), done.
remote: Total 28035 (delta 16222), reused 28035 (delta 16222)
Receiving objects: 100% (28035/28035), 77.89 MiB | 5.51 MiB/s, done.
Resolving deltas: 100% (16222/16222), done.
Checking connectivity... done
Checking out files: 100% (26108/26108), done.
user1@ma-devel ~/src $ ls -l
合計 4
drwxr-xr-x 23 user1 users 4096  9月  3 13:32 linux-2-6-28-x_mae2xx

デフォルトのconfigをいくつか用意してありますので、とりあえずは基本の(MA-E210用) “config_Magnolia2_default” を使用してみます。

user1@ma-devel ~/src $ cd linux-2-6-28-x_mae2xx/
user1@ma-devel ~/src/linux-2-6-28-x_mae2xx $ cp config_Magnolia2_default .config
user1@ma-devel ~/src/linux-2-6-28-x_mae2xx $ 

PC Linuxの場合と同様に、make menuconfig でconfigをカスタマイズすることもできます。

user1@ma-devel ~/src/linux-2-6-28-x_mae2xx $ make menuconfig

make menuconfig

カスタマイズが終了したら、ビルドを行います。

user1@ma-devel ~/src/linux-2-6-28-x_mae2xx $ make all
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf -s arch/arm/Kconfig
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  SYMLINK include/asm -> include/asm-arm
  Generating include/asm-arm/mach-types.h
  CHK     include/linux/utsrelease.h
  UPD     include/linux/utsrelease.h
  HOSTCC  scripts/kallsyms
  〜〜〜 略 〜〜〜
  LD [M]  net/netfilter/xt_quota.ko
  LD [M]  net/netfilter/xt_realm.ko
  LD [M]  net/netfilter/xt_rateest.ko
  LD [M]  net/netfilter/xt_sctp.ko
  LD [M]  net/netfilter/xt_recent.ko
  LD [M]  net/netfilter/xt_socket.ko
  LD [M]  net/netfilter/xt_statistic.ko
  LD [M]  net/netfilter/xt_string.ko
  LD [M]  net/netfilter/xt_tcpmss.ko
  LD [M]  net/netfilter/xt_u32.ko
  LD [M]  net/sctp/sctp.ko
  LD [M]  net/netfilter/xt_time.ko
user1@ma-devel ~/src/linux-2-6-28-x_mae2xx $ make uImage
  CHK     include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' は更新済みです
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  CALL    scripts/checksyscalls.sh
<stdin>:1097:2: 警告: #warning syscall fadvise64 not implemented
<stdin>:1265:2: 警告: #warning syscall migrate_pages not implemented
<stdin>:1321:2: 警告: #warning syscall pselect6 not implemented
<stdin>:1325:2: 警告: #warning syscall ppoll not implemented
<stdin>:1365:2: 警告: #warning syscall epoll_pwait not implemented
  CHK     include/linux/compile.h
dnsdomainname: Unknown host
  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.28.10-Magnolia2
Created:      Tue Sep  3 13:46:11 2013
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3143344 Bytes = 3069.67 kB = 3.00 MB
Load Address: 80008000
Entry Point:  80008000
  Image arch/arm/boot/uImage is ready

ホスト用にカーネルをビルドする場合は、“make modules_install” でカーネルモジュールのインストールを行いますが、 クロスコンパイルしているためその方法は使用できないため、ターゲットディレクトリを指定してモジュールをインストールします。

user1@ma-devel ~/src/linux-2-6-28-x_mae2xx $ INSTALL_MOD_PATH=/tmp make modules_install
Warning: you may need to install module-init-tools
See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt
  INSTALL crypto/tcrypt.ko
  INSTALL drivers/hid/hid-a4tech.ko
  INSTALL drivers/hid/hid-apple.ko
  INSTALL drivers/hid/hid-belkin.ko
  〜〜〜 略 〜〜〜
  INSTALL net/netfilter/xt_time.ko
  INSTALL net/netfilter/xt_u32.ko
  INSTALL net/sctp/sctp.ko
  DEPMOD  2.6.28.10-Magnolia2
depmod: WARNING: could not open /tmp/lib/modules/2.6.28.10-Magnolia2/modules.builtin: No such file or directory
user1@ma-devel ~/src/linux-2-6-28-x_mae2xx $ 

/tmp/lib/modules 以下にインストールされました。

さきほどビルドしたカーネル本体(arch/arm/boot/uImage)と、カーネルモジュールをセットで ターゲットのMA-E210に使用することになります。

user1@ma-devel ~/src/linux-2-6-28-x_mae2xx $ cd /tmp/lib/modules/
user1@ma-devel /tmp/lib/modules $ tar cjvf 2.6.28.10-Magnolia2.tar.bz2 2.6.28.10-Magnolia2/
2.6.28.10-Magnolia2/
2.6.28.10-Magnolia2/modules.alias.bin
2.6.28.10-Magnolia2/modules.dep
2.6.28.10-Magnolia2/modules.softdep
2.6.28.10-Magnolia2/kernel/
  〜〜〜 略 〜〜〜
2.6.28.10-Magnolia2/modules.symbols
2.6.28.10-Magnolia2/modules.dep.bin
2.6.28.10-Magnolia2/modules.devname
2.6.28.10-Magnolia2/modules.symbols.bin
user1@ma-devel /tmp/lib/modules $