制作RAMDISK in KERNEL的OpenBSD微系统ZT

发表于:2007-06-09来源:作者:点击数: 标签:
看精华里面光有作FreeBSD的,转来做OpenBSD的吧: [quote:f388e8ca44] 制作RAMDISKinKERNEL的OpenBSD微系统 Matthew(黑夜编码人)matthew@cnfug.org 前言 在以前我们已经讲过如何制作软盘上运行的FreeBSD系统,现在我们来看看如何制作一个运行在软盘上的OpenB

看精华里面光有作FreeBSD的,转来做OpenBSD的吧:
[quote:f388e8ca44]
制作RAMDISK in KERNEL的OpenBSD微系统 

Matthew(黑夜编码人) <matthew@cnfug.org> 

前言 

在以前我们已经讲过如何制作软盘上运行的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 

clearcase/" target="_blank" >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系统就已经做好了。 

注:任何转载或摘抄请保留作者信息和注明文章出处(中文FreeBSD用户组 http://www.cnfug.org) 

[/quote:f388e8ca44]

原文转自:http://www.ltesting.net