| 
 | 
 
 
发表于 2003-7-2 09:44:32
|
显示全部楼层
 
 
 
发信人: frank (Frank), 信区: FreeBSD 
标  题: 小蔡笔记(2) 
发信站: BBS 水木清华站 (Mon Mar  6 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等, 
[root@cqflinux /root]# 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 |   
 
 
 
 |