製作RAMDISK in KERNEL的OpenBSD微系統

 


前言

在以前我們已經講過如何製作軟碟上執行的 FreeBSD系統,現在我們來看看如何製作一個執行在軟碟上的OpenBSD系統。與軟碟上的 FreeBSD不同的是,這次我們將系統中的所有配製檔案及程式全部存放到OpenBSD的核心中,這樣整個系統看起來就是一個檔案。下面讓我們具體來看 看如何完成這樣一個微系統的製作。

0、OpenBSD的啟動過程

當硬碟MBR中的載入程式接過啟動之後,MBR 中的程式將讀入硬碟OpenBSD分區中的載入程式,載入程式預設情況下會加載/boot,然後由 boot載入核心,此時核心開始檢測一些硬體和做一些初始化。初始化完成後,kernel 將 mount root device,然後啟動系統初始化行程/sbin/init,init將根據/etc/rc中的設置來進行初始化等。

1、定製RAMDISK核心

要使用RAMDISK in KERNEL就必須在核心配製檔案中加入以下選項:
option RAMDISK_HOOKS
option MINIROOTSIZE=3560
pseudo-device rd 1

以上的核心參數意義如下:
option RAMDISK_HOOKS:開啟ramdisk in kernel的功能。
option MINIROOTSIZE=xxx:設置核心中ramdisk的大小,以512b為單位(據說最大容量為23000 )
pseudo-device rd 1:在核心中產生1個ramdisk設備。

2、製作ramdisk映像檔
# dd if=/dev/zero of=/ramdisk bs=512 count=3560
# vnconfig -c svnd0 /ramdisk
# disklabel -r -w svnd0 rdroot
# newfs -m 0 -S 512 -i 4096 /dev/svnd0a
# mount /dev/svnd0a /mnt
# mkdir /mnt/{dev,bin,sbin,etc}
# cp /dev/MAKEDEV /mnt/dev
# cp /bin/{sh,ls} /mnt/bin
# cp /sbin/init /mnt/sbin
# cd /mnt/dev/ && ./MAKEDEV ramdisk
# echo 'echo "This is my minibsd all in kernel" && /bin/sh' > /mnt/etc/rc
# sync && umount /mnt
# sync && vnconfig -u svnd0 && sync

3、將ramdisk寫入kernel
# cc -o rdsetroot /usr/src/distrib/common/elfrdsetroot.c
# ./rdsetroot /minibsd < ramdisk

4、壓縮kernel大小
# gzip -9 -c /minibsd > /minibsd.gz

5、製作目標軟碟

因為系統需要使用/boot(/usr/mdec/boot)來加載kernel,所以我們需要在軟碟上放置boot檔案。
# disklabel -B -w -r /dev/fd0a fd1440
# newfs -m 0 -S 512 /dev/fd0a
# mount /dev/fd0a /mnt
# cp /usr/mdec/boot /mnt
# cp /minibsd.gz /mnt/bsd

現在你的ramdisk in kernel的miniopenbsd系統就已經做好了。

 

 

arrow
arrow
    全站熱搜

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()