Linuxカーネルコンパイル



SELinux を無効にする

開発環境がLinuxの場合、SELinuxが有効のときに一部のコマンドが作動しないことがあるので、予め無効にしておく必要がある。

# vi /etc/selinux/config
SELINUX=disabled

ファイル入手

# mkdir -p /usr/local/source
# cd /usr/local/source

(1) glibc

(2) BusyBox

(3) module-init-tool

(4) Linux_kernel


# ftp http://ftp.gnu.org/gnu/glibc/glibc-2.4.tar.bz2
# ftp http://www.busybox.net/downloads/busybox-1.1.1.tar.bz2
# ftp ftp://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2
# ftp http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.1.tar.bz2

ソフトウェアの展開

# cd /usr/local/source
# tar jxvf busubox-1.1.1.tar.bz2
# tar jxvf module-init-tools-3.2.tar.bz2
# tar jxvf glibc-2.4.tar.bz2
# cd /usr/src
# tar jxvf /usr/local/source/linux-2.6.16.1.tar.bz2
# ln -s linux-2.6.16.1 linux
# cd linux
# make mrproper
# make include/linux/version.h
# cd include/
# ln -s asm-i386 asm
# cd linux/
# touch autoconf.h

各ファイルのCompile

glibc

# mkdir -p /usr/local/source/build-glibc
# cd /usr/local/source/build-glibc/

# ../glibc-2.4/configure --with-tls \
> --without-selinux \
> --with-headers=/usr/src/linux/include \
> --prefix=/usr
# make
# make install_root=/usr/local/mylinux2 install

busybox

# cd /usr/local/source/busybox-1.1.1
# make defconfig
# make dep
# make
# make PREFIX=/usr/local/mylinux2 install

module-init-tools

# /usr/local/source/module-init-tools-3.2
# ./configure --prefix=/usr --exec-prefix=/usr/local/mylinux2 \
> --datadir=/usr/local/mylinux2/usr/share \
> --includedir=/usr/local/mylinux2/usr/include \
> --mandir=/usr/local/mylinux2/usr/share/man
# make
# make install

カーネルコンパイル

カーネルのバージョン確認

# uname -r

コンフィグファイル

# cd /boot
# cp config-xxxx /usr/src/linux/.config

makeファイル書き換え

# vi /usr/src/linux/Makefile
###EXTRAVERSION=.1
EXTRAVERSION=.1-mylinux2

コンパイル

# cd /usr/src/linux
# make oldconfig
# make
# make INSTALL_MOD_PATH=/usr/local/mylinux2 modules_install

USBメモリーへ導入

initrd(イニシャル・ラム・ディスク)作成


initrdコマンド実行

# mkdir /usr/local/mylinux2/boot
# cd /usr/local/mylinux2/boot
# /sbin/mkinitrd initrd-mylinux2.img `uname -r`

initrdファイル展開

# mkdir /tmp/inittmp
# gzip -cd /usr/local/mylinux2/boot/initrd-mylinux2.img > /tmp/initrd
# cd /tmp/inittmp/
# cpio -i --file=../initrd

initスクリプトの編集

# vi /tmp/inittmp/init


echo "Loading sg.ko module"
insmod /lib/sg.ko
echo "Loading jbd.ko module"
insmod /lib/jbd.ko
echo "Loading ext3.ko module"
insmod /lib/ext3.ko
echo "Loading ehci-hcd.ko module"
insmod /lib/ehci-hcd.ko
echo "Loading ohci-hcd.ko module"
insmod /lib/ohci-hcd.ko
echo "Loading uhci-hcd.ko module"
insmod /lib/uhci-hcd.ko
echo "Loading usb-storage.ko module"
insmod /lib/usb-storage.ko
sleep 10
mkrootdev -t ext3 -o defaults,ro sda1

モジュールの追加・編集

cd /usr/local/mylinux2/lib/modules/2.6.16.1-mylinux2/kernel/
cp -p drivers/scsi/scsi_mod.ko /tmp/inittmp/lib/.
cp -p drivers/scsi/sd_mod.ko /tmp/inittmp/lib/.
cp -p drivers/scsi/sg.ko /tmp/inittmp/lib/.
cp -p drivers/usb/host/ehci-hcd.ko /tmp/inittmp/lib/.
cp -p drivers/usb/host/uhci-hcd.ko /tmp/inittmp/lib/.
cp -p drivers/usb/host/ohci-hcd.ko /tmp/inittmp/lib/.
cp -p drivers/usb/storage/usb-storage.ko /tmp/inittmp/lib/.
cp -p fs/jbd/jbd.ko /tmp/inittmp/lib/.
cp -p fs/ext3/ext3.ko /tmp/inittmp/lib/.

initrdファイルの導入

cd /tmp/inittmp/
find . -print | cpio -o --file=../initrd-mylinux2 --format=newc
cd /tmp
gzip -9 -S .img initrd-mylinux2
cp -p initrd-mylinux2.img /usr/local/mylinux2/boot/.

inittab編集

ディレクトリ作成

mkdir /usr/local/mylinux2/etc/rc.d
cd /usr/local/mylinux2/etc/rc.d
mkdir rc3.d rc6.d init.d

「/usr/local/mylinux2/etc/.」配下に以下のファイルを作成

inittab
profile 
group
shadow
fstab
motd 
mtab 
hostname
hosts
passwd

「/usr/local/mylinux2/etc/rc.d/.」配下に以下のファイルを作成

rc.sysinit
rc.shutdown  
rc.status

「/usr/local/mylinux2/boot/grub/.」配下に以下のファイルを作成

# mkdir /usr/local/mylinux2/boot/grub
grub.conf    

「/usr/local/mylinux2/etc/rc.d/init.d/.」配下に以下のファイルを作成

network
filesystem

シンボリックリンク作成

cd /usr/local/mylinux2/etc/rc.d/rc3.d/
ln -s ../init.d/filesystem S00filesystem
ln -s ../init.d/network S10network
cd ../rc6.d/
ln -s ../init.d/filesystem K99filesystem
ln -s ../init.d/network K90network

スクリプトの実行権限設定

cd /usr/local/mylinux2/etc/rc.d/
chmod -R 755 *


日本語キーボード設定

touch /usr/local/mylinux2/etc/ld.so.conf
/usr/sbin/chroot /usr/local/mylinux2 /sbin/ldconfig -v
/usr/local/mylinux2/bin/dumpkmap > /usr/local/mylinux2/etc/keymap.jp106

デバイス・ファイル設定

カーネルのコピー

cp -p /usr/src/linux/arch/x86_64/boot/bzImage /usr/local/mylinux2/boot/2.6.16.1-mylinux2
cp -p /usr/src/linux/System.map /usr/local/mylinux2/boot/.

デバイスファイルのコピー

cd /usr/local/mylinux2/
mkdir -p home proc tmp mnt dev root sys
cp -ar /dev/* /usr/local/mylinux2/dev/.

USBメモリーへの書き込み

USB確認

# dfisk -l

パーティション設定

umount /media/disk
/sbin/fdisk /dev/sdb
d
n
p
1
[Enter]
[Enter]
l
83
a
1
w

フォーマット

umount /media/disk
/sbin/mkfs.ext3 /dev/sdb1

ファイルコピー

cd /usr/local/mylinux2
tar czvf ../mylinux2.tgz .
mount -t ext3 /dev/sdb1 /mnt
cd /mnt
tar xzvf /usr/local/mylinux2.tgz

GRUB導入

/sbin/grub-install --root-directory=/mnt /dev/sdb





スポンサード リンク