Linux 2.6 INITRAMFS 自訂筆記

Linux 在 Kernel 2.6之後提供了INITRD的新繼任者INITRAMFS,可以大大減少開機時記憶體的浪費,關於兩者的詳細比較,可以參考以下兩篇精彩的文章:
initramfs 簡介,一個新的 initial RAM disks 的模型
深入理解 Linux 2.6 的 initramfs 機制 (上)

既然軟體有架構上的更改,製作方法也有不一樣的地方,從mkininitrd改成mkinitramfs。像是debian live helper一樣,mkinitramfs也提供很多hook,可以作到很細緻的完全自訂,主要的設定檔放在以下兩個目錄:
/etc/initramfs
/usr/share/initramfs-tools

以下以最近製作的一個基於initramfs的迷你系統作說明:
Step 1: 修改 /etc/initramfs/initramfs.conf
#將預載模組改為list,可以大大縮減initramfs的大小
MODULES=list
#不要使用busybox,因為我會用到一些進階的功能,使用busybox會有力有未逮的情形
BUSYBOX=n

Step 2: 修改/etc/initramfs/modules
#加入必須的module
e1000e
usbhid

Step 3:修改/usr/share/initramfs-tools/init
讓init做完maybe_break modules之後,就停在init裡面並且呼叫自己的程式

Step 4:在/usr/share/initramfs-tools/hooks目錄新增一個burnin檔案,負責在製作過程中,把自己外掛的檔案加到壓縮檔中
#! /bin/sh -e
SOURCE=/opt/backtrack
case $1 in
prereqs)
 exit 0
 ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec $SOURCE/sbin/getty /sbin
...
mkdir -p ${DESTDIR}/usr/bin
copy_exec $SOURCE/usr/bin/netserver /usr/bin
...

exit 0

Step 5:製作最終的initramfs
update-initramfs -k 2.6.30.10 -c
-k 參數指定核心版本,最終檔案會生成/boot/initrd.img-2.6.30.10

留言

這個網誌中的熱門文章

RTC & CMOS 技術詳解

[自由網路] 如何取得 Google Drive (真實)外連位址 (Direct Link)