心想事成 发表于 2003-7-2 09:44:32

发信人: frank (Frank), 信区: FreeBSD
标题: 小蔡笔记(2)
发信站: BBS 水木清华站 (Mon Mar6 21:42:20 2000)

Subject: 小蔡笔记2
Date: Sun, 5 Mar 2000 12:09:13 +0800
From: "caiqingfeng"
To:


下面是上次看FreeBSD启动代码的副产品:
1 Make a custom install floppy in FreeBSD
首先需要对其所要用到的文件作一说明:
/boot/boot1
/boot/boot2
kernel(.gz)
mfsroot(.gz)
用到的工具有dd,vnconfig,disklabel,tar,gzip等.重点是dd和vnconfig,disklabel.
dd if= of= obs= ibs= seek= skip=
其中ibs(input block size), obs(output block size)一般情况相等,可用bs(block
size)
代替.seek是输出时偏移,skip是输入时偏移;
vnconfig是用来将一个文件当成一个文件系统操作用的.
其手册上的说明可能有点问题,具体操作为:
#vnconfig /dev/rvn0 filename, 配置vn的时候必须用char型的设备
#mount /dev/vn0 /mnt,而用mount时要用block型号的设备,其实二者指同一设备,
disklabel用来标记对文件系统label,另外可以用来安装bootstrap block.即
boot1,boot2.
其实/usr/src/release/scripts/doFS.sh可以完成这些工作
所以,制作的步骤如下:
第一步
    制作安装盘中的执行文件Crunched programs,包括ls, sh, test等,将其拷贝到目

    目录如/R/stage/mfsfd/stand下.
第二步
    设置其它配置文件,相当于/etc下的文件;并将必要的帮助文件准备好.
第三步
    准备好所有安装盘中的文件之后,产生mfsroot文件,利用
/usr/src/release/scripts/
doFS.sh来产生;
第四步
    因为在kernel里有一句话:"MFS file system got here",这就是标记存放mfsroot
文件
系统的地方
    再将mfsroot.gz文件拷贝到此位置,并压缩即产生kernel.gz
第五步
    准备其它文件如/boot/*,仿第三步产生boot.flp
我想对上面清楚了之后,制作自己的安装盘或者恢复盘应该说就很简单了吧.
2 Crunched programs
在很多系统中都有"Crunched programs",如redhat中linuxconf,netconf,userconf等,
# ls -l /bin/*conf
lrwxrwxrwx   1 root   root   14 Jan 21 01:30 /bin/fsconf ->
/bin/linuxconf
-rwx------   1 root   root 752352 Sep 26 03:41 /bin/linuxconf
lrwxrwxrwx   1 root   root   14 Jan 21 01:30 /bin/lpdconf ->
/bin/linuxconf
lrwxrwxrwx   1 root   root   14 Jan 21 01:30 /bin/netconf ->
/bin/linuxconf
lrwxrwxrwx   1 root   root   14 Jan 21 01:30 /bin/userconf ->
/bin/linuxconf
lrwxrwxrwx   1 root   root   14 Jan 21 01:30 /bin/xconf ->
/bin/linuxconf
在命令行中执行userconf出现userconf的窗口,linuxconf出现linuxconf的窗口,虽然它

都是同一文件(可从属性中看到,其它文件都是/bin/linuxconf的符号链接.)基本原理是

别将fsconf,userconf,linuxconf等写好,然后将其crunched到一起,根据命令行的第一

参数(其实就是命令自身)来确定是执行哪一个程序,一般是用来制作系统的安装盘或者
恢复
盘,将尽可能多的程序crunched到一起.我将以FreeBSD为例,如何编写.
首先编写一个文件,helloworld.conf,内容为
srcdirs /usr/cqf/rnd/crunch
progs hello world
在/usr/cqf/rnd/crunch/下分别建立两个目录hello,world;
在hello目录下建立一个Makefile和hello.c文件,其中Makefile为:
depend:
all:hello.o
hello.o:hello.c
      cc -c hello.c
hello.c的内容为:
main()
{
      printf("hello!n");
}
world目录下仿此建立两个文件Makefile,world.c,将上面的hello换成world;
到/usr/cqf/rnd/crunch目录下执行crunchgen -m Makefile helloworld.conf产生
Makefile,然后执行make objs exe就可以看到有helloworld程序产生.如果用
ln helloworld /usr/tmp/hello产生一个hello的链接,再执行/usr/tmp/hello将会有如

输出:hello!




----------------------------------------------------------------
在回复文章之前,请先查看http://www.cn.FreeBSD.org/FAQ
如果想取消订阅本列表的话,将"unsubscribe cn-bsd-questions"放在邮件的正文
中寄到majordomo@cn.FreeBSD.org
页: [1]
查看完整版本: 小蔡笔记(2) zt