読者です 読者をやめる 読者になる 読者になる

φ(.. )メモシテオコウ /sbin/installkernelを適当に作っておく

arch linux

Arch Linuxに/sbin/installkernelコマンドが無いのでとりあえず作っておくと後々楽ですねということで。

Linuxカーネルをこのようにビルドしている場合、最後のmake install実行時に/sbin/installkernelというコマンドが呼ばれます。

  1. make menuconfig
  2. make bzImage
  3. make modules
  4. make modules_install
  5. make install

これはbzImage、System.mapを/bootにコピーしたり、initramfsを作るためのスクリプトでMakefileから/sbin/installkernelを引数を4つ渡して実行しています。

  1. カーネル名(uname -rで出る名称)
  2. bzImageへのパス(カーネルソースのルートディレクトリからのパス)
  3. System.mapのファイル名(これはSystem.map)
  4. コピー先ディレクトリ(/boot)

なのでこれらを引数受け取って/bootへのコピーとmkinitcpio(Arch Linuxはmkinitramfsではなかったので)でinitramfsの作成をすれば良いということですね。
以下のスクリプトが自前の/sbin/installkernelコマンドです。

#!/bin/bash

if [ $# != 4 ]; then
    echo "usage $0 [vmlinuz name] [bzImage file name] [System.map file name] [output dir]"
    exit 1
fi

kernelName=$1
bzImage=$2
SystemMap=$3
dirname=$4

cp -f $bzImage $dirname/vmlinuz-$kernelName
cp -f $SystemMap $dirname/System.map-$kernelName

mkinitcpio -k $kernelName -c /etc/mkinitcpio.conf -g /boot/initramfs-$kernelName.img

echo "Done."

initramfsに何のコマンドを使うかは別として、他のディストリビューションでもこれが使えると思います。