2009年3月21日

Linux Kernel編譯+BusyBox+Ramdisk 筆記

wget http://www.busybox.net/downloads/busybox-snapshot.tar.bz2 <-- busybox檔案 Step1:編譯Kernel 抓下新版Kernel到/usr/src #tar -jxvf linux-2.6.23.12.tar.bz2 #ln -s linux-2.6.23.12 linux #cd linux #make menuconfig #make bzImage 將bzImage 複製到/boot/ Step2:建立映像檔以及掛載映象 #cd root #mkdir eb #cd eb #dd if=/dev/zero of=initrd.img bs=1k count=8192 #/sbin/mke2fs -F -v -m0 initrd.img #mkdir ramfs #mount -o loop initrd.img ramfs/ Step3:編譯BusyBox #cd /usr/src/busybox #make menuconfig (以下為參考) Busybox Settings >
Build Options >
[*] Build BusyBox as a static binary (no shared libs)
( 將busybox編譯為靜態連接 )

Init Utilities >
[*] init
[*] Support reading an inittab file
( 支援init讀取/etc/inittab配置 )

Shells >
Choose your default shell (ash) >
[*] ash

Coreutils >
[*] cp
[*] cat
[*] ls
[*] mkdir
[*] echo
[*] env
[*] mv
[*] pwd
[*] rm
[*] touch

Editors >
[*] vi

Linux System Utilities >
[*] mount
[*] umount
[*] Support loopback mounts
[*] Support for the old /etc/mtab file

Networking Utilities >
[*] inetd
( 支援inetd超級伺服器 )
#make PREFIX=/root/eb/ramfs/ all install
PREFIX指明安裝路徑,就是我們根系統路徑


Step4:建立FileSystem
#cd /usr/src/busybox/_install/
#cp -ar * /root/eb/ramfs
#cd /root/eb/ramfs
#mkdir dev etc lib proc tmp var(bin,sbin,usr已有)
#chmod 1777 tmp
#mkdir usr/lib(bin,sbin已有)
#mkdir var/lib var/lock var/log var/run var/tmp
#chmod 1777 var/tmp
#cd /dev
#cp -ar zero loop* tty? tty sda sda? fd random ram* null console /root/eb/ramfs/dev
#cd /lib
#for file in libc libcrypt libdl libm libpthread libresolv libutil; do cp -a /lib/$file-*.so /root/eb/ramfs/lib/; cp -d /lib/$file.so.[*0-9] /root/eb/ramfs/lib; done
#cp -d ld*.so* /root/eb/ramfs/lib
#cd /root/eb/ramfs/etc
#mkdir init.d
#cd init.d
#nano -w rcS

#!/bin/sh
#mount -n -o remount,rw /

#chmod 755 rcS
#cd /root/eb
#umount /root/eb/ramfs


Step5:修改開機檔
#gzip -9 initrd.img
#cp initrd.img.gz /boot
修改/boot/grub/menu.lst加入

title Embedded Linux
root (hd0,3) <-- 看自己的磁區決定
kernel /boot/bzImage root=/dev/ram ramdisk_size=16000
initrd /boot/initrd.img.gz
quiet

沒有留言: