




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
制作软盘上运行的FreeBSD系统Unix系统 电脑资料 测试 平台:FreeBSD 4.5 Release (i386) 大家可能见到过很多在软盘上运行的 Linux 系统,可在软盘上运行的FreeBSD反而比较少,虽然有PICOBSD,然而很多时候PICOBSD并不能满足我们的需要,那么可不可以自己制作一个在软盘上运行的FreeBSD系统呢?答案是肯定的 测试平台:FreeBSD 4.5 Release (i386) 大家可能见到过很多在软盘上运行的Linux系统,可在软盘上运行的FreeBSD反而比较少,虽然有PICOBSD,然而很多时候PICOBSD并不能满足我们的需要,那么可不可以自己制作一个在软盘上运行的FreeBSD系统呢?答案是肯定的, 1、FreeBSD的启动过程简介 当BIOS读入MBR之后,MBR中的程序读入硬盘FreeBSD Slice(FreeBSD分区)中的引导程序,引导程序默认情况下会加载/boot/loader,然后loader将加载/kernel,此时kernel开始检测一些硬件和做一些初始化。初始化完成后kernel将mount root device,然后启动系统初始化进程/sbin/init,init将根据/etc/rc中的设置来进行初始化等。 可以看出我们需要解决的部分就是:引导程序 - /boot/loader - /kernel - /sbin/init - /etc/rc 在了解了启动过程之后和问题所在之后,我们便可以开始制作软盘上的FreeBSD了。 2、初始化软盘 首先要做的就是要将软盘初始化,包括设置disklabel和创建文件系统(格式化成ufs格式)。 bsd# disklabel -r -w fd0a fd1440 接下来是安装引导程序。 bsd# disklabel -B fd0a 现在软盘已经能够引导了,但因为我们要在它上面放置程序,所以要创建文件系统。 bsd# newfs fd0a 刚才已经做好了引导程序,因为引导程序会加载/boot/loader,所以我们还需要将系统中的/boot/loader复制到软盘中。 bsd# mkdir /fd bsd# mount /dev/fd0a /fd bsd# mkdir /fd/boot bsd# cp /boot/loader /fd/boot/loader 根据FreeBSD的启动过程,现在我们已经准备好了引导程序和loader,接下来就要准备内核了。 3、定制内核 软盘的空间有限,所以我们需要定制一个小内核,而不能直接使用系统原来的内核。 由于我们只使用软盘,所以内核中的关于scsi、ata、atapi和raid等这些东西都应该删除,因为我们不需要IPv6所以INET6也应该删除,具体留下些什么要看自己的用途了,这没有什么标准。不过有几样是必须的: options MFS # 内存文件系统支持 options MD_ROOT # 使用MD(内存磁盘)设备做root options UFS # UFS文件系统支持 options UFS_ROOT # UFS ROOT pseudo-device md # MD设备支持 下面是我使用的一个内核配制文件: # # GENERIC - Generic kernel configuration file for FreeBSD/i386 # # # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.38 xx/01/25 17:41:40 murray Exp $ machine i386 cpu I386_CPU cpu I486_CPU cpu I586_CPU cpu I686_CPU ident MINI-KERNEL maxusers 0 #maxusers最好让系统自动分配,如果设得过大,会占用过多的内存。 options INET #InterNETworking options FFS #Berkeley Fast Filesystem options FFS_ROOT #FFS usable as root device keep this! options MFS #Memory Filesystem options MD_ROOT #MD is a potential root device options PAT_43 #Compatible with BSD 4.3 KEEP THIS! options NO_SWAPPING #Disable swap device isa device pci # Floppy drives device fdc0 at isa? port IO_FD1 irq 6 drq 2 device fd0 at fdc0 drive 0 # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc0 at isa? port IO_KBD device atkbd0 at atkbdc? irq 1 flags 0x1 device vga0 at isa? # syscons is the default console driver, resembling an SCO console device sc0 at isa? flags 0x100 # Floating point support - do not disable. device npx0 at nexus? port IO_NPX irq 13 # PCI Ether NICs that use the mon MII bus controller code. # NOTE: Be sure to keep the device miibus line in order to use these NICs! device miibus # MII bus support device fxp # Intel EtherExpress PRO/100B (82557, 82558) device rl # RealTek 8129/8139 device xl # 3Com 3c90x device lnc0 at isa? port 0x280 irq 10 drq 0 # VMware Nic # Pseudo devices - the number indicates how many units to allocate. pseudo-device loop # Network loopback pseudo-device ether # Ether support pseudo-device md # Memory disks 上面的内核基本上是一个系统要运行的最小配制了,当然如果你的机器不同具体也不同,大家按自己的情况来定,我的机器配制是: CPU: Pentium III 733Mhz MotherBoard: Via 693A Chipset NIC: Realtek 8139c 当配制好之后就是编译内核了,建议大家使用config的方式来编译,注意,最后不要使用make install,否则你原来的内核会被替换。 bsd# cd /sys/i386/conf bsd# config MINI bsd# cd ././pile/MINI bsd# make depend & make kernel 编译完成后就会成生kernel这个文件,这时它的体积还是比较大,不过现在不用管它,后面将会介绍如何处理它。 4、编译系统程序 现在就要准备系统所需要的基本程序了,首先最基本的是init和sh,init是所有进程的父进程,它负责进行一些初始化工作,它将是kernel引导完成后要运行的第一个用户进程,而sh用于解释/etc/rc中的命令。 在UNIX中大部程序都使用了共享库,这有利减少磁盘空间的占用,这对于使用硬盘是非常有用的,然而对于软盘就不太适用了,因为单一个大部分程序都要使用的库libc.so就有500多K,加上其它的库软盘根本就装不下。 我们可以发现,大部分时候一个程序只是用到了库中的某个函数,但同样也要加载整个库,所以我们可以使用静态编译来使程序只包含它使用的那部分函数,这样可以减少程序的大小。 不过这样问题同样存在,如果只有少数程序这到没有什么,一旦程序很多时,那么空间问题同样存在。如果会C语言的朋友都知道,其实每一个程序中有很大一部分函数是相同的,比如printf,这个函数在大部分程序中都会用到,如果每个程序都包含一段printf的代码,那么如果有100个程序的话,就会包含100个这样的代码,然而这些代码都是相同的,实际上有99个都是浪费了空间,那么可不可以让一些程序在静态编译的情况下也能够共享一些函数呢?要知道答案,往下接着看, 幸好,PICOBSD为我们提供了这样的一个机制,使得程序即不用加载标准库也可以利用其它程序中的相同函数,这就是crunch(crunch好像是世界顶级 高手John Draper的网名,不知道这与他有没有关系。_)。 crunch是将所有需要的软件编译在一个文件中即crunch,然后当中的程序通过symbol link的方式link到它上面,这样便可以使用相应的程序(类似于linux中的busybox),同时又节约了空间。PICOBSD为我们提供了一个自己定制crunch的机会,在FreeBSD4.5 Release(注:4.8 Release中的crunch无法定制,至少 _找到,所以建议大家使用4.5)中,crunch的配制文件是/usr/src/release/picobsd/custom/crunch1/crunch.conf,它以选择你需要哪些软件,下面以一个例子来说明它的用法。 # $FreeBSD: src/release/picobsd/router/crunch.conf,v 1.1.2.2 xx/02/20 02:53:35 luigi Exp $ # # NOTE: the string /usr/src will be automatically replaced with the # correct value set in build script. - you should change it there # Default build options buildopts -DNOPAM -DRELEASE_CRUNCH -DNOSECURE -DNOCRYPT -DNONETGRAPH -DNOIPSEC # other sources srcdirs /usr/src/bin srcdirs /usr/src/sbin/i386 srcdirs /usr/src/sbin srcdirs /usr/src/usr.bin srcdirs /usr/src/usr.sbin srcdirs /usr/src/gnu/usr.bin srcdirs /usr/src/gnu/usr.sbin srcdirs /usr/src/libexec # sources for ns & vm srcdirs /usr/src/release/picobsd/tinyware # 以下为你所需要在crunch包含的程序列表,以空格分隔。 progs dmesg ping ifconfig route hostname progs cp rm ls cat test mkdir less progs uname sysctl progs init sh reboot # ln是表示建立一个别名,如ln less more,表示当执行more的时候实际上是执行lessln less more # 以下是指定编译时需要的库 libs -lncurses -lmytinfo -lipx libs -lz -lpcap -lalias libs -ledit -lutil -lmd -lcrypt -lmp -lgmp -lm -lkvm libs -lgnuregex -ltel 当好crunch.conf之后,你就可以开始编译crunch了: bsd# make 这时会生成一个名为crunch1的程序,我们要的就是它了。 5、建立内存磁盘 大家可以看到crunch1加上我们刚才编译的内核和loader程序,已经超出了软盘的容量,同时为了加速程序的运行我们需要使用MD(内存磁盘)来解决这个问题,MD将作为系统的根文件系统和用来存放系统程序。对于内存磁盘的大小一般不易太大,因为这样会占用过多的内存,下面我们就以建立一个3M的内存磁盘为例说明如何建立内存磁盘: bsd# cd /root bsd# dd if=/dev/zero f=bsd bs=1k count=3072 # 生成一个3M的文件,用来做MD bsd# vnconfig -c -s labels vn0c bsd # 使用bsd来创建一个vn设置,以便在其中存放程序 bsd# disklabel -w -r vn0c auto # 建立disklabel bsd# disklabel -B vn0c # 安装启动代码 bsd# newfs vn0c # 创建UFS文件系统 bsd# mount /dev/vn0c /mnt # 将vn0c即bsd mount到/mnt 下来要做的就是建立目录结构,具体建立哪些目录这要视需要决定,本例中需要建立如下目录: bsd# mkdir /mnt/etc bsd# mkdir /mnt/sbin bsd# mkdir /mnt/bin bsd# mkdir /mnt/dev 然后将crunch1复制到/mnt/sbin中,再将刚才编译进crunch1中的那些命令分别做上symbol link: bsd# cp /usr/src/release/picobsd/custom/crunch1/crunch1 /mnt/sbin bsd# cd /mnt/sbin bsd# ln -s ./crunch1 init # init必须在/mnt/sbin目录中 bsd# ln -s ./crunch1 reboot bsd# ln -s ./crunch1 sysctl bsd# ln -s ./crunch1 ifconfig bsd# ln -s ./crunch1 route bsd# ln -s ./crunch1 ping bsd# ln -s ./crunch1 dmesg bsd# cd /mnt/bin bsd# ln -s ./sbin/crunch1 sh # sh必须在/mnt/bin目录中 bsd# ln -s ./sbin/crunch1 hostname bsd# ln -s ./sbin/crunch1 cp bsd# ln -s ./sbin/crunch1 rm bsd# ln -s ./sbin/crunch1 ls bsd# ln -s ./sbin/crunch1 cat bsd# ln -s ./sbin/crunch1 test bsd# ln -s ./sbin/crunch1 mkdir bsd# ln -s ./sbin/crunch1 less bsd# ln -s ./sbin/crunch1 uname bsd# ln -s ./sbin/crunch1 more 6、编写启动脚本 因为我们的系统只是为了测试在软盘上运行FreeBSD,因而这里的启动脚本非常简单只是让系统可以工作,没有做其它的工作,其内容如下: #!/bin/sh # Floppy BSD init script PATH=/sbin:/bin HOME=/ export PATH HOME echo echo Hello, its my Floppy BSD echo # 因为没有使用验证,所以这里只是简单的一直运行shell while : ; do /bin/sh done 7、建立设备文件 现在需要建立一些基本的设备文件,我们使用/dev/MAKEDEV来完成这些操作: bsd# cd /mnt/dev bsd# cp /dev/MAKEDEV . bsd#./MAKEDEV std # 建立标准设备 bsd# rm MAKEDEV 8、最后工作 到目前为止,我们的启动部分,Kernel和内存磁盘都已经准备好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全日培训总结课件
- 有关购房合同汇编5篇
- 货运轮船买卖合同3篇
- 瑞士瑞妍细胞美疗课件
- 2025年日照市中考英语试题(附答案)
- 东莞乐园泳池工程方案(3篇)
- 农业生态保护与现代种业创新基地建设项目可行性研究
- 玻璃厂工伤预防知识培训课件
- 猫课件教学课件
- 猫咪聚会课件
- 迪拜果蔬市场发展趋势与前景分析
- 2025年调饮师职业技能竞赛(省赛)考试题库(含答案)
- 班级量化管理方法分享
- 土方倒运施工方案作业方案
- 工程部员工绩效考核方案
- 数学 第一册(五年制高职) 课件 3.3.1增函数与减函数的定义
- 抢救车管理制度
- Python工程应用-数据分析基础与实践课件-第3章
- 应急处突知识培训课件
- 人教版初中英语七八九全部单词(打印版)
- 某自来水厂运营管理项目服务方案(技术方案)
评论
0/150
提交评论